From 58a41282c4e4fb2cd70f80594b7e3363d6c54e16 Mon Sep 17 00:00:00 2001 From: Bohdan Date: Fri, 21 Jan 2022 15:59:35 +0200 Subject: [PATCH 01/27] Add: environment mode --- README.md | 1 + src/sdk.js | 65 ++++++++++++++++++++------------- src/utils/environments.js | 4 ++ src/utils/loadExternalScript.js | 27 +++++++++++++- 4 files changed, 70 insertions(+), 27 deletions(-) create mode 100644 src/utils/environments.js diff --git a/README.md b/README.md index 8f814533..829267c9 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ The SDK constructor accepts multiple options when initializing which can be used | Option | Type | Default | Description | |-----------|---------------|---------------|---------------| +| environment | String | browser | Could be 'browser'/'chrome_extension' | | token | String | Null | Monitor code token to use for login | | user | String | Can be used to login with "user" or "account" login type | | | password | String | Used for login with "user" or "account" login type. Must be used together with user property | | diff --git a/src/sdk.js b/src/sdk.js index 5dd9b83d..7a687cda 100644 --- a/src/sdk.js +++ b/src/sdk.js @@ -1,4 +1,5 @@ import eventTypes from './eventTypes'; +import environments from './utils/environments' import { defaultServers } from './config'; import Logger from './Logger'; import debounce from 'lodash/debounce' @@ -13,6 +14,7 @@ import md5 from "js-md5"; const defaultOptions = { url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`, + environment: environments.BROWSER, fallbackServer: { Domain: 'monitor5.voicenter.co.il', Priority: 0, @@ -191,7 +193,7 @@ class EventsSDK { async _onLoginResponse(data) { if (data.Client) { - await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0') + await loadExternalScript(data.Client, this.options.environment) } if (data.URL) { this.server = { @@ -299,9 +301,7 @@ class EventsSDK { token: this.token } } - this.socket = window.io(url, options) - - + this.socket = self.io(url, options) allConnections.push(this.socket); this.connectionEstablished = true; @@ -409,7 +409,7 @@ class EventsSDK { } _onEvent(packet) { - if (!packet.data) { + if (!packet.data) { return; } let evt = this._parsePacket(packet); @@ -555,27 +555,36 @@ class EventsSDK { } } } - _getTabsSession(){ - if (!window.sessionStorage.length) { - // Ask other tabs for session storage - localStorage.setItem('getSessionStorage', Date.now()); - }; + _getTabsSession() { + if (this.options.environment !== environments.BROWSER) { + return Promise.resolve() + } + + if (!window.sessionStorage.length) { + // Ask other tabs for session storage + localStorage.setItem('getSessionStorage', Date.now()); + } + + return new Promise((resolve) => { window.addEventListener('storage', (event) => { - //console.log('storage event', event); - if (event.key == 'getSessionStorage') { + if (event.key === 'getSessionStorage') { // Some tab asked for the sessionStorage -> send it localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); localStorage.removeItem('sessionStorage'); - } else if (event.key == 'sessionStorage' && !sessionStorage.length) { + } else if (event.key === 'sessionStorage' && !sessionStorage.length) { // sessionStorage is empty -> fill it - var data = JSON.parse(event.newValue), - value; + const data = JSON.parse(event.newValue) + for (let key in data) { - window.sessionStorage.setItem(key, data[key]); + if (data.hasOwnProperty(key)) { + window.sessionStorage.setItem(key, data[key]); + } } + + resolve() } }) - return new Promise(resolve => setTimeout((resolve), 200)) + }) } /** @@ -593,28 +602,35 @@ class EventsSDK { } let key = md5(JSON.stringify(payload)) const delay = 1000; + if (this._lastLoginTimestamp + delay > new Date().getTime()) { return Promise.resolve() } + this._lastLoginTimestamp = new Date().getTime() + return new Promise(async (resolve, reject) => { - try{ + try { let loginSession = window.sessionStorage.getItem(key); - if(loginSession){ + + if (loginSession) { loginSession = JSON.parse(loginSession) this.Logger.log('got data from session', loginSession); await this._onLoginResponse(loginSession) return resolve(loginSession); } - }catch(err){ - this.Logger.log('Error on getting session',err) + } catch (err) { + this.Logger.log('Error on getting session', err) } + try { - let url = getExternalLoginUrl(this.options.loginUrl, type) - const res = await externalLogin(url,payload) + const url = getExternalLoginUrl(this.options.loginUrl, type) + const res = await externalLogin(url, payload) await this._onLoginResponse(res) - window.sessionStorage.setItem(key, JSON.stringify(res)); + if (this.options.environment === environments.BROWSER) { + window.sessionStorage.setItem(key, JSON.stringify(res)); + } resolve(res) } catch (err) { @@ -623,7 +639,6 @@ class EventsSDK { } }); } - } export default EventsSDK; diff --git a/src/utils/environments.js b/src/utils/environments.js new file mode 100644 index 00000000..2d8e6a52 --- /dev/null +++ b/src/utils/environments.js @@ -0,0 +1,4 @@ +export default { + BROWSER: 'browser', + CHROME_EXTENSION: 'chrome-extension' +} diff --git a/src/utils/loadExternalScript.js b/src/utils/loadExternalScript.js index 6a8b0325..7e797034 100644 --- a/src/utils/loadExternalScript.js +++ b/src/utils/loadExternalScript.js @@ -1,5 +1,7 @@ -export function loadExternalScript(url) { - return new Promise((resolve) => { +import environments from './environments' + +function loadBrowserScript(url) { + return new Promise((resolve, reject) => { const script = document.createElement('script'); script.src = url; script.onload = () => { @@ -11,3 +13,24 @@ export function loadExternalScript(url) { document.body.append(script); }); } + +async function loadExtensionScript(url) { + try { + let script = await fetch(url) + script = await script.text() + + eval(script) + } catch (e) { + return Promise.reject(e) + } +} + +export async function loadExternalScript(url, environment) { + switch (environment) { + case environments.BROWSER: + await loadBrowserScript(url) + break + case environments.CHROME_EXTENSION: + await loadExtensionScript(url) + } +} From faf34571524e859c0fe393d3c1e12d43e8dd83c4 Mon Sep 17 00:00:00 2001 From: OrtZz Date: Mon, 14 Mar 2022 16:41:04 +0200 Subject: [PATCH 02/27] added: dialers module --- dist/voicenter-events-sdk.cjs.js | 285 ++++++++++++++++++++------- dist/voicenter-events-sdk.esm.js | 285 ++++++++++++++++++++------- dist/voicenter-events-sdk.umd.js | 12 +- dist/voicenter-events-sdk.umd.js.map | 2 +- src/sdk.js | 11 ++ src/store/dialers.js | 52 +++++ 6 files changed, 511 insertions(+), 136 deletions(-) create mode 100644 src/store/dialers.js diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js index 3bceb800..094f3a3c 100644 --- a/dist/voicenter-events-sdk.cjs.js +++ b/dist/voicenter-events-sdk.cjs.js @@ -3,19 +3,16 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var debounce = _interopDefault(require('lodash/debounce')); +var md5 = _interopDefault(require('js-md5')); function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } + "@babel/helpers - typeof"; - return _typeof(obj); + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); } function _classCallCheck(instance, Constructor) { @@ -37,6 +34,9 @@ function _defineProperties(target, props) { function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); return Constructor; } @@ -56,23 +56,36 @@ function _defineProperty(obj, key, value) { } function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } + if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; } function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var eventTypes = { @@ -132,9 +145,7 @@ var defaultServers = [{ 'Domain': 'monitor5.voicenter.co.il' }]; -var Logger = -/*#__PURE__*/ -function () { +var Logger = /*#__PURE__*/function () { function Logger() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -277,9 +288,6 @@ function onNewEvent(_ref) { } break; - - default: - break; } } @@ -454,6 +462,57 @@ var queuesModule = { getters: getters$1 }; +var _mutations$2; + +var types$2 = { + SET_DIALERS: 'SET_DIALERS', + UPDATE_DIALERS: 'UPDATE_DIALERS' +}; +var state$2 = { + all: [] +}; +var mutations$2 = (_mutations$2 = {}, _defineProperty(_mutations$2, types$2.SET_DIALERS, function (state, value) { + state.all = value; +}), _defineProperty(_mutations$2, types$2.UPDATE_DIALERS, function (state, data) { + state.all = data; +}), _mutations$2); +var actions$2 = { + setDialers: async function setDialers(_ref, value) { + var commit = _ref.commit; + commit(types$2.SET_DIALERS, value); + }, + updateDialers: async function updateDialers(_ref2, value) { + var commit = _ref2.commit; + commit(types$2.UPDATE_DIALERS, value); + } +}; +var getters$2 = { + getAllDialers: function getAllDialers(state) { + return state.all; + } // allQueueCalls: (state, getters) => { + // const allCalls = [] + // getters.queueWithActiveCalls.forEach((queue) => { + // const calls = queue.Calls || [] + // allCalls.push(...calls) + // }) + // return allCalls + // }, + // filterQueuesByIds: (state) => queueIds => { + // if (!queueIds || !Array.isArray(queueIds)) { + // return state.all + // } + // return state.all.filter(e => queueIds.includes(e.QueueID)) + // } + +}; +var dialersModule = { + namespaced: true, + state: state$2, + mutations: mutations$2, + actions: actions$2, + getters: getters$2 +}; + function getServerWithHighestPriority(servers) { // Highest priority server is the one with lowest Priority value var chosenServer = null; @@ -580,15 +639,13 @@ var defaultOptions = { var allConnections = []; var listenersMap = new Map(); -var EventsSDK = -/*#__PURE__*/ -function () { +var EventsSDK = /*#__PURE__*/function () { function EventsSDK() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, EventsSDK); - this.options = Object.assign({}, defaultOptions, {}, options); + this.options = Object.assign({}, defaultOptions, options); this.argumentOptions = Object.assign({}, options); if (!this.options.loginType) { @@ -616,6 +673,8 @@ function () { this._registerExtensionsModule(); this._registerQueueModule(); + + this._registerDialerModule(); } _createClass(EventsSDK, [{ @@ -654,6 +713,18 @@ function () { this.options.store.registerModule(moduleName, queuesModule); this._handleLocalEvents = true; } + }, { + key: "_registerDialerModule", + value: function _registerDialerModule() { + var moduleName = this.options.dialersModuleName || 'sdkDialers'; + + if (!this._validateStoreModule(moduleName)) { + return; + } + + this.options.store.registerModule(moduleName, dialersModule); + this._handleLocalEvents = true; + } }, { key: "_validateStoreModule", value: function _validateStoreModule(moduleName) { @@ -703,7 +774,7 @@ function () { }, { key: "_onConnectError", value: function _onConnectError(data) { - this._retryConnection('next'); + this._retryConnection('next', true); this.connected = false; this.Logger.log(eventTypes.CONNECT_ERROR, data); @@ -716,22 +787,24 @@ function () { }, { key: "_onReconnectFailed", value: function _onReconnectFailed() { - this._retryConnection('next'); + this._retryConnection('next', true); this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions); } }, { key: "_onConnectTimeout", value: function _onConnectTimeout() { - this._retryConnection('next'); + this._retryConnection('next', true); this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions); } }, { key: "_onReconnectAttempt", value: function _onReconnectAttempt() { + this.connected = false; + if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) { - this._retryConnection('next'); + this._retryConnection('next', true); return; } @@ -752,7 +825,7 @@ function () { this.connected = false; this.Logger.log(eventTypes.DISCONNECT, reason); - this._connect('next'); + this._connect('next', true); } }, { key: "_onKeepAlive", @@ -774,7 +847,7 @@ function () { key: "_onLoginResponse", value: async function _onLoginResponse(data) { if (data.Client) { - await loadExternalScript(data.Client); + await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0'); } if (data.URL) { @@ -799,15 +872,15 @@ function () { await this._connect('default', true); } + if (data.TokenExpiry) { + this.options.tokenExpiry = data.TokenExpiry; + } + if (data.RefreshToken) { this.options.refreshToken = data.RefreshToken; this._handleTokenExpiry(); } - - if (data.TokenExpiry) { - this.options.tokenExpiry = data.TokenExpiry; - } } }, { key: "_handleTokenExpiry", @@ -823,8 +896,15 @@ function () { var timeout = date.getTime() - new Date().getTime() - 5000; // 5 seconds before expire setTimeout(async function () { + var Socket = null; var res = await refreshToken(_this.options.refreshTokenUrl, _this.options.refreshToken); - await _this._onLoginResponse(res); + + if (res.Data) { + Socket = res.Data.Socket; + return await _this._onLoginResponse(Socket); + } + + throw new Error("Error on refreshToken"); }, timeout); } }, { @@ -891,9 +971,13 @@ function () { var url = "".concat(protocol, "://").concat(domain); this.Logger.log('Connecting to..', url); this.closeAllConnections(); - var options = Object.assign({}, this.options, { + var options = { + reconnection: false, + perMessageDeflate: false, + upgrade: false, + transports: ['websocket'], debug: false - }); + }; if (this.token) { options.query = { @@ -908,12 +992,32 @@ function () { }, { key: "_initSocketEvents", value: function _initSocketEvents() { + var _this2 = this; + + this.socket.on(eventTypes.RECONNECT_ATTEMPT, function (data) { + return _this2._onReconnectAttempt(data); + }).on(eventTypes.RECONNECT_FAILED, function (data) { + return _this2._onReconnectFailed(data); + }).on(eventTypes.CONNECT, function (data) { + return _this2._onConnect(data); + }).on(eventTypes.CONNECT_TIMEOUT, function (data) { + return _this2._onConnectTimeout(data); + }).on(eventTypes.CONNECT_ERROR, function (data) { + return _this2._onConnectError(data); + }).on(eventTypes.RECONNECT_ERROR, function (data) { + return _this2._onReconnectAttempt(data); + }).on(eventTypes.ERROR, function (data) { + return _this2._onError(data); + }).on(eventTypes.DISCONNECT, function (data) { + return _this2._onDisconnect(data); + }); + this.socket.onpacket = this._onEvent.bind(this); this.socket.onevent = this._onEvent.bind(this); } }, { key: "_initKeepAlive", value: function _initKeepAlive() { - var _this2 = this; + var _this3 = this; if (this.keepAliveInterval) { clearInterval(this.keepAliveInterval); @@ -925,26 +1029,27 @@ function () { this.keepAliveInterval = setInterval(async function () { var now = new Date().getTime(); - var delta = _this2.options.keepAliveTimeout * 2; + var delta = _this3.options.keepAliveTimeout * 2; - if (now > _this2.getLastEventTimestamp() + delta) { - await _this2._connect('next', true); + if (now > _this3.getLastEventTimestamp() + delta) { + await _this3._connect('next', true); return; } - if (!_this2.socket) { - _this2._initSocketConnection(); + if (!_this3.socket) { + _this3._initSocketConnection(); return; } - if (now > _this2.getLastEventTimestamp() + _this2.options.keepAliveTimeout) { - _this2.emit(eventTypes.KEEP_ALIVE, _this2.options.token); + if (now > _this3.getLastEventTimestamp() + _this3.options.keepAliveTimeout) { + _this3.emit(eventTypes.KEEP_ALIVE, _this3.options.token); + + return; } - }, this.options.keepAliveTimeout); - this.idleInterval = setInterval(function () { - _this2.reSync(false); - }, this.options.idleInterval); + }, this.options.keepAliveTimeout); // this.idleInterval = setInterval(() => { + // this.reSync(false) + // }, this.options.idleInterval) } }, { key: "_findCurrentServer", @@ -1024,7 +1129,7 @@ function () { }, { key: "_onEvent", value: function _onEvent(packet) { - var _this3 = this, + var _this4 = this, _eventMappings; if (!packet.data) { @@ -1044,9 +1149,9 @@ function () { } }); - var eventMappings = (_eventMappings = {}, _defineProperty(_eventMappings, eventTypes.RECONNECT_ATTEMPT, this._onReconnectAttempt), _defineProperty(_eventMappings, eventTypes.RECONNECT_FAILED, this._onReconnectFailed), _defineProperty(_eventMappings, eventTypes.CONNECT, this._onConnect), _defineProperty(_eventMappings, eventTypes.DISCONNECT, this._onDisconnect), _defineProperty(_eventMappings, eventTypes.ERROR, this._onError), _defineProperty(_eventMappings, eventTypes.CONNECT_ERROR, this._onConnectError), _defineProperty(_eventMappings, eventTypes.CONNECT_TIMEOUT, this._onConnectTimeout), _defineProperty(_eventMappings, eventTypes.KEEP_ALIVE_RESPONSE, this._onKeepAlive), _defineProperty(_eventMappings, eventTypes.LOGIN_RESPONSE, this._onLoginResponse), _defineProperty(_eventMappings, eventTypes.EXTENSION_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.QUEUES_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.DIALERS_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.LOGIN_STATUS, function () { - if (!_this3.connected) { - _this3._onConnect(); + var eventMappings = (_eventMappings = {}, _defineProperty(_eventMappings, eventTypes.KEEP_ALIVE_RESPONSE, this._onKeepAlive), _defineProperty(_eventMappings, eventTypes.LOGIN_RESPONSE, this._onLoginResponse), _defineProperty(_eventMappings, eventTypes.EXTENSION_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.QUEUES_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.DIALERS_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.LOGIN_STATUS, function () { + if (!_this4.connected) { + _this4._onConnect(); } }), _eventMappings); var eventHandler = eventMappings[evt.name]; @@ -1078,6 +1183,7 @@ function () { } await this._getToken(); + await this._getTabsSession(); await this.login(this.options.loginType); await this._getServers(); return true; @@ -1109,6 +1215,7 @@ function () { if (this.socket) { this.socket.disconnect(); + this.socket.close(); this.socket = null; } } @@ -1198,6 +1305,32 @@ function () { } } } + }, { + key: "_getTabsSession", + value: function _getTabsSession() { + if (!window.sessionStorage.length) { + // Ask other tabs for session storage + localStorage.setItem('getSessionStorage', Date.now()); + } + window.addEventListener('storage', function (event) { + //console.log('storage event', event); + if (event.key == 'getSessionStorage') { + // Some tab asked for the sessionStorage -> send it + localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); + localStorage.removeItem('sessionStorage'); + } else if (event.key == 'sessionStorage' && !sessionStorage.length) { + // sessionStorage is empty -> fill it + var data = JSON.parse(event.newValue); + + for (var key in data) { + window.sessionStorage.setItem(key, data[key]); + } + } + }); + return new Promise(function (resolve) { + return setTimeout(resolve, 200); + }); + } /** * Login (logs in based on the token/credentials provided) * @param type (login type. Can be token/user/code/account) @@ -1207,10 +1340,17 @@ function () { }, { key: "login", value: function login() { - var _this4 = this; + var _this5 = this; var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'token'; // throttle login for 1 second + var payload = { + token: this.options.token, + email: this.options.email, + username: this.options.username, + password: this.options.password + }; + var key = md5(JSON.stringify(payload)); var delay = 1000; if (this._lastLoginTimestamp + delay > new Date().getTime()) { @@ -1220,17 +1360,28 @@ function () { this._lastLoginTimestamp = new Date().getTime(); return new Promise(async function (resolve, reject) { try { - var url = getExternalLoginUrl(_this4.options.loginUrl, type); - var res = await externalLogin(url, { - token: _this4.options.token, - email: _this4.options.email, - username: _this4.options.username, - password: _this4.options.password - }); - await _this4._onLoginResponse(res); + var loginSession = window.sessionStorage.getItem(key); + + if (loginSession) { + loginSession = JSON.parse(loginSession); + + _this5.Logger.log('got data from session', loginSession); + + await _this5._onLoginResponse(loginSession); + return resolve(loginSession); + } + } catch (err) { + _this5.Logger.log('Error on getting session', err); + } + + try { + var url = getExternalLoginUrl(_this5.options.loginUrl, type); + var res = await externalLogin(url, payload); + await _this5._onLoginResponse(res); + window.sessionStorage.setItem(key, JSON.stringify(res)); resolve(res); } catch (err) { - _this4.servers = _this4.argumentOptions.servers || defaultServers; + _this5.servers = _this5.argumentOptions.servers || defaultServers; reject(err); } }); diff --git a/dist/voicenter-events-sdk.esm.js b/dist/voicenter-events-sdk.esm.js index 747f4431..ccb4b5ee 100644 --- a/dist/voicenter-events-sdk.esm.js +++ b/dist/voicenter-events-sdk.esm.js @@ -1,17 +1,14 @@ import debounce from 'lodash/debounce'; +import md5 from 'js-md5'; function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } + "@babel/helpers - typeof"; - return _typeof(obj); + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); } function _classCallCheck(instance, Constructor) { @@ -33,6 +30,9 @@ function _defineProperties(target, props) { function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); return Constructor; } @@ -52,23 +52,36 @@ function _defineProperty(obj, key, value) { } function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } + if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; } function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var eventTypes = { @@ -128,9 +141,7 @@ var defaultServers = [{ 'Domain': 'monitor5.voicenter.co.il' }]; -var Logger = -/*#__PURE__*/ -function () { +var Logger = /*#__PURE__*/function () { function Logger() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -273,9 +284,6 @@ function onNewEvent(_ref) { } break; - - default: - break; } } @@ -450,6 +458,57 @@ var queuesModule = { getters: getters$1 }; +var _mutations$2; + +var types$2 = { + SET_DIALERS: 'SET_DIALERS', + UPDATE_DIALERS: 'UPDATE_DIALERS' +}; +var state$2 = { + all: [] +}; +var mutations$2 = (_mutations$2 = {}, _defineProperty(_mutations$2, types$2.SET_DIALERS, function (state, value) { + state.all = value; +}), _defineProperty(_mutations$2, types$2.UPDATE_DIALERS, function (state, data) { + state.all = data; +}), _mutations$2); +var actions$2 = { + setDialers: async function setDialers(_ref, value) { + var commit = _ref.commit; + commit(types$2.SET_DIALERS, value); + }, + updateDialers: async function updateDialers(_ref2, value) { + var commit = _ref2.commit; + commit(types$2.UPDATE_DIALERS, value); + } +}; +var getters$2 = { + getAllDialers: function getAllDialers(state) { + return state.all; + } // allQueueCalls: (state, getters) => { + // const allCalls = [] + // getters.queueWithActiveCalls.forEach((queue) => { + // const calls = queue.Calls || [] + // allCalls.push(...calls) + // }) + // return allCalls + // }, + // filterQueuesByIds: (state) => queueIds => { + // if (!queueIds || !Array.isArray(queueIds)) { + // return state.all + // } + // return state.all.filter(e => queueIds.includes(e.QueueID)) + // } + +}; +var dialersModule = { + namespaced: true, + state: state$2, + mutations: mutations$2, + actions: actions$2, + getters: getters$2 +}; + function getServerWithHighestPriority(servers) { // Highest priority server is the one with lowest Priority value var chosenServer = null; @@ -576,15 +635,13 @@ var defaultOptions = { var allConnections = []; var listenersMap = new Map(); -var EventsSDK = -/*#__PURE__*/ -function () { +var EventsSDK = /*#__PURE__*/function () { function EventsSDK() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, EventsSDK); - this.options = Object.assign({}, defaultOptions, {}, options); + this.options = Object.assign({}, defaultOptions, options); this.argumentOptions = Object.assign({}, options); if (!this.options.loginType) { @@ -612,6 +669,8 @@ function () { this._registerExtensionsModule(); this._registerQueueModule(); + + this._registerDialerModule(); } _createClass(EventsSDK, [{ @@ -650,6 +709,18 @@ function () { this.options.store.registerModule(moduleName, queuesModule); this._handleLocalEvents = true; } + }, { + key: "_registerDialerModule", + value: function _registerDialerModule() { + var moduleName = this.options.dialersModuleName || 'sdkDialers'; + + if (!this._validateStoreModule(moduleName)) { + return; + } + + this.options.store.registerModule(moduleName, dialersModule); + this._handleLocalEvents = true; + } }, { key: "_validateStoreModule", value: function _validateStoreModule(moduleName) { @@ -699,7 +770,7 @@ function () { }, { key: "_onConnectError", value: function _onConnectError(data) { - this._retryConnection('next'); + this._retryConnection('next', true); this.connected = false; this.Logger.log(eventTypes.CONNECT_ERROR, data); @@ -712,22 +783,24 @@ function () { }, { key: "_onReconnectFailed", value: function _onReconnectFailed() { - this._retryConnection('next'); + this._retryConnection('next', true); this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions); } }, { key: "_onConnectTimeout", value: function _onConnectTimeout() { - this._retryConnection('next'); + this._retryConnection('next', true); this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions); } }, { key: "_onReconnectAttempt", value: function _onReconnectAttempt() { + this.connected = false; + if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) { - this._retryConnection('next'); + this._retryConnection('next', true); return; } @@ -748,7 +821,7 @@ function () { this.connected = false; this.Logger.log(eventTypes.DISCONNECT, reason); - this._connect('next'); + this._connect('next', true); } }, { key: "_onKeepAlive", @@ -770,7 +843,7 @@ function () { key: "_onLoginResponse", value: async function _onLoginResponse(data) { if (data.Client) { - await loadExternalScript(data.Client); + await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0'); } if (data.URL) { @@ -795,15 +868,15 @@ function () { await this._connect('default', true); } + if (data.TokenExpiry) { + this.options.tokenExpiry = data.TokenExpiry; + } + if (data.RefreshToken) { this.options.refreshToken = data.RefreshToken; this._handleTokenExpiry(); } - - if (data.TokenExpiry) { - this.options.tokenExpiry = data.TokenExpiry; - } } }, { key: "_handleTokenExpiry", @@ -819,8 +892,15 @@ function () { var timeout = date.getTime() - new Date().getTime() - 5000; // 5 seconds before expire setTimeout(async function () { + var Socket = null; var res = await refreshToken(_this.options.refreshTokenUrl, _this.options.refreshToken); - await _this._onLoginResponse(res); + + if (res.Data) { + Socket = res.Data.Socket; + return await _this._onLoginResponse(Socket); + } + + throw new Error("Error on refreshToken"); }, timeout); } }, { @@ -887,9 +967,13 @@ function () { var url = "".concat(protocol, "://").concat(domain); this.Logger.log('Connecting to..', url); this.closeAllConnections(); - var options = Object.assign({}, this.options, { + var options = { + reconnection: false, + perMessageDeflate: false, + upgrade: false, + transports: ['websocket'], debug: false - }); + }; if (this.token) { options.query = { @@ -904,12 +988,32 @@ function () { }, { key: "_initSocketEvents", value: function _initSocketEvents() { + var _this2 = this; + + this.socket.on(eventTypes.RECONNECT_ATTEMPT, function (data) { + return _this2._onReconnectAttempt(data); + }).on(eventTypes.RECONNECT_FAILED, function (data) { + return _this2._onReconnectFailed(data); + }).on(eventTypes.CONNECT, function (data) { + return _this2._onConnect(data); + }).on(eventTypes.CONNECT_TIMEOUT, function (data) { + return _this2._onConnectTimeout(data); + }).on(eventTypes.CONNECT_ERROR, function (data) { + return _this2._onConnectError(data); + }).on(eventTypes.RECONNECT_ERROR, function (data) { + return _this2._onReconnectAttempt(data); + }).on(eventTypes.ERROR, function (data) { + return _this2._onError(data); + }).on(eventTypes.DISCONNECT, function (data) { + return _this2._onDisconnect(data); + }); + this.socket.onpacket = this._onEvent.bind(this); this.socket.onevent = this._onEvent.bind(this); } }, { key: "_initKeepAlive", value: function _initKeepAlive() { - var _this2 = this; + var _this3 = this; if (this.keepAliveInterval) { clearInterval(this.keepAliveInterval); @@ -921,26 +1025,27 @@ function () { this.keepAliveInterval = setInterval(async function () { var now = new Date().getTime(); - var delta = _this2.options.keepAliveTimeout * 2; + var delta = _this3.options.keepAliveTimeout * 2; - if (now > _this2.getLastEventTimestamp() + delta) { - await _this2._connect('next', true); + if (now > _this3.getLastEventTimestamp() + delta) { + await _this3._connect('next', true); return; } - if (!_this2.socket) { - _this2._initSocketConnection(); + if (!_this3.socket) { + _this3._initSocketConnection(); return; } - if (now > _this2.getLastEventTimestamp() + _this2.options.keepAliveTimeout) { - _this2.emit(eventTypes.KEEP_ALIVE, _this2.options.token); + if (now > _this3.getLastEventTimestamp() + _this3.options.keepAliveTimeout) { + _this3.emit(eventTypes.KEEP_ALIVE, _this3.options.token); + + return; } - }, this.options.keepAliveTimeout); - this.idleInterval = setInterval(function () { - _this2.reSync(false); - }, this.options.idleInterval); + }, this.options.keepAliveTimeout); // this.idleInterval = setInterval(() => { + // this.reSync(false) + // }, this.options.idleInterval) } }, { key: "_findCurrentServer", @@ -1020,7 +1125,7 @@ function () { }, { key: "_onEvent", value: function _onEvent(packet) { - var _this3 = this, + var _this4 = this, _eventMappings; if (!packet.data) { @@ -1040,9 +1145,9 @@ function () { } }); - var eventMappings = (_eventMappings = {}, _defineProperty(_eventMappings, eventTypes.RECONNECT_ATTEMPT, this._onReconnectAttempt), _defineProperty(_eventMappings, eventTypes.RECONNECT_FAILED, this._onReconnectFailed), _defineProperty(_eventMappings, eventTypes.CONNECT, this._onConnect), _defineProperty(_eventMappings, eventTypes.DISCONNECT, this._onDisconnect), _defineProperty(_eventMappings, eventTypes.ERROR, this._onError), _defineProperty(_eventMappings, eventTypes.CONNECT_ERROR, this._onConnectError), _defineProperty(_eventMappings, eventTypes.CONNECT_TIMEOUT, this._onConnectTimeout), _defineProperty(_eventMappings, eventTypes.KEEP_ALIVE_RESPONSE, this._onKeepAlive), _defineProperty(_eventMappings, eventTypes.LOGIN_RESPONSE, this._onLoginResponse), _defineProperty(_eventMappings, eventTypes.EXTENSION_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.QUEUES_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.DIALERS_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.LOGIN_STATUS, function () { - if (!_this3.connected) { - _this3._onConnect(); + var eventMappings = (_eventMappings = {}, _defineProperty(_eventMappings, eventTypes.KEEP_ALIVE_RESPONSE, this._onKeepAlive), _defineProperty(_eventMappings, eventTypes.LOGIN_RESPONSE, this._onLoginResponse), _defineProperty(_eventMappings, eventTypes.EXTENSION_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.QUEUES_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.DIALERS_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.LOGIN_STATUS, function () { + if (!_this4.connected) { + _this4._onConnect(); } }), _eventMappings); var eventHandler = eventMappings[evt.name]; @@ -1074,6 +1179,7 @@ function () { } await this._getToken(); + await this._getTabsSession(); await this.login(this.options.loginType); await this._getServers(); return true; @@ -1105,6 +1211,7 @@ function () { if (this.socket) { this.socket.disconnect(); + this.socket.close(); this.socket = null; } } @@ -1194,6 +1301,32 @@ function () { } } } + }, { + key: "_getTabsSession", + value: function _getTabsSession() { + if (!window.sessionStorage.length) { + // Ask other tabs for session storage + localStorage.setItem('getSessionStorage', Date.now()); + } + window.addEventListener('storage', function (event) { + //console.log('storage event', event); + if (event.key == 'getSessionStorage') { + // Some tab asked for the sessionStorage -> send it + localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); + localStorage.removeItem('sessionStorage'); + } else if (event.key == 'sessionStorage' && !sessionStorage.length) { + // sessionStorage is empty -> fill it + var data = JSON.parse(event.newValue); + + for (var key in data) { + window.sessionStorage.setItem(key, data[key]); + } + } + }); + return new Promise(function (resolve) { + return setTimeout(resolve, 200); + }); + } /** * Login (logs in based on the token/credentials provided) * @param type (login type. Can be token/user/code/account) @@ -1203,10 +1336,17 @@ function () { }, { key: "login", value: function login() { - var _this4 = this; + var _this5 = this; var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'token'; // throttle login for 1 second + var payload = { + token: this.options.token, + email: this.options.email, + username: this.options.username, + password: this.options.password + }; + var key = md5(JSON.stringify(payload)); var delay = 1000; if (this._lastLoginTimestamp + delay > new Date().getTime()) { @@ -1216,17 +1356,28 @@ function () { this._lastLoginTimestamp = new Date().getTime(); return new Promise(async function (resolve, reject) { try { - var url = getExternalLoginUrl(_this4.options.loginUrl, type); - var res = await externalLogin(url, { - token: _this4.options.token, - email: _this4.options.email, - username: _this4.options.username, - password: _this4.options.password - }); - await _this4._onLoginResponse(res); + var loginSession = window.sessionStorage.getItem(key); + + if (loginSession) { + loginSession = JSON.parse(loginSession); + + _this5.Logger.log('got data from session', loginSession); + + await _this5._onLoginResponse(loginSession); + return resolve(loginSession); + } + } catch (err) { + _this5.Logger.log('Error on getting session', err); + } + + try { + var url = getExternalLoginUrl(_this5.options.loginUrl, type); + var res = await externalLogin(url, payload); + await _this5._onLoginResponse(res); + window.sessionStorage.setItem(key, JSON.stringify(res)); resolve(res); } catch (err) { - _this4.servers = _this4.argumentOptions.servers || defaultServers; + _this5.servers = _this5.argumentOptions.servers || defaultServers; reject(err); } }); diff --git a/dist/voicenter-events-sdk.umd.js b/dist/voicenter-events-sdk.umd.js index 2f365d6e..a47310b2 100644 --- a/dist/voicenter-events-sdk.umd.js +++ b/dist/voicenter-events-sdk.umd.js @@ -1,2 +1,12 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).VoicenterEventsSDK=t()}(this,function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.debug=n.debug}return i(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),i=(new Date).toUTCString();console.log("%c ".concat(i,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),i=(new Date).toUTCString();console.error("".concat(i,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();var l=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},h="object"==typeof u&&u&&u.Object===Object&&u,v="object"==typeof self&&self&&self.Object===Object&&self,f=h||v||Function("return this")(),p=function(){return f.Date.now()},E=f.Symbol,y=Object.prototype,d=y.hasOwnProperty,m=y.toString,g=E?E.toStringTag:void 0;var T=function(e){var t=d.call(e,g),n=e[g];try{e[g]=void 0;var i=!0}catch(e){}var o=m.call(e);return i&&(t?e[g]=n:delete e[g]),o},_=Object.prototype.toString;var k=function(e){return _.call(e)},S="[object Null]",N="[object Undefined]",O=E?E.toStringTag:void 0;var C=function(e){return null==e?void 0===e?N:S:O&&O in Object(e)?T(e):k(e)};var D=function(e){return null!=e&&"object"==typeof e},R="[object Symbol]";var A=function(e){return"symbol"==typeof e||D(e)&&C(e)==R},I=NaN,b=/^\s+|\s+$/g,L=/^[-+]0x[0-9a-f]+$/i,w=/^0b[01]+$/i,x=/^0o[0-7]+$/i,U=parseInt;var P=function(e){if("number"==typeof e)return e;if(A(e))return I;if(l(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=l(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(b,"");var n=w.test(e);return n||x.test(e)?U(e.slice(2),n?2:8):L.test(e)?I:+e},M="Expected a function",j=Math.max,F=Math.min;var Q=function(e,t,n){var i,o,r,s,a,c,u=0,h=!1,v=!1,f=!0;if("function"!=typeof e)throw new TypeError(M);function E(t){var n=i,r=o;return i=o=void 0,u=t,s=e.apply(r,n)}function y(e){var n=e-c;return void 0===c||n>=t||n<0||v&&e-u>=r}function d(){var e=p();if(y(e))return m(e);a=setTimeout(d,function(e){var n=t-(e-c);return v?F(n,r-(e-u)):n}(e))}function m(e){return a=void 0,f&&i?E(e):(i=o=void 0,s)}function g(){var e=p(),n=y(e);if(i=arguments,o=this,c=e,n){if(void 0===a)return function(e){return u=e,a=setTimeout(d,t),h?E(e):s}(c);if(v)return clearTimeout(a),a=setTimeout(d,t),E(c)}return void 0===a&&(a=setTimeout(d,t)),s}return t=P(t)||0,l(n)&&(h=!!n.leading,r=(v="maxWait"in n)?j(P(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),g.cancel=function(){void 0!==a&&clearTimeout(a),u=0,i=c=o=a=void 0},g.flush=function(){return void 0===a?s:m(p())},g},V=[s.CONNECT_ERROR,s.CONNECT_TIMEOUT,s.DISCONNECT,s.RECONNECT_ATTEMPT,s.RECONNECTING,s.RECONNECT_ERROR,s.RECONNECT_FAILED,{NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"}.CLOSE];function G(e){var t=e.eventData,n=e.store,i=e.extensionsModuleName,o=e.queuesModuleName,r=t.name,a=t.data;switch(n.commit("".concat(i,"/SET_IS_SOCKET_OFFLINE"),function(e){var t=e.name;return V.includes(t)}(t)),r){case s.ALL_EXTENSION_STATUS:n.dispatch("".concat(i,"/setExtensions"),a.extensions);break;case s.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[i].extensions.findIndex(function(e){return e.userID===c.userID});-1!==l&&n.dispatch("".concat(i,"/updateExtension"),{index:l,extension:c});break;case s.LOGIN_STATUS:n.commit("".concat(i,"/SET_SERVER_TIME"),a),n.dispatch("".concat(o,"/setQueues"),a.queues);break;case s.QUEUE_EVENT:var u=a.data,h=(n.state[o].all||[]).findIndex(function(e){return e.QueueID===u.QueueID});-1!==h&&n.dispatch("".concat(o,"/updateQueue"),{index:h,queue:u})}}var K,q=100,W=101,X="hold",J="SET_EXTENSIONS",$="UPDATE_EXTENSIONS",B="SET_SERVER_TIME",Y="SET_IS_SOCKET_OFFLINE";function H(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===X}var z,Z={namespaced:!0,state:{extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations:(o(K={},J,function(e,t){e.extensions=t}),o(K,$,function(e,t){var n=t.index,i=t.extension;e.extensions.splice(n,1,i)}),o(K,B,function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||108e5,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime}),o(K,Y,function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null}),K),actions:{setExtensions:async function(e,t){(0,e.commit)(J,t)},updateExtension:async function(e,t){(0,e.commit)($,t)}},getters:{isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>6e4},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach(function(e){e.calls.length>0&&(e.calls.filter(H).length?e.representativeStatus=W:e.representativeStatus=q),n.push(e)}),t?n.filter(function(e){return 2!==e.representativeStatus}):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter(function(t){return t.representativeStatus===e}).length||0}}}},ee="SET_QUEUES",te="UPDATE_QUEUES",ne={namespaced:!0,state:{all:[]},mutations:(o(z={},ee,function(e,t){e.all=t}),o(z,te,function(e,t){var n=t.index,i=t.queue;e.all.splice(n,1,i)}),z),actions:{setQueues:async function(e,t){(0,e.commit)(ee,t)},updateQueue:async function(e,t){(0,e.commit)(te,t)}},getters:{queueWithActiveCalls:function(e){return e.all.filter(function(e){return e.Calls.length})},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach(function(e){var t=e.Calls||[];n.push.apply(n,r(t))}),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter(function(e){return t.includes(e.QueueID)}):e.all}}}};var ie={url:"https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls",fallbackServer:{Domain:"monitor5.voicenter.co.il",Priority:0},loginUrl:"https://loginapi.voicenter.co.il/monitorAPI/Login",refreshTokenUrl:"https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken",servers:a,token:null,loginType:"token",forceNew:!0,reconnectionDelay:1e4,reconnectionDelayMax:1e4,maxReconnectAttempts:2,timeout:1e4,keepAliveTimeout:6e4,idleInterval:3e5,protocol:"https",transports:["websocket"],upgrade:!1,store:null,extensionsModuleName:"sdkExtensions",queuesModuleName:"sdkQueues",serverFetchStrategy:"remote",serverType:null},oe=[],re=new Map,se=function(){function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(t(this,n),this.options=Object.assign({},ie,{},e),this.argumentOptions=Object.assign({},e),!this.options.loginType)throw new Error("A login type should be provided");this.Logger=new c(this.options),this.servers=[],this.server=null,this.socket=null,this.connected=!1,this.connectionEstablished=!1,this._lastEventTimestamp=(new Date).getTime(),this._initReconnectOptions(),this._listenersMap=re,this._retryConnection=Q(this._connect.bind(this),this.reconnectOptions.reconnectionDelay,{leading:!0,trailing:!1}),this._lastLoginTimestamp=null,this._handleLocalEvents=!1,this._registerExtensionsModule(),this._registerQueueModule()}return i(n,[{key:"getLastEventTimestamp",value:function(){return this._lastEventTimestamp}},{key:"_reSync",value:function(){this.emit(s.RESYNC,{cache:!1})}},{key:"_registerExtensionsModule",value:function(){var e=this.options.extensionsModuleName||"sdkExtensions";this._validateStoreModule(e)&&(this.options.store.registerModule(e,Z),this._handleLocalEvents=!0)}},{key:"_registerQueueModule",value:function(){var e=this.options.queuesModuleName||"sdkQueues";this._validateStoreModule(e)&&(this.options.store.registerModule(e,ne),this._handleLocalEvents=!0)}},{key:"_validateStoreModule",value:function(e){var t=this.options.store;return!!t&&(t.state[e]&&t.unregisterModule(e),!0)}},{key:"_initReconnectOptions",value:function(){this.reconnectOptions={retryCount:1,maxReconnectAttempts:this.options.maxReconnectAttempts,reconnectionDelay:this.options.reconnectionDelay,minReconnectionDelay:this.options.reconnectionDelay,maxReconnectionDelay:3e5}}},{key:"_onConnect",value:function(){this._initReconnectDelays(),this.connected=!0,this.Logger.log(s.CONNECT,this.reconnectOptions)}},{key:"_initReconnectDelays",value:function(){this.reconnectOptions.retryCount=1;var e=this.reconnectOptions.minReconnectionDelay;this.reconnectOptions.reconnectionDelay=e,this.socket.io.reconnectionDelay(e),this.socket.io.reconnectionDelayMax(e)}},{key:"_onConnectError",value:function(e){this._retryConnection("next"),this.connected=!1,this.Logger.log(s.CONNECT_ERROR,e)}},{key:"_onError",value:function(e){this.Logger.log(s.ERROR,e)}},{key:"_onReconnectFailed",value:function(){this._retryConnection("next"),this.Logger.log(s.RECONNECT_FAILED,this.reconnectOptions)}},{key:"_onConnectTimeout",value:function(){this._retryConnection("next"),this.Logger.log(s.CONNECT_TIMEOUT,this.reconnectOptions)}},{key:"_onReconnectAttempt",value:function(){if(this.reconnectOptions.retryCount>=this.reconnectOptions.maxReconnectAttempts)this._retryConnection("next");else{if(this.reconnectOptions.reconnectionDelay0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=null;if("default"===e)n=this._findCurrentServer();else if("next"===e)n=this._findNextAvailableServer();else{if("prev"!==e)throw new Error("Incorrect 'server' parameter passed to connect function ".concat(e,". Should be 'default' or 'next'"));n=this._findMaxPriorityServer()}n||(this.server=this._findCurrentServer()),this._initSocketConnection(),this._initSocketEvents(),this._initKeepAlive(),this._initReconnectDelays(),t||await this.login(this.options.loginType)}},{key:"_checkInit",value:function(){if(!this.connectionEstablished)throw new Error('Make sure you call "sdk.init()" before doing other operations.')}},{key:"_initSocketConnection",value:function(){var e=this.server.Domain,t=this.options.protocol,n="".concat(t,"://").concat(e);this.Logger.log("Connecting to..",n),this.closeAllConnections();var i=Object.assign({},this.options,{debug:!1});this.token&&(i.query={token:this.token}),this.socket=window.io(n,i),oe.push(this.socket),this.connectionEstablished=!0}},{key:"_initSocketEvents",value:function(){this.socket.onevent=this._onEvent.bind(this)}},{key:"_initKeepAlive",value:function(){var e=this;this.keepAliveInterval&&clearInterval(this.keepAliveInterval),this.idleInterval&&clearInterval(this.idleInterval),this.keepAliveInterval=setInterval(async function(){var t=(new Date).getTime(),n=2*e.options.keepAliveTimeout;t>e.getLastEventTimestamp()+n?await e._connect("next",!0):e.socket?t>e.getLastEventTimestamp()+e.options.keepAliveTimeout&&e.emit(s.KEEP_ALIVE,e.options.token):e._initSocketConnection()},this.options.keepAliveTimeout),this.idleInterval=setInterval(function(){e.reSync(!1)},this.options.idleInterval)}},{key:"_findCurrentServer",value:function(){var e=null;return this.servers.length&&(e=this.servers[0]),this.server=e,this.server||(this.server=this.options.fallbackServer),this.server}},{key:"_findNextAvailableServer",value:function(){var e=this.server.Priority;if(this.Logger.log("Failover -> Trying to find another server"),e===this.servers.length-1)return this._findMaxPriorityServer();var t=e+1,n=this.servers.find(function(e){return e.Priority===t});return n||(n=this._findMaxPriorityServer())?this.server.Domain!==n.Domain?(this.server=n,this.server):(this.Logger.log("Failover -> Found new server. Connecting to it...",this.server),null):void 0}},{key:"_findMaxPriorityServer",value:function(){this.Logger.log("Fallback -> Trying to find previous server","_findMaxPriorityServer");var e,t,n,i=(e=this.servers,t=null,n=Number.MAX_SAFE_INTEGER,e.forEach(function(e){e.Priority Trying to find previous server",this.server),this.server):null:(this.server=i,this.server)}},{key:"_getServers",value:async function(){"static"===this.options.serverFetchStrategy&&this.argumentOptions.servers&&Array.isArray(this.argumentOptions.servers)&&this.argumentOptions.servers.length>1&&(this.servers=this.argumentOptions.servers)}},{key:"_onEvent",value:function(e){var t,n=this;if(e.data){var i=this._parsePacket(e);this.Logger.log("New event -> ".concat(i.name),i),this._lastEventTimestamp=(new Date).getTime(),this._listenersMap.forEach(function(e,t){"*"===t?e(i):i.name===t&&e(i)});var r=(o(t={},s.RECONNECT_ATTEMPT,this._onReconnectAttempt),o(t,s.RECONNECT_FAILED,this._onReconnectFailed),o(t,s.CONNECT,this._onConnect),o(t,s.DISCONNECT,this._onDisconnect),o(t,s.ERROR,this._onError),o(t,s.CONNECT_ERROR,this._onConnectError),o(t,s.CONNECT_TIMEOUT,this._onConnectTimeout),o(t,s.KEEP_ALIVE_RESPONSE,this._onKeepAlive),o(t,s.LOGIN_RESPONSE,this._onLoginResponse),o(t,s.EXTENSION_UPDATED,this._reSync),o(t,s.QUEUES_UPDATED,this._reSync),o(t,s.DIALERS_UPDATED,this._reSync),o(t,s.LOGIN_STATUS,function(){n.connected||n._onConnect()}),t)[i.name];r&&"function"==typeof r&&r.call(this,i.data),this._handleLocalEvents&&G(Object.assign({eventData:i},this.options))}}},{key:"init",value:async function(){return!!this.connectionEstablished||(this.socket&&this.emit(s.CLOSE),await this._getToken(),await this.login(this.options.loginType),await this._getServers(),!0)}},{key:"setToken",value:async function(e){this.options.token=e,this.disconnect(),await this.init()}},{key:"closeAllConnections",value:function(){oe.forEach(function(e){e.close(),e.disconnect()}),oe=[],this.socket&&(this.socket.disconnect(),this.socket=null)}},{key:"disconnect",value:function(){this._listenersMap=new Map,this.closeAllConnections()}},{key:"on",value:function(e,t){this._listenersMap.set(e,t),this._checkInit()}},{key:"emit",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._checkInit(),this.Logger.log("EMIT -> ".concat(e),t),this.socket.emit(e,t)}},{key:"reSync",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.emit(s.RESYNC,{cache:e})}},{key:"setMonitorUrl",value:async function(e){var t=this.options.url,n=this.options.serverFetchStrategy;try{if(!e)return;this.options.url=e,this.options.serverFetchStrategy="remote",await this.init()}catch(e){this._onError(e),this.options.url=t,this.options.serverFetchStrategy=n,await this.init()}}},{key:"_getToken",value:function(){var e=this.options.loginType;if(this.token=this.options.token,"token"===e&&!this.token)throw new Error("Token login type expects the token option to be provided")}},{key:"login",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"token";return this._lastLoginTimestamp+1e3>(new Date).getTime()?Promise.resolve():(this._lastLoginTimestamp=(new Date).getTime(),new Promise(async function(n,i){try{var o=(s=e.options.loginUrl,"user"===(c=t)?"".concat(s,"/User"):"token"===c?"".concat(s,"/Token"):"account"===c?"".concat(s,"/Account"):s),r=await async function(e,t){var n=t.email,i=t.password,o=t.token,r=t.username,s=null;s=o?JSON.stringify({token:o}):r?JSON.stringify({username:r,password:i}):JSON.stringify({email:n,pin:i});var a=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:s}),c=await a.json();if(c.error)throw new Error(c.error);return c.Data.Socket}(o,{token:e.options.token,email:e.options.email,username:e.options.username,password:e.options.password});await e._onLoginResponse(r),n(r)}catch(t){e.servers=e.argumentOptions.servers||a,i(t)}var s,c}))}}]),n}();return"undefined"!=typeof window&&(window.EventsSDK=se),se}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).VoicenterEventsSDK=t()}(this,(function(){"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=t.name,s=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),r){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),s.extensions);break;case eventTypes.EXTENSION_EVENT:var a=s.data;a.lastEvent={reason:s.reason,ivrid:s.ivruniqueid};var c=n.state[o].extensions.findIndex((function(e){return e.userID===a.userID}));-1!==c&&n.dispatch("".concat(o,"/updateExtension"),{index:c,extension:a});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),s),n.dispatch("".concat(i,"/setQueues"),s.queues);break;case eventTypes.QUEUE_EVENT:var l=s.data,u=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===l.QueueID}));-1!==u&&n.dispatch("".concat(i,"/updateQueue"),{index:u,queue:l})}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){e.all=t})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Priority>2]|=e[r]<>6,c[i++]=128|63&o):o<55296||o>=57344?(c[i++]=224|o>>12,c[i++]=128|o>>6&63,c[i++]=128|63&o):(o=65536+((1023&o)<<10|1023&e.charCodeAt(++r)),c[i++]=240|o>>18,c[i++]=128|o>>12&63,c[i++]=128|o>>6&63,c[i++]=128|63&o);else for(i=this.start;r>2]|=o<>2]|=(192|o>>6)<>2]|=(128|63&o)<=57344?(a[i>>2]|=(224|o>>12)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<>2]|=(240|o>>18)<>2]|=(128|o>>12&63)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<=64?(this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,o,i,r,s=this.blocks;this.first?t=((t=((e=((e=s[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(o=((o=(-1732584194^2004318071&e)+s[1]-117830708)<<12|o>>>20)+e<<0)&(-271733879^e))+s[2]-1126478375)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((o=this.h3)^t&(n^o))+s[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[1]-389564586)<<12|o>>>20)+e<<0)&(e^t))+s[2]+606105819)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(o^t&(n^o))+s[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[5]+1200080426)<<12|o>>>20)+e<<0)&(e^t))+s[6]-1473231341)<<17|n>>>15)+o<<0)&(o^e))+s[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[9]-1958414417)<<12|o>>>20)+e<<0)&(e^t))+s[10]-42063)<<17|n>>>15)+o<<0)&(o^e))+s[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[13]-40341101)<<12|o>>>20)+e<<0)&(e^t))+s[14]-1502002290)<<17|n>>>15)+o<<0)&(o^e))+s[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[1]-165796510)<<5|e>>>27)+t<<0)^t))+s[6]-1069501632)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[11]+643717713)<<14|n>>>18)+o<<0)^o))+s[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[5]-701558691)<<5|e>>>27)+t<<0)^t))+s[10]+38016083)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[15]-660478335)<<14|n>>>18)+o<<0)^o))+s[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[9]+568446438)<<5|e>>>27)+t<<0)^t))+s[14]-1019803690)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[3]-187363961)<<14|n>>>18)+o<<0)^o))+s[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[13]-1444681467)<<5|e>>>27)+t<<0)^t))+s[2]-51403784)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[7]+1735328473)<<14|n>>>18)+o<<0)^o))+s[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[5]-378558)<<4|e>>>28)+t<<0))+s[8]-2022574463)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[11]+1839030562)<<16|n>>>16)+o<<0))+s[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[1]-1530992060)<<4|e>>>28)+t<<0))+s[4]+1272893353)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[7]-155497632)<<16|n>>>16)+o<<0))+s[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[13]+681279174)<<4|e>>>28)+t<<0))+s[0]-358537222)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[3]-722521979)<<16|n>>>16)+o<<0))+s[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[9]-640364487)<<4|e>>>28)+t<<0))+s[12]-421815835)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[15]+530742520)<<16|n>>>16)+o<<0))+s[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[0]-198630844)<<6|e>>>26)+t<<0)|~n))+s[7]+1126891415)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[14]-1416354905)<<15|n>>>17)+o<<0)|~e))+s[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+s[3]-1894986606)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[10]-1051523)<<15|n>>>17)+o<<0)|~e))+s[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+s[15]-30611744)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[6]-1560198380)<<15|n>>>17)+o<<0)|~e))+s[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[4]-145523070)<<6|e>>>26)+t<<0)|~n))+s[11]-1120210379)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[2]+718787259)<<15|n>>>17)+o<<0)|~e))+s[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=o+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+o<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[15&o]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return[255&e,e>>8&255,e>>16&255,e>>24&255,255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,o="",i=this.array(),r=0;r<15;)e=i[r++],t=i[r++],n=i[r++],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=i[r],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:root.md5=exports}()})),defaultOptions={url:"https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls",fallbackServer:{Domain:"monitor5.voicenter.co.il",Priority:0},loginUrl:"https://loginapi.voicenter.co.il/monitorAPI/Login",refreshTokenUrl:"https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken",servers:defaultServers,token:null,loginType:"token",forceNew:!0,reconnectionDelay:1e4,reconnectionDelayMax:1e4,maxReconnectAttempts:2,timeout:1e4,keepAliveTimeout:6e4,idleInterval:3e5,protocol:"https",transports:["websocket"],upgrade:!1,store:null,extensionsModuleName:"sdkExtensions",queuesModuleName:"sdkQueues",serverFetchStrategy:"remote",serverType:null},allConnections=[],listenersMap=new Map,EventsSDK=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(_classCallCheck(this,e),this.options=Object.assign({},defaultOptions,t),this.argumentOptions=Object.assign({},t),!this.options.loginType)throw new Error("A login type should be provided");this.Logger=new Logger(this.options),this.servers=[],this.server=null,this.socket=null,this.connected=!1,this.connectionEstablished=!1,this._lastEventTimestamp=(new Date).getTime(),this._initReconnectOptions(),this._listenersMap=listenersMap,this._retryConnection=debounce_1(this._connect.bind(this),this.reconnectOptions.reconnectionDelay,{leading:!0,trailing:!1}),this._lastLoginTimestamp=null,this._handleLocalEvents=!1,this._registerExtensionsModule(),this._registerQueueModule(),this._registerDialerModule()}return _createClass(e,[{key:"getLastEventTimestamp",value:function(){return this._lastEventTimestamp}},{key:"_reSync",value:function(){this.emit(eventTypes.RESYNC,{cache:!1})}},{key:"_registerExtensionsModule",value:function(){var e=this.options.extensionsModuleName||"sdkExtensions";this._validateStoreModule(e)&&(this.options.store.registerModule(e,extensionsModule),this._handleLocalEvents=!0)}},{key:"_registerQueueModule",value:function(){var e=this.options.queuesModuleName||"sdkQueues";this._validateStoreModule(e)&&(this.options.store.registerModule(e,queuesModule),this._handleLocalEvents=!0)}},{key:"_registerDialerModule",value:function(){var e=this.options.dialersModuleName||"sdkDialers";this._validateStoreModule(e)&&(this.options.store.registerModule(e,dialersModule),this._handleLocalEvents=!0)}},{key:"_validateStoreModule",value:function(e){var t=this.options.store;return!!t&&(t.state[e]&&t.unregisterModule(e),!0)}},{key:"_initReconnectOptions",value:function(){this.reconnectOptions={retryCount:1,maxReconnectAttempts:this.options.maxReconnectAttempts,reconnectionDelay:this.options.reconnectionDelay,minReconnectionDelay:this.options.reconnectionDelay,maxReconnectionDelay:3e5}}},{key:"_onConnect",value:function(){this._initReconnectDelays(),this.connected=!0,this.Logger.log(eventTypes.CONNECT,this.reconnectOptions)}},{key:"_initReconnectDelays",value:function(){this.reconnectOptions.retryCount=1;var e=this.reconnectOptions.minReconnectionDelay;this.reconnectOptions.reconnectionDelay=e,this.socket.io.reconnectionDelay(e),this.socket.io.reconnectionDelayMax(e)}},{key:"_onConnectError",value:function(e){this._retryConnection("next",!0),this.connected=!1,this.Logger.log(eventTypes.CONNECT_ERROR,e)}},{key:"_onError",value:function(e){this.Logger.log(eventTypes.ERROR,e)}},{key:"_onReconnectFailed",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.RECONNECT_FAILED,this.reconnectOptions)}},{key:"_onConnectTimeout",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.CONNECT_TIMEOUT,this.reconnectOptions)}},{key:"_onReconnectAttempt",value:function(){if(this.connected=!1,this.reconnectOptions.retryCount>=this.reconnectOptions.maxReconnectAttempts)this._retryConnection("next",!0);else{if(this.reconnectOptions.reconnectionDelay0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=null;if("default"===e)n=this._findCurrentServer();else if("next"===e)n=this._findNextAvailableServer();else{if("prev"!==e)throw new Error("Incorrect 'server' parameter passed to connect function ".concat(e,". Should be 'default' or 'next'"));n=this._findMaxPriorityServer()}n||(this.server=this._findCurrentServer()),this._initSocketConnection(),this._initSocketEvents(),this._initKeepAlive(),this._initReconnectDelays(),t||await this.login(this.options.loginType)}},{key:"_checkInit",value:function(){if(!this.connectionEstablished)throw new Error('Make sure you call "sdk.init()" before doing other operations.')}},{key:"_initSocketConnection",value:function(){var e=this.server.Domain,t=this.options.protocol,n="".concat(t,"://").concat(e);this.Logger.log("Connecting to..",n),this.closeAllConnections();var o={reconnection:!1,perMessageDeflate:!1,upgrade:!1,transports:["websocket"],debug:!1};this.token&&(o.query={token:this.token}),this.socket=window.io(n,o),allConnections.push(this.socket),this.connectionEstablished=!0}},{key:"_initSocketEvents",value:function(){var e=this;this.socket.on(eventTypes.RECONNECT_ATTEMPT,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.RECONNECT_FAILED,(function(t){return e._onReconnectFailed(t)})).on(eventTypes.CONNECT,(function(t){return e._onConnect(t)})).on(eventTypes.CONNECT_TIMEOUT,(function(t){return e._onConnectTimeout(t)})).on(eventTypes.CONNECT_ERROR,(function(t){return e._onConnectError(t)})).on(eventTypes.RECONNECT_ERROR,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.ERROR,(function(t){return e._onError(t)})).on(eventTypes.DISCONNECT,(function(t){return e._onDisconnect(t)})),this.socket.onpacket=this._onEvent.bind(this),this.socket.onevent=this._onEvent.bind(this)}},{key:"_initKeepAlive",value:function(){var e=this;this.keepAliveInterval&&clearInterval(this.keepAliveInterval),this.idleInterval&&clearInterval(this.idleInterval),this.keepAliveInterval=setInterval((async function(){var t=(new Date).getTime(),n=2*e.options.keepAliveTimeout;t>e.getLastEventTimestamp()+n?await e._connect("next",!0):e.socket?t>e.getLastEventTimestamp()+e.options.keepAliveTimeout&&e.emit(eventTypes.KEEP_ALIVE,e.options.token):e._initSocketConnection()}),this.options.keepAliveTimeout)}},{key:"_findCurrentServer",value:function(){var e=null;return this.servers.length&&(e=this.servers[0]),this.server=e,this.server||(this.server=this.options.fallbackServer),this.server}},{key:"_findNextAvailableServer",value:function(){var e=this.server.Priority;if(this.Logger.log("Failover -> Trying to find another server"),e===this.servers.length-1)return this._findMaxPriorityServer();var t=e+1,n=this.servers.find((function(e){return e.Priority===t}));return n||(n=this._findMaxPriorityServer())?this.server.Domain!==n.Domain?(this.server=n,this.server):(this.Logger.log("Failover -> Found new server. Connecting to it...",this.server),null):void 0}},{key:"_findMaxPriorityServer",value:function(){this.Logger.log("Fallback -> Trying to find previous server","_findMaxPriorityServer");var e=getServerWithHighestPriority(this.servers);return this.server?this.server&&e.Domain!==this.server.Domain?(this.server=e,this.Logger.log("Fallback -> Trying to find previous server",this.server),this.server):null:(this.server=e,this.server)}},{key:"_getServers",value:async function(){"static"===this.options.serverFetchStrategy&&this.argumentOptions.servers&&Array.isArray(this.argumentOptions.servers)&&this.argumentOptions.servers.length>1&&(this.servers=this.argumentOptions.servers)}},{key:"_onEvent",value:function(e){var t,n=this;if(e.data){var o=this._parsePacket(e);this.Logger.log("New event -> ".concat(o.name),o),this._lastEventTimestamp=(new Date).getTime(),this._listenersMap.forEach((function(e,t){("*"===t||o.name===t)&&e(o)}));var i=(_defineProperty(t={},eventTypes.KEEP_ALIVE_RESPONSE,this._onKeepAlive),_defineProperty(t,eventTypes.LOGIN_RESPONSE,this._onLoginResponse),_defineProperty(t,eventTypes.EXTENSION_UPDATED,this._reSync),_defineProperty(t,eventTypes.QUEUES_UPDATED,this._reSync),_defineProperty(t,eventTypes.DIALERS_UPDATED,this._reSync),_defineProperty(t,eventTypes.LOGIN_STATUS,(function(){n.connected||n._onConnect()})),t)[o.name];i&&"function"==typeof i&&i.call(this,o.data),this._handleLocalEvents&&onNewEvent(Object.assign({eventData:o},this.options))}}},{key:"init",value:async function(){return this.connectionEstablished||(this.socket&&this.emit(eventTypes.CLOSE),await this._getToken(),await this._getTabsSession(),await this.login(this.options.loginType),await this._getServers()),!0}},{key:"setToken",value:async function(e){this.options.token=e,this.disconnect(),await this.init()}},{key:"closeAllConnections",value:function(){allConnections.forEach((function(e){e.close(),e.disconnect()})),allConnections=[],this.socket&&(this.socket.disconnect(),this.socket.close(),this.socket=null)}},{key:"disconnect",value:function(){this._listenersMap=new Map,this.closeAllConnections()}},{key:"on",value:function(e,t){this._listenersMap.set(e,t),this._checkInit()}},{key:"emit",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._checkInit(),this.Logger.log("EMIT -> ".concat(e),t),this.socket.emit(e,t)}},{key:"reSync",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.emit(eventTypes.RESYNC,{cache:e})}},{key:"setMonitorUrl",value:async function(e){var t=this.options.url,n=this.options.serverFetchStrategy;try{if(!e)return;this.options.url=e,this.options.serverFetchStrategy="remote",await this.init()}catch(e){this._onError(e),this.options.url=t,this.options.serverFetchStrategy=n,await this.init()}}},{key:"_getToken",value:function(){var e=this.options.loginType;if(this.token=this.options.token,"token"===e&&!this.token)throw new Error("Token login type expects the token option to be provided")}},{key:"_getTabsSession",value:function(){return window.sessionStorage.length||localStorage.setItem("getSessionStorage",Date.now()),window.addEventListener("storage",(function(e){if("getSessionStorage"==e.key)localStorage.setItem("sessionStorage",JSON.stringify(window.sessionStorage)),localStorage.removeItem("sessionStorage");else if("sessionStorage"==e.key&&!sessionStorage.length){var t=JSON.parse(e.newValue);for(var n in t)window.sessionStorage.setItem(n,t[n])}})),new Promise((function(e){return setTimeout(e,200)}))}},{key:"login",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"token",n={token:this.options.token,email:this.options.email,username:this.options.username,password:this.options.password},o=md5(JSON.stringify(n)),i=1e3;return this._lastLoginTimestamp+i>(new Date).getTime()?Promise.resolve():(this._lastLoginTimestamp=(new Date).getTime(),new Promise((async function(i,r){try{var s=window.sessionStorage.getItem(o);if(s)return s=JSON.parse(s),e.Logger.log("got data from session",s),await e._onLoginResponse(s),i(s)}catch(t){e.Logger.log("Error on getting session",t)}try{var a=getExternalLoginUrl(e.options.loginUrl,t),c=await externalLogin(a,n);await e._onLoginResponse(c),window.sessionStorage.setItem(o,JSON.stringify(c)),i(c)}catch(t){e.servers=e.argumentOptions.servers||defaultServers,r(t)}})))}}]),e}();return"undefined"!=typeof window&&(window.EventsSDK=EventsSDK),EventsSDK})); //# sourceMappingURL=voicenter-events-sdk.umd.js.map diff --git a/dist/voicenter-events-sdk.umd.js.map b/dist/voicenter-events-sdk.umd.js.map index 094f9500..cffb82fd 100644 --- a/dist/voicenter-events-sdk.umd.js.map +++ b/dist/voicenter-events-sdk.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/sdk.js","../src/utils/loadExternalScript.js","../src/utils.js","../src/utils/externalLogin.js","../src/index.js"],"sourcesContent":["export default {\n LOGIN_STATUS: 'loginStatus',\n LOGIN: 'login',\n LOGIN_USER: 'loginUser',\n LOGIN_CODE: 'loginUserCode',\n LOGIN_ACCOUNT: 'loginAccount',\n LOGIN_RESPONSE: 'loginResponse',\n QUEUE_EVENT: 'QueueEvent',\n QUEUES_UPDATED: 'QueuesUpdated',\n DIALERS_UPDATED: 'DialersUpdated',\n EXTENSION_EVENT: 'ExtensionEvent',\n EXTENSION_UPDATED: 'ExtensionsUpdated',\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\n CONNECT: 'connect',\n CONNECT_ERROR: 'connect_error',\n CONNECT_TIMEOUT: 'connect_timeout',\n DISCONNECT: 'disconnect',\n PONG: 'pong',\n RECONNECT: 'reconnect',\n RECONNECT_ATTEMPT: 'reconnect_attempt',\n RESYNC: 'resync',\n RECONNECTING: 'reconnecting',\n RECONNECT_ERROR: 'reconnect_error',\n RECONNECT_FAILED: 'reconnect_failed',\n KEEP_ALIVE: 'keepalive',\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\n CLOSE: 'closeme',\n ERROR: 'error',\n}\n","export const defaultServers = [{\n 'URLID': 59,\n 'Priority': 5,\n 'Version': 2,\n 'Domain': 'monitor1.voicenter.co'\n}, {\n 'URLID': 3,\n 'Priority': 4,\n 'Version': 2,\n 'Domain': 'monitor3.voicenter.co.il'\n}, {\n 'URLID': 4,\n 'Priority': 3,\n 'Version': 2,\n 'Domain': 'monitor4.voicenter.co.il'\n}, {\n 'URLID': 11,\n 'Priority': 2,\n 'Version': 2,\n 'Domain': 'monitor11.voicenter.co'\n}, {\n 'URLID': 5,\n 'Priority': 0,\n 'Version': 2,\n 'Domain': 'monitor5.voicenter.co.il'\n}];\n","\nclass Logger {\n constructor(options = {}) {\n this.debug = options.debug\n }\n\n /**\n * Logs to console a colored message\n * @param message\n * @param data\n * @private\n */\n _log(message, data) {\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\n let now = new Date().toUTCString()\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\n }\n\n /**\n * Logs to console a colored message\n * @param message\n * @param data\n * @private\n */\n _error(message, data) {\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\n let now = new Date().toUTCString()\n console.error(`${now}: ${toLog}`)\n }\n\n /**\n * Logs messages in case debug mode is set\n * @param message\n * @param data\n */\n log(message, data) {\n if (this.debug) {\n if (message && !data) {\n this._log(message)\n } else {\n this._log(message, data)\n }\n }\n }\n /**\n * Logs error messages in case debug mode is set\n * @param message\n * @param data\n */\n error(message, data) {\n if (this.debug) {\n if (message && !data) {\n this._error(message)\n } else {\n this._error(message, data)\n }\n }\n }\n}\n\nexport default Logger\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\n\nexport const sdkEventReasons = {\n NEWCALL: 'NEWCALL',\n ANSWER: 'ANSWER',\n HANGUP: 'HANGUP'\n}\nconst offlineEvents = [\n eventTypes.CONNECT_ERROR,\n eventTypes.CONNECT_TIMEOUT,\n eventTypes.DISCONNECT,\n eventTypes.RECONNECT_ATTEMPT,\n eventTypes.RECONNECTING,\n eventTypes.RECONNECT_ERROR,\n eventTypes.RECONNECT_FAILED,\n sdkEventReasons.CLOSE\n]\n\nfunction isSocketOffline(event) {\n let { name } = event\n return offlineEvents.includes(name)\n}\n\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName }) {\n let { name, data } = eventData\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\n switch (name) {\n case eventTypes.ALL_EXTENSION_STATUS:\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\n break;\n case eventTypes.EXTENSION_EVENT:\n let extension = data.data\n // Event reason: NEWCALL/ANSWER/HANGUP\n extension['lastEvent'] = {\n reason: data.reason,\n ivrid: data.ivruniqueid\n }\n const extensions = store.state[extensionsModuleName].extensions\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\n if (extensionIndex !== -1) {\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\n index: extensionIndex,\n extension\n })\n }\n break;\n case eventTypes.LOGIN_STATUS:\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\n break;\n case eventTypes.QUEUE_EVENT:\n let queue = data.data;\n const allQueues = store.state[queuesModuleName].all || []\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\n if (queueIndex !== -1) {\n store.dispatch(`${queuesModuleName}/updateQueue`, {\n index: queueIndex,\n queue\n })\n }\n break;\n default:\n break;\n }\n}\n","import colors from \"./colors\";\n\nexport const callStatuses = {\n CALLING: 100,\n HOLD: 101,\n}\n\nexport default {\n 1: {\n icon: \"IconLogin\",\n color: colors.LOGIN_COLOR,\n text: 'status.login',\n value: 1\n },\n 2: {\n icon: \"IconLogout\",\n color: colors.LOGOUT_COLOR,\n text: 'status.logout',\n value: 2\n },\n 3: {\n icon: \"IconLunch\",\n color: colors.LUNCH_COLOR,\n text: 'status.lunch',\n value: 3\n },\n 5: {\n icon: \"IconAdministrative\",\n color: colors.ADMINISTRATIVE_COLOR,\n text: 'status.administrative',\n value: 5\n },\n 7: {\n icon: \"IconPrivate\",\n color: colors.PRIVATE_COLOR,\n text: 'status.private',\n value: 7\n },\n 9: {\n icon: \"IconOther\",\n color: colors.OTHER_COLOR,\n text: 'status.other',\n value: 9\n },\n 11: {\n icon: \"IconTraining\",\n color: colors.TRAINING_COLOR,\n text: 'status.training',\n value: 11\n },\n 12: {\n icon: \"IconTeamMeeting\",\n color: colors.TEAM_MEETING_COLOR,\n text: 'status.teamMeeting',\n value: 12\n },\n 13: {\n icon: \"IconBrief\",\n color: colors.BRIEF_COLOR,\n text: 'status.brief',\n value: 13\n },\n 100: {\n icon: 'IconIncomingCall',\n color: colors.LIGHT_GREEN,\n text: 'status.incall',\n value: 100\n },\n 101: {\n icon: 'IconHold',\n color: colors.HOLD_COLOR,\n text: 'status.hold',\n value: 101\n }\n}\n","import { callStatuses } from '../utils/statusTypes';\n\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\nconst MINUTE = 60 * 1000\nconst LOGOUT_STATUS = 2;\nconst LOGIN_STATUS = 1;\nconst HOLD_STATUS = 'hold'\n\nconst types = {\n SET_EXTENSIONS: 'SET_EXTENSIONS',\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\n SET_SERVER_TIME: 'SET_SERVER_TIME',\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\n};\nconst state = {\n extensions: [],\n serverTime: null,\n serverDelta: 0,\n serverOffset: 0,\n isSocketOffline: false,\n offlineSocketTimestamp: null\n};\n\nconst mutations = {\n [types.SET_EXTENSIONS]: (state, value) => {\n state.extensions = value\n },\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\n state.extensions.splice(index, 1, extension)\n },\n [types.SET_SERVER_TIME]: (state, value) => {\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\n state.serverTime = value.servertime * 1000 - state.serverOffset\n state.serverDelta = new Date().getTime() - state.serverTime\n },\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\n state.isSocketOffline = value\n if (value) {\n state.offlineSocketTimestamp = new Date().getTime()\n } else {\n state.offlineSocketTimestamp = null\n }\n }\n};\n\nconst actions = {\n async setExtensions({commit}, value) {\n commit(types.SET_EXTENSIONS, value)\n },\n async updateExtension({commit}, value) {\n commit(types.UPDATE_EXTENSIONS, value)\n },\n};\n\nfunction isCallOnHold(call = {}) {\n let status = call.callstatus || ''\n status = status.toLowerCase()\n return call.answered && status === HOLD_STATUS\n}\n\nconst getters = {\n isSocketOffline: state => {\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\n return false\n }\n const now = new Date().getTime()\n // show after 1 minute of disconnect\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\n },\n extensionsWithCalls: state => hideLoggedOutUsers => {\n let groupedExtensions = [];\n\n state.extensions.forEach((extension) => {\n\n if (extension.calls.length > 0) {\n if (extension.calls.filter(isCallOnHold).length) {\n extension['representativeStatus'] = callStatuses.HOLD;\n } else {\n extension['representativeStatus'] = callStatuses.CALLING;\n }\n }\n groupedExtensions.push(extension);\n });\n\n if (hideLoggedOutUsers) {\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\n }\n return groupedExtensions;\n },\n extensionCountByStatus: (state, getters) => status => {\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\n }\n}\n\nexport default {\n namespaced: true,\n state,\n mutations,\n actions,\n getters,\n};\n","const types = {\n SET_QUEUES: 'SET_QUEUES',\n UPDATE_QUEUES: 'UPDATE_QUEUES',\n}\nconst state = {\n all: [],\n}\n\nconst mutations = {\n [types.SET_QUEUES]: (state, value) => {\n state.all = value\n },\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\n state.all.splice(index, 1, queue)\n },\n}\n\nconst actions = {\n async setQueues({commit}, value) {\n commit(types.SET_QUEUES, value)\n },\n async updateQueue({commit}, value) {\n commit(types.UPDATE_QUEUES, value)\n },\n}\n\nconst getters = {\n queueWithActiveCalls: (state) => {\n return state.all.filter((el) => el.Calls.length)\n },\n allQueueCalls: (state, getters) => {\n const allCalls = []\n getters.queueWithActiveCalls.forEach((queue) => {\n const calls = queue.Calls || []\n allCalls.push(...calls)\n })\n return allCalls\n },\n filterQueuesByIds: (state) => queueIds => {\n if (!queueIds || !Array.isArray(queueIds)) {\n return state.all\n }\n return state.all.filter(e => queueIds.includes(e.QueueID))\n }\n}\nexport default {\n namespaced: true,\n state,\n mutations,\n actions,\n getters,\n}\n","import eventTypes from './eventTypes';\nimport { defaultServers } from './config';\nimport Logger from './Logger';\nimport debounce from 'lodash/debounce'\nimport handleStoreEvents from './store/handleStoreEvents'\nimport extensionsModule from './store/extensions'\nimport queuesModule from './store/queues'\nimport { getServerWithHighestPriority, isValidDate } from './utils';\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\nimport { loadExternalScript } from './utils/loadExternalScript'\n\nconst defaultOptions = {\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\n fallbackServer: {\n Domain: 'monitor5.voicenter.co.il',\n Priority: 0,\n },\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\n servers: defaultServers,\n token: null,\n loginType: 'token',\n forceNew: true,\n reconnectionDelay: 10000,\n reconnectionDelayMax: 10000,\n maxReconnectAttempts: 2,\n timeout: 10000,\n keepAliveTimeout: 60000,\n idleInterval: 60000 * 5, // 5 minutes\n protocol: 'https',\n transports: ['websocket'],\n upgrade: false,\n store: null,\n extensionsModuleName: 'sdkExtensions',\n queuesModuleName: 'sdkQueues',\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\n};\n\nlet allConnections = [];\nlet listenersMap = new Map();\n\nclass EventsSDK {\n constructor(options = {}) {\n this.options = {\n ...defaultOptions,\n ...options,\n };\n this.argumentOptions = {\n ...options\n }\n if (!this.options.loginType) {\n throw new Error('A login type should be provided');\n }\n this.Logger = new Logger(this.options);\n this.servers = [];\n this.server = null;\n this.socket = null;\n this.connected = false;\n this.connectionEstablished = false;\n this._lastEventTimestamp = new Date().getTime();\n this._initReconnectOptions();\n this._listenersMap = listenersMap;\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\n leading: true,\n trailing: false\n });\n this._lastLoginTimestamp = null;\n this._handleLocalEvents = false;\n this._registerExtensionsModule();\n this._registerQueueModule();\n }\n\n getLastEventTimestamp() {\n return this._lastEventTimestamp\n }\n _reSync () {\n this.emit(eventTypes.RESYNC, {\n cache: false\n });\n }\n _registerExtensionsModule() {\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, extensionsModule)\n this._handleLocalEvents = true\n }\n\n _registerQueueModule() {\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, queuesModule)\n this._handleLocalEvents = true\n }\n\n _validateStoreModule(moduleName) {\n const { store } = this.options\n if (!store) {\n return false\n }\n if (store.state[moduleName]) {\n store.unregisterModule(moduleName)\n }\n return true\n }\n\n _initReconnectOptions() {\n this.reconnectOptions = {\n retryCount: 1,\n maxReconnectAttempts: this.options.maxReconnectAttempts,\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\n maxReconnectionDelay: 60000 * 5 // 5 minutes\n }\n }\n\n _onConnect() {\n this._initReconnectDelays();\n this.connected = true;\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\n }\n\n _initReconnectDelays() {\n this.reconnectOptions.retryCount = 1;\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\n this.socket.io.reconnectionDelay(minReconnectDelay);\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\n }\n\n _onConnectError(data) {\n this._retryConnection('next');\n this.connected = false;\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\n }\n\n _onError(err) {\n this.Logger.log(eventTypes.ERROR, err);\n }\n\n _onReconnectFailed() {\n this._retryConnection('next');\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\n }\n\n _onConnectTimeout() {\n this._retryConnection('next');\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\n }\n\n _onReconnectAttempt() {\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\n this._retryConnection('next');\n return;\n }\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\n this.reconnectOptions.reconnectionDelay = newDelay;\n this.socket.io.reconnectionDelay(newDelay);\n this.socket.io.reconnectionDelayMax(newDelay);\n }\n this.reconnectOptions.retryCount++;\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\n }\n\n _onDisconnect(reason) {\n this.connected = false;\n this.Logger.log(eventTypes.DISCONNECT, reason);\n this._connect('next')\n }\n\n _onKeepAlive(data) {\n if (typeof data === 'object' && data.errorCode !== 0) {\n this._initSocketConnection();\n return\n }\n if (data && this.connected) {\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\n this._lastEventTimestamp = new Date().getTime()\n } else {\n this._initSocketConnection();\n }\n }\n\n async _onLoginResponse(data) {\n if (data.Client) {\n await loadExternalScript(data.Client)\n }\n if (data.URL) {\n this.server = {\n Priority: 0,\n Domain: data.URL.replace('https://', '')\n }\n }\n if (data.URLList && Array.isArray(data.URLList)) {\n this.servers = data.URLList.map((url, index) => {\n return {\n Priority: index,\n Domain: url.replace('https://', '')\n }\n })\n }\n if (data.Token) {\n this.options.token = data.Token;\n this.token = data.Token\n await this._connect('default', true)\n }\n\n if (data.RefreshToken) {\n this.options.refreshToken = data.RefreshToken\n this._handleTokenExpiry()\n }\n if (data.TokenExpiry) {\n this.options.tokenExpiry = data.TokenExpiry\n }\n }\n\n _handleTokenExpiry() {\n const date = new Date(this.options.tokenExpiry)\n if (!isValidDate(date)) {\n return\n }\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\n setTimeout(async () => {\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\n await this._onLoginResponse(res)\n }, timeout)\n }\n\n _parsePacket(packet) {\n if (!packet.data) {\n return {};\n }\n let name = packet.data[0];\n let data = packet.data[1];\n return {\n name,\n data\n };\n }\n\n async _connect(server = 'default', skipLogin = false) {\n let serverToConnect = null;\n if (server === 'default') {\n serverToConnect = this._findCurrentServer();\n } else if (server === 'next') {\n serverToConnect = this._findNextAvailableServer()\n } else if (server === 'prev') {\n serverToConnect = this._findMaxPriorityServer()\n } else {\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\n }\n if (!serverToConnect) {\n this.server = this._findCurrentServer();\n }\n this._initSocketConnection();\n this._initSocketEvents();\n this._initKeepAlive();\n this._initReconnectDelays();\n if (skipLogin) {\n return\n }\n await this.login(this.options.loginType)\n }\n\n _checkInit() {\n if (!this.connectionEstablished) {\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\n }\n }\n\n _initSocketConnection() {\n let domain = this.server.Domain;\n let protocol = this.options.protocol;\n let url = `${protocol}://${domain}`;\n this.Logger.log('Connecting to..', url);\n this.closeAllConnections();\n const options = {\n ...this.options,\n debug: false\n }\n if (this.token) {\n options.query = {\n token: this.token\n }\n }\n this.socket = window.io(url, options);\n allConnections.push(this.socket);\n this.connectionEstablished = true;\n }\n\n _initSocketEvents() {\n this.socket.onevent = this._onEvent.bind(this)\n }\n\n _initKeepAlive() {\n if (this.keepAliveInterval) {\n clearInterval(this.keepAliveInterval)\n }\n\n if (this.idleInterval) {\n clearInterval((this.idleInterval))\n }\n this.keepAliveInterval = setInterval(async () => {\n const now = new Date().getTime()\n const delta = this.options.keepAliveTimeout * 2\n\n if (now > this.getLastEventTimestamp() + delta) {\n await this._connect('next', true)\n return\n }\n if (!this.socket) {\n this._initSocketConnection();\n return\n }\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\n }\n\n }, this.options.keepAliveTimeout);\n\n this.idleInterval = setInterval(() => {\n this.reSync(false)\n }, this.options.idleInterval)\n }\n\n _findCurrentServer() {\n let server = null;\n if (this.servers.length) {\n server = this.servers[0];\n }\n this.server = server;\n if (!this.server) {\n this.server = this.options.fallbackServer\n }\n return this.server;\n }\n\n _findNextAvailableServer() {\n let currentServerPriority = this.server.Priority;\n this.Logger.log(`Failover -> Trying to find another server`);\n if (currentServerPriority === this.servers.length - 1) {\n return this._findMaxPriorityServer()\n }\n let nextServerPriority = currentServerPriority + 1\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\n if (!nextServer) {\n nextServer = this._findMaxPriorityServer();\n if (!nextServer) {\n return\n }\n }\n if (this.server.Domain !== nextServer.Domain) {\n this.server = nextServer;\n return this.server\n }\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\n return null\n }\n\n _findMaxPriorityServer() {\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\n if (!this.server) {\n this.server = maxPriorityServer;\n return this.server\n }\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\n this.server = maxPriorityServer;\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\n return this.server\n }\n return null\n }\n\n async _getServers() {\n // Ignore server fetch if we have a list of servers passed via options\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\n this.servers = this.argumentOptions.servers\n }\n }\n\n _onEvent(packet) {\n if (!packet.data) {\n return;\n }\n let evt = this._parsePacket(packet);\n this.Logger.log(`New event -> ${evt.name}`, evt);\n this._lastEventTimestamp = new Date().getTime()\n this._listenersMap.forEach((callback, eventName) => {\n if (eventName === '*') {\n callback(evt);\n } else if (evt.name === eventName) {\n callback(evt);\n }\n })\n const eventMappings = {\n [eventTypes.RECONNECT_ATTEMPT]: this._onReconnectAttempt,\n [eventTypes.RECONNECT_FAILED]: this._onReconnectFailed,\n [eventTypes.CONNECT]: this._onConnect,\n [eventTypes.DISCONNECT]: this._onDisconnect,\n [eventTypes.ERROR]: this._onError,\n [eventTypes.CONNECT_ERROR]: this._onConnectError,\n [eventTypes.CONNECT_TIMEOUT]: this._onConnectTimeout,\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\n [eventTypes.QUEUES_UPDATED]: this._reSync,\n [eventTypes.DIALERS_UPDATED]: this._reSync,\n [eventTypes.LOGIN_STATUS]: () => {\n if (!this.connected) {\n this._onConnect()\n }\n }\n };\n const eventHandler = eventMappings[evt.name];\n if (eventHandler && typeof eventHandler === 'function') {\n eventHandler.call(this, evt.data);\n }\n if (this._handleLocalEvents) {\n handleStoreEvents({\n eventData: evt,\n ...this.options\n });\n }\n }\n\n /**\n * Initializes socket connection. Should be called before any other action\n * @return {Promise}\n */\n async init() {\n if (this.connectionEstablished) {\n return true;\n }\n if (this.socket) {\n this.emit(eventTypes.CLOSE);\n }\n await this._getToken();\n await this.login(this.options.loginType)\n await this._getServers();\n return true;\n }\n\n /**\n * Sets the monitor code token\n * @param token\n */\n async setToken(token) {\n this.options.token = token\n this.disconnect()\n await this.init()\n }\n\n /**\n * Closes all existing connections\n */\n closeAllConnections() {\n allConnections.forEach(connection => {\n connection.close()\n connection.disconnect()\n })\n allConnections = []\n if (this.socket) {\n this.socket.disconnect()\n this.socket = null\n }\n }\n\n /**\n * Disconnects the socket instance from the servers\n */\n disconnect() {\n this._listenersMap = new Map();\n this.closeAllConnections()\n }\n\n /**\n * Listens for new events\n * @param {string} eventName (name of the event, * for all events)\n * @param {function} callback (callback function when even with the specified name is received)\n */\n on(eventName, callback) {\n this._listenersMap.set(eventName, callback);\n this._checkInit()\n }\n\n /**\n * Emits an event to the server\n * @param {string} eventName (name of the event)\n * @param {object} data (data for the event)\n */\n\n emit(eventName, data = {}) {\n this._checkInit();\n this.Logger.log(`EMIT -> ${eventName}`, data);\n this.socket.emit(eventName, data);\n }\n\n /**\n * Calls resync event to resync socket data\n * @param cache\n */\n reSync(cache = true) {\n this.emit(eventTypes.RESYNC, { cache })\n }\n\n async setMonitorUrl(url) {\n const oldUrl = this.options.url\n const oldStrategy = this.options.serverFetchStrategy\n try {\n if (!url) {\n return\n }\n this.options.url = url\n this.options.serverFetchStrategy = 'remote'\n await this.init()\n } catch (err) {\n this._onError(err)\n this.options.url = oldUrl\n this.options.serverFetchStrategy = oldStrategy\n await this.init()\n }\n }\n\n _getToken() {\n const { loginType } = this.options\n this.token = this.options.token;\n if (loginType === 'token') {\n if (!this.token) {\n throw new Error('Token login type expects the token option to be provided');\n }\n }\n }\n\n /**\n * Login (logs in based on the token/credentials provided)\n * @param type (login type. Can be token/user/code/account)\n * @return {Promise}\n */\n login(type = 'token') {\n // throttle login for 1 second\n const delay = 1000;\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\n return Promise.resolve()\n }\n this._lastLoginTimestamp = new Date().getTime()\n return new Promise(async (resolve, reject) => {\n try {\n let url = getExternalLoginUrl(this.options.loginUrl, type)\n const res = await externalLogin(url, {\n token: this.options.token,\n email: this.options.email,\n username: this.options.username,\n password: this.options.password\n })\n await this._onLoginResponse(res)\n resolve(res)\n } catch (err) {\n this.servers = this.argumentOptions.servers || defaultServers;\n reject(err)\n }\n });\n }\n\n}\n\nexport default EventsSDK;\n","export function loadExternalScript(url) {\n return new Promise((resolve) => {\n const script = document.createElement('script');\n script.src = url;\n script.onload = () => {\n resolve();\n };\n script.onerror = () => {\n reject();\n };\n document.body.append(script);\n });\n}\n","export function getServerWithHighestPriority(servers) {\n // Highest priority server is the one with lowest Priority value\n let chosenServer = null\n let maxPriority = Number.MAX_SAFE_INTEGER\n servers.forEach(server => {\n if (server.Priority < maxPriority) {\n maxPriority = server.Priority\n chosenServer = server\n }\n })\n return chosenServer\n}\n\nexport function isValidDate(date) {\n return !isNaN(date.getTime())\n}\n","export async function externalLogin(url, { email, password, token, username }) {\n let body = null\n if (token) {\n body = JSON.stringify({ token })\n } else if (username) {\n body = JSON.stringify({\n username,\n password\n })\n } else {\n body = JSON.stringify({\n email,\n pin: password\n })\n }\n const res = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body,\n });\n const data = await res.json();\n if (data.error) {\n throw new Error(data.error)\n }\n return data.Data.Socket;\n}\n\nexport function getExternalLoginUrl(baseUrl, loginType) {\n if (loginType === 'user') {\n return `${baseUrl}/User`\n } else if (loginType === 'token') {\n return `${baseUrl}/Token`\n } else if (loginType === 'account') {\n return `${baseUrl}/Account`\n }\n return baseUrl\n}\n\nexport async function refreshToken(url, oldRefreshToken) {\n const res = await fetch(url, {\n method: 'GET',\n\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${oldRefreshToken}`\n }\n });\n return res.json();\n}\n","const version = '__VERSION__'\nimport sdk from './sdk'\nif (typeof window !== 'undefined') {\n // Make it available on window\n window.EventsSDK = sdk\n}\n\nexport default sdk\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","value","type","global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","isOwn","call","tag","unmasked","e","result","nullTag","undefinedTag","getRawTag","objectToString","symbolTag","isObjectLike","baseGetTag","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","isSymbol","isObject","other","valueOf","replace","isBinary","test","slice","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","setTimeout","timeWaiting","remainingWait","debounced","isInvoking","arguments","leadingEdge","clearTimeout","toNumber","cancel","flush","offlineEvents","eventTypes","NEWCALL","ANSWER","HANGUP","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","name","commit","event","includes","isSocketOffline","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","index","queues","queue","queueIndex","all","QueueID","callStatuses","HOLD_STATUS","types","isCallOnHold","status","callstatus","toLowerCase","answered","namespaced","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","length","filter","push","representativeStatus","extensionCountByStatus","el","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","defaultOptions","url","fallbackServer","Domain","Priority","loginUrl","refreshTokenUrl","servers","token","loginType","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","Error","server","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","debounce","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","io","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","Promise","resolve","script","document","createElement","src","onload","onerror","reject","body","append","URL","URLList","map","Token","RefreshToken","refreshToken","_handleTokenExpiry","TokenExpiry","tokenExpiry","date","isValidDate","async","res","oldRefreshToken","fetch","method","headers","json","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","query","window","onevent","_onEvent","keepAliveInterval","clearInterval","setInterval","delta","_this2","getLastEventTimestamp","reSync","currentServerPriority","nextServerPriority","nextServer","find","chosenServer","maxPriority","maxPriorityServer","Number","MAX_SAFE_INTEGER","evt","_parsePacket","callback","eventName","eventHandler","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onDisconnect","_onError","_onConnectError","_onConnectTimeout","_onKeepAlive","_reSync","_this3","handleStoreEvents","_getToken","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","baseUrl","_this4","email","password","username","pin","Data","Socket","externalLogin","sdk"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n }\r\n // allQueueCalls: (state, getters) => {\r\n // const allCalls = []\r\n // getters.queueWithActiveCalls.forEach((queue) => {\r\n // const calls = queue.Calls || []\r\n // allCalls.push(...calls)\r\n // })\r\n // return allCalls\r\n // },\r\n // filterQueuesByIds: (state) => queueIds => {\r\n // if (!queueIds || !Array.isArray(queueIds)) {\r\n // return state.all\r\n // }\r\n // return state.all.filter(e => queueIds.includes(e.QueueID))\r\n // }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","export function loadExternalScript(url) {\r\n return new Promise((resolve) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0')\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = window.io(url, options)\r\n\r\n\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) { \r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession(){\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n };\r\n window.addEventListener('storage', (event) => {\r\n //console.log('storage event', event);\r\n if (event.key == 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key == 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n var data = JSON.parse(event.newValue),\r\n value;\r\n for (let key in data) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n })\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n this._lastLoginTimestamp = new Date().getTime()\r\n return new Promise(async (resolve, reject) => {\r\n try{\r\n let loginSession = window.sessionStorage.getItem(key);\r\n if(loginSession){\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n }catch(err){\r\n this.Logger.log('Error on getting session',err)\r\n }\r\n try {\r\n let url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url,payload)\r\n await this._onLoginResponse(res)\r\n\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadExternalScript","Promise","resolve","script","document","createElement","src","onload","onerror","reject","append","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","eval","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModuleName","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","io","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"2+DAAe,CACbA,aAAc,cACdC,MAAO,QACPC,WAAY,YACZC,WAAY,gBACZC,cAAe,eACfC,eAAgB,gBAChBC,YAAa,aACbC,eAAgB,gBAChBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,kBAAmB,oBACnBC,qBAAsB,sBACtBC,QAAS,UACTC,cAAe,gBACfC,gBAAiB,kBACjBC,WAAY,aACZC,KAAM,OACNC,UAAW,YACXC,kBAAmB,oBACnBC,OAAQ,SACRC,aAAc,eACdC,gBAAiB,kBACjBC,iBAAkB,mBAClBC,WAAY,YACZC,oBAAqB,oBACrBC,MAAO,UACPC,MAAO,SC3BIC,eAAiB,CAAC,OACpB,YACG,UACD,SACD,yBACT,OACQ,WACG,UACD,SACD,4BACT,OACQ,WACG,UACD,SACD,4BACT,OACQ,YACG,UACD,SACD,0BACT,OACQ,WACG,UACD,SACD,6BCvBNC,mCACQC,yDAAU,gCACfC,MAAQD,EAAQC,+CASvB,SAAKC,EAASC,OACRC,EAAQD,YAAUD,0BAAuBG,KAAKC,UAAUH,cAAaD,GACrEK,GAAM,IAAIC,MAAOC,cACrBC,QAAQC,iBAAUJ,kBAAWH,gFAS/B,SAAOF,EAASC,OACVC,EAAQD,YAAUD,uBAAoBG,KAAKC,UAAUH,cAAaD,GAClEK,GAAM,IAAIC,MAAOC,cACrBC,QAAQE,gBAASL,eAAQH,uBAQ3B,SAAIF,EAASC,GACPU,KAAKZ,QACHC,IAAYC,OACTW,KAAKZ,QAELY,KAAKZ,EAASC,yBASzB,SAAMD,EAASC,GACTU,KAAKZ,QACHC,IAAYC,OACTY,OAAOb,QAEPa,OAAOb,EAASC,aC7B7B,SAASa,SAASC,GAChB,IAAIC,SAAcD,EAClB,OAAgB,MAATA,IAA0B,UAARC,GAA4B,YAARA,GAG/C,eAAiBF,uPC7BjB,IAAIG,WAA8B,iBAAVC,gBAAsBA,gBAAUA,eAAOC,SAAWA,QAAUD,2BAEnED,WCAbG,SAA0B,iBAARC,MAAoBA,MAAQA,KAAKF,SAAWA,QAAUE,KAGxEC,KAAOL,aAAcG,UAAYG,SAAS,cAATA,SAEpBD,KCUbjB,IAAM,WACR,OAAOiB,MAAKhB,KAAKD,aAGFA,ICrBbmB,aAAe,KAUnB,SAASC,gBAAgBC,GAGvB,IAFA,IAAIC,EAAQD,EAAOE,OAEZD,KAAWH,aAAaK,KAAKH,EAAOI,OAAOH,MAClD,OAAOA,EAGT,qBAAiBF,gBCfbM,YAAc,OASlB,SAASC,SAASN,GAChB,OAAOA,EACHA,EAAOO,MAAM,EAAGR,iBAAgBC,GAAU,GAAGQ,QAAQH,YAAa,IAClEL,EAGN,cAAiBM,SCfbG,SAASb,MAAKa,eAEDA,SCFbC,YAAcjB,OAAOkB,UAGrBC,eAAiBF,YAAYE,eAO7BC,qBAAuBH,YAAYI,SAGnCC,eAAiBN,QAASA,QAAOO,iBAAcC,EASnD,SAASC,UAAU7B,GACjB,IAAI8B,EAAQP,eAAeQ,KAAK/B,EAAO0B,gBACnCM,EAAMhC,EAAM0B,gBAEhB,IACE1B,EAAM0B,qBAAkBE,EACxB,IAAIK,GAAW,EACf,MAAOC,IAET,IAAIC,EAASX,qBAAqBO,KAAK/B,GAQvC,OAPIiC,IACEH,EACF9B,EAAM0B,gBAAkBM,SAEjBhC,EAAM0B,iBAGVS,EAGT,eAAiBN,UC5CbR,cAAcjB,OAAOkB,UAOrBE,uBAAuBH,cAAYI,SASvC,SAASW,eAAepC,GACtB,OAAOwB,uBAAqBO,KAAK/B,GAGnC,oBAAiBoC,eChBbC,QAAU,gBACVC,aAAe,qBAGfZ,iBAAiBN,QAASA,QAAOO,iBAAcC,EASnD,SAASW,WAAWvC,GAClB,OAAa,MAATA,OACe4B,IAAV5B,EAAsBsC,aAAeD,QAEtCX,kBAAkBA,oBAAkBtB,OAAOJ,GAC/C6B,WAAU7B,GACVoC,gBAAepC,GAGrB,gBAAiBuC,WCHjB,SAASC,aAAaxC,GACpB,OAAgB,MAATA,GAAiC,iBAATA,EAGjC,mBAAiBwC,aCxBbC,UAAY,kBAmBhB,SAASC,SAAS1C,GAChB,MAAuB,iBAATA,GACXwC,eAAaxC,IAAUuC,YAAWvC,IAAUyC,UAGjD,eAAiBC,SCvBbC,IAAM,IAGNC,WAAa,qBAGbC,WAAa,aAGbC,UAAY,cAGZC,aAAeC,SAyBnB,SAASC,SAASjD,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAI0C,WAAS1C,GACX,OAAO2C,IAET,GAAI5C,WAASC,GAAQ,CACnB,IAAIkD,EAAgC,mBAAjBlD,EAAMmD,QAAwBnD,EAAMmD,UAAYnD,EACnEA,EAAQD,WAASmD,GAAUA,EAAQ,GAAMA,EAE3C,GAAoB,iBAATlD,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQiB,UAASjB,GACjB,IAAIoD,EAAWP,WAAW/B,KAAKd,GAC/B,OAAQoD,GAAYN,UAAUhC,KAAKd,GAC/B+C,aAAa/C,EAAMkB,MAAM,GAAIkC,EAAW,EAAI,GAC3CR,WAAW9B,KAAKd,GAAS2C,KAAO3C,EAGvC,eAAiBiD,SC1DbI,gBAAkB,sBAGlBC,UAAYC,KAAKC,IACjBC,UAAYF,KAAKG,IAwDrB,SAASC,SAASC,EAAMC,EAAM9E,GAC5B,IAAI+E,EACAC,EACAC,EACA7B,EACA8B,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTC,GAAW,EAEf,GAAmB,mBAARV,EACT,MAAM,IAAIW,UAAUlB,iBAUtB,SAASmB,EAAWC,GAClB,IAAIC,EAAOZ,EACPa,EAAUZ,EAKd,OAHAD,EAAWC,OAAWnC,EACtBuC,EAAiBM,EACjBtC,EAASyB,EAAKgB,MAAMD,EAASD,GAI/B,SAASG,EAAYJ,GAMnB,OAJAN,EAAiBM,EAEjBR,EAAUa,WAAWC,EAAclB,GAE5BO,EAAUI,EAAWC,GAAQtC,EAatC,SAAS6C,EAAaP,GACpB,IAAIQ,EAAoBR,EAAOP,EAM/B,YAAyBtC,IAAjBsC,GAA+Be,GAAqBpB,GACzDoB,EAAoB,GAAOZ,GANJI,EAAON,GAM8BH,EAGjE,SAASe,IACP,IAAIN,EAAOnF,QACX,GAAI0F,EAAaP,GACf,OAAOS,EAAaT,GAGtBR,EAAUa,WAAWC,EA3BvB,SAAuBN,GACrB,IAEIU,EAActB,GAFMY,EAAOP,GAI/B,OAAOG,EACHZ,UAAU0B,EAAanB,GAJDS,EAAON,IAK7BgB,EAoB+BC,CAAcX,IAGnD,SAASS,EAAaT,GAKpB,OAJAR,OAAUrC,EAIN0C,GAAYR,EACPU,EAAWC,IAEpBX,EAAWC,OAAWnC,EACfO,GAeT,SAASkD,IACP,IAAIZ,EAAOnF,QACPgG,EAAaN,EAAaP,GAM9B,GAJAX,EAAWyB,UACXxB,EAAWnE,KACXsE,EAAeO,EAEXa,EAAY,CACd,QAAgB1D,IAAZqC,EACF,OAAOY,EAAYX,GAErB,GAAIG,EAIF,OAFAmB,aAAavB,GACbA,EAAUa,WAAWC,EAAclB,GAC5BW,EAAWN,GAMtB,YAHgBtC,IAAZqC,IACFA,EAAUa,WAAWC,EAAclB,IAE9B1B,EAIT,OA3GA0B,EAAOZ,WAASY,IAAS,EACrB9D,WAAShB,KACXqF,IAAYrF,EAAQqF,QAEpBJ,GADAK,EAAS,YAAatF,GACHuE,UAAUL,WAASlE,EAAQiF,UAAY,EAAGH,GAAQG,EACrEM,EAAW,aAAcvF,IAAYA,EAAQuF,SAAWA,GAoG1De,EAAUI,OApCV,gBACkB7D,IAAZqC,GACFuB,aAAavB,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,OAAUrC,GAgCjDyD,EAAUK,MA7BV,WACE,YAAmB9D,IAAZqC,EAAwB9B,EAAS+C,EAAa5F,UA6BhD+F,EAGT,eAAiB1B,SC5LJgC,gBAAkB,CAC7BC,QAAS,UACTC,OAAQ,SACRC,OAAQ,UAEJC,cAAgB,CACpBC,WAAWjI,cACXiI,WAAWhI,gBACXgI,WAAW/H,WACX+H,WAAW5H,kBACX4H,WAAW1H,aACX0H,WAAWzH,gBACXyH,WAAWxH,iBACXmH,gBAAgBhH,OAGlB,SAASsH,gBAAgBC,OACjBC,EAASD,EAATC,YACCJ,cAAcK,SAASD,GAGjB,SAASE,kBAAaC,IAAAA,UAAWC,IAAAA,MAAOC,IAAAA,qBAAsBC,IAAAA,iBACrEN,EAAeG,EAAfH,KAAMjH,EAASoH,EAATpH,YACZqH,EAAMG,iBAAUF,4BAA8CP,gBAAgBK,IACtEH,QACDH,WAAWnI,qBACd0I,EAAMI,mBAAYH,oBAAsCtH,EAAK0H,uBAE1DZ,WAAWrI,oBACVkJ,EAAY3H,EAAKA,KAErB2H,EAAS,UAAgB,CACvBC,OAAQ5H,EAAK4H,OACbC,MAAO7H,EAAK8H,iBAGVC,EADeV,EAAMW,MAAMV,GAAsBI,WACrBO,WAAU,SAAAjF,UAAKA,EAAEkF,SAAWP,EAAUO,WAC9C,IAApBH,GACFV,EAAMI,mBAAYH,sBAAwC,CACxD5F,MAAOqG,EACPJ,UAAAA,eAIDb,WAAW9I,aACdqJ,EAAMG,iBAAUF,sBAAwCtH,GACxDqH,EAAMI,mBAAYF,gBAA8BvH,EAAKmI,mBAElDrB,WAAWxI,gBACV8J,EAAQpI,EAAKA,KAEbqI,GADchB,EAAMW,MAAMT,GAAkBe,KAAO,IAC5BL,WAAU,SAAAjF,UAAKA,EAAEuF,UAAYH,EAAMG,YAC1C,IAAhBF,GACFhB,EAAMI,mBAAYF,kBAAgC,CAChD7F,MAAO2G,EACPD,MAAAA,SCvDGI,aAAe,CAC1BC,QAAS,IACTC,KAAM,gBCFFC,uBAAyB,MACzBC,OAAS,IACTC,cAAgB,EAEhBC,YAAc,OAEdC,MAAQ,CACVC,eAAgB,iBAChBC,kBAAmB,oBACnBC,gBAAiB,kBACjBC,sBAAuB,yBAErBnB,MAAQ,CACVN,WAAY,GACZ0B,WAAY,KACZC,YAAa,EACbC,aAAc,EACdvC,iBAAiB,EACjBwC,uBAAwB,MAGtBC,oDACDT,MAAMC,gBAAiB,SAAChB,EAAOlH,GAC5BkH,EAAMN,WAAa5G,gCAEtBiI,MAAME,mBAAoB,SAACjB,SAAQtG,IAAAA,MAAOiG,IAAAA,UACvCK,EAAMN,WAAW+B,OAAO/H,EAAO,EAAGiG,iCAErCoB,MAAMG,iBAAkB,SAAClB,EAAOlH,GAC7BkH,EAAMsB,aAAwC,GAAzBxI,EAAM4I,iBAAwB,KAAQf,uBAC3DX,EAAMoB,WAAgC,IAAnBtI,EAAM6I,WAAoB3B,EAAMsB,aACnDtB,EAAMqB,aAAc,IAAIhJ,MAAOuJ,UAAY5B,EAAMoB,yCAEpDL,MAAMI,uBAAwB,SAACnB,EAAOlH,GACnCkH,EAAMjB,gBAAkBjG,EAEpBkH,EAAMuB,uBADNzI,GAC+B,IAAIT,MAAOuJ,UAEX,oBAKrCC,QAAU,CACNC,+BAAwBhJ,IAC1B0G,IADiBA,QACVuB,MAAMC,eAAgBlI,IAE3BiJ,iCAA0BjJ,IAC5B0G,IADmBA,QACZuB,MAAME,kBAAmBnI,KAIxC,SAASkJ,mBAAanH,yDAAO,GACvBoH,EAASpH,EAAKqH,YAAc,UAChCD,EAASA,EAAOE,cACTtH,EAAKuH,UAAYH,IAAWnB,YAGrC,IAAMuB,QAAU,CACdtD,gBAAiB,SAAAiB,OACVA,EAAMuB,wBAA0Be,MAAMtC,EAAMuB,+BACxC,MAEHnJ,GAAM,IAAIC,MAAOuJ,iBAEhB5B,EAAMjB,iBAAmB3G,EAAM4H,EAAMuB,uBAAyBX,QAEvE2B,oBAAqB,SAAAvC,UAAS,SAAAwC,OACxBC,EAAoB,UAExBzC,EAAMN,WAAWgD,SAAQ,SAAC/C,GAEpBA,EAAUgD,MAAMhJ,OAAS,IACvBgG,EAAUgD,MAAMC,OAAOZ,cAAcrI,OACvCgG,EAAS,qBAA2Ba,aAAaE,KAEjDf,EAAS,qBAA2Ba,aAAaC,SAGrDgC,EAAkBI,KAAKlD,MAGrB6C,EACKC,EAAkBG,QAAO,SAAA5H,UAAKA,EAAE8H,uBAAyBjC,iBAE3D4B,IAETM,uBAAwB,SAAC/C,EAAOqC,UAAY,SAAAJ,UACnCI,EAAQE,oBAAoBK,QAAO,SAAAI,UAAMA,EAAGF,uBAAyBb,KAAQtI,QAAU,sBAInF,CACXsJ,YAAY,EACZjD,MAAAA,MACAwB,UAAAA,UACAK,QAAAA,QACAQ,QAAAA,sBCnGEtB,QAAQ,CACVmC,WAAY,aACZC,cAAe,iBAEbnD,QAAQ,CACVM,IAAK,IAGHkB,0DACDT,QAAMmC,YAAa,SAAClD,EAAOlH,GACxBkH,EAAMM,IAAMxH,kCAEfiI,QAAMoC,eAAgB,SAACnD,SAAQtG,IAAAA,MAAO0G,IAAAA,MACnCJ,EAAMM,IAAImB,OAAO/H,EAAO,EAAG0G,oBAI7ByB,UAAU,CACNuB,2BAAoBtK,IACtB0G,IADaA,QACNuB,QAAMmC,WAAYpK,IAEvBuK,6BAAsBvK,IACxB0G,IADeA,QACRuB,QAAMoC,cAAerK,KAI9BuJ,UAAU,CACdiB,qBAAsB,SAACtD,UACdA,EAAMM,IAAIsC,QAAO,SAACI,UAAOA,EAAGO,MAAM5J,WAE3C6J,cAAe,SAACxD,EAAOqC,OACfoB,EAAW,UACjBpB,EAAQiB,qBAAqBZ,SAAQ,SAACtC,OAC9BuC,EAAQvC,EAAMmD,OAAS,GAC7BE,EAASZ,WAATY,qBAAiBd,OAEZc,GAETC,kBAAmB,SAAC1D,UAAU,SAAA2D,UACvBA,GAAaC,MAAMC,QAAQF,GAGzB3D,EAAMM,IAAIsC,QAAO,SAAA5H,UAAK2I,EAASzE,SAASlE,EAAEuF,YAFxCP,EAAMM,oBAKJ,CACX2C,YAAY,EACZjD,MAAAA,QACAwB,UAAAA,YACAK,QAAAA,UACAQ,QAAAA,wBClDEtB,QAAQ,CACZ+C,YAAa,cACbC,eAAgB,kBAEZ/D,QAAQ,CACZM,IAAK,IAGDkB,0DACHT,QAAM+C,aAAc,SAAC9D,EAAOlH,GAC3BkH,EAAMM,IAAMxH,kCAEbiI,QAAMgD,gBAAiB,SAAC/D,EAAOhI,GAC9BgI,EAAMM,IAAMtI,mBAIV6J,UAAU,CACRmC,4BAAqBlL,IACzB0G,IADgBA,QACTuB,QAAM+C,YAAahL,IAEtBmL,+BAAwBnL,IAC5B0G,IADmBA,QACZuB,QAAMgD,eAAgBjL,KAI3BuJ,UAAU,CACd6B,cAAe,SAAClE,UACPA,EAAMM,oBAiBF,CACX2C,YAAY,EACZjD,MAAAA,QACAwB,UAAAA,YACAK,QAAAA,UACAQ,QAAAA,WClDG,SAAS8B,6BAA6BC,OAEvCC,EAAe,KACfC,EAAcC,OAAOC,wBACzBJ,EAAQ1B,SAAQ,SAAA+B,GACVA,EAAOC,SAAWJ,IACpBA,EAAcG,EAAOC,SACrBL,EAAeI,MAGZJ,EAGF,SAASM,YAAYC,UAClBtC,MAAMsC,EAAKhD,WCddiD,eAAeC,cAAcC,SAAOC,IAAAA,MAAOC,IAAAA,SAAUC,IAAAA,MAAOC,IAAAA,SAC7DC,EAAO,KAETA,EADEF,EACKhN,KAAKC,UAAU,CAAE+M,MAAAA,IACfC,EACFjN,KAAKC,UAAU,CACpBgN,SAAAA,EACAF,SAAAA,IAGK/M,KAAKC,UAAU,CACpB6M,MAAAA,EACAK,IAAKJ,QAGHK,QAAYC,MAAMR,EAAK,CAC3BS,OAAQ,OACRC,QAAS,gBACS,oBAElBL,KAAAA,IAEIpN,QAAasN,EAAII,UACnB1N,EAAKS,YACD,IAAIkN,MAAM3N,EAAKS,cAEhBT,EAAK4N,KAAKC,OAGZ,SAASC,oBAAoBC,EAASC,SACzB,SAAdA,YACQD,WACa,UAAdC,YACCD,YACa,YAAdC,YACCD,cAELA,EAGFlB,eAAeoB,aAAalB,EAAKmB,gBACpBX,MAAMR,EAAK,CAC3BS,OAAQ,MAERC,QAAS,gBACS,kDACWS,OAGpBR,OCjDN,SAASS,mBAAmBpB,UAC1B,IAAIqB,SAAQ,SAACC,OACZC,EAASC,SAASC,cAAc,UACtCF,EAAOG,IAAM1B,EACbuB,EAAOI,OAAS,WACdL,KAEFC,EAAOK,QAAU,WACfC,UAEFL,SAASnB,KAAKyB,OAAOP;;;;;;;;;;CCDzB,WAGE,IAAI5O,MAAQ,wBACRoP,OAA2B,iBAAXC,OAChB1N,KAAOyN,OAASC,OAAS,GACzB1N,KAAK2N,mBACPF,QAAS,GAEX,IAAIG,YAAcH,QAA0B,iBAAT1N,KAC/B8N,SAAW7N,KAAK8N,mBAAwC,iBAAZC,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,KACzGJ,QACF7N,KAAOJ,eACEgO,aACT5N,KAAOD,MAET,IAAImO,WAAalO,KAAKmO,qBAAqDC,OAAOC,QAE9EC,cAAgBtO,KAAKuO,wBAAiD,oBAAhBC,YACtDC,UAAY,mBAAmBC,MAAM,IACrCC,MAAQ,CAAC,IAAK,MAAO,SAAU,YAC/BC,MAAQ,CAAC,EAAG,EAAG,GAAI,IACnBC,aAAe,CAAC,MAAO,QAAS,SAAU,SAAU,cAAe,UACnEC,mBAAqB,mEAAmEJ,MAAM,IAE9FK,OAAS,GAAIC,QACjB,GAAIV,aAAc,CAChB,IAAIW,OAAS,IAAIT,YAAY,IAC7BQ,QAAU,IAAIE,WAAWD,QACzBF,OAAS,IAAII,YAAYF,SAGvBjP,KAAK8N,mBAAsBvD,MAAMC,UACnCD,MAAMC,QAAU,SAAU4E,GACxB,MAA+C,mBAAxCvP,OAAOkB,UAAUG,SAASM,KAAK4N,MAItCd,eAAiBtO,KAAKqP,gCAAmCb,YAAYc,SACvEd,YAAYc,OAAS,SAAUF,GAC7B,MAAsB,iBAARA,GAAoBA,EAAIH,QAAUG,EAAIH,OAAOM,cAAgBf,cA6D/E,IAAIgB,mBAAqB,SAAUC,GACjC,OAAO,SAAU/Q,GACf,OAAO,IAAIgR,KAAI,GAAMC,OAAOjR,GAAS+Q,OAwBrCG,aAAe,WACjB,IAAIzD,EAASqD,mBAAmB,OAC5B3B,UACF1B,EAAS0D,SAAS1D,IAEpBA,EAAO2D,OAAS,WACd,OAAO,IAAIJ,KAEbvD,EAAOwD,OAAS,SAAUjR,GACxB,OAAOyN,EAAO2D,SAASH,OAAOjR,IAEhC,IAAK,IAAIqR,EAAI,EAAGA,EAAIlB,aAAavO,SAAUyP,EAAG,CAC5C,IAAIrQ,EAAOmP,aAAakB,GACxB5D,EAAOzM,GAAQ8P,mBAAmB9P,GAEpC,OAAOyM,GAGL0D,SAAW,SAAU1D,QACvB,IAAI6D,OAASC,KAAK,qBACdC,OAASD,KAAK,4BACdE,WAAa,SAAUzR,GACzB,GAAuB,iBAAZA,EACT,OAAOsR,OAAOI,WAAW,OAAOT,OAAOjR,EAAS,QAAQ2R,OAAO,OAE/D,GAAI3R,MAAAA,EACF,MAAML,MAKV,OAJaK,EAAQ6Q,cAAgBf,cACjC9P,EAAU,IAAIwQ,WAAWxQ,IAGzB6L,MAAMC,QAAQ9L,IAAY8P,YAAYc,OAAO5Q,IAC/CA,EAAQ6Q,cAAgBW,OACjBF,OAAOI,WAAW,OAAOT,OAAO,IAAIO,OAAOxR,IAAU2R,OAAO,OAE5DlE,OAAOzN,IAGlB,OAAOyR,YAST,SAAST,IAAIY,GACX,GAAIA,EACFvB,OAAO,GAAKA,OAAO,IAAMA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GACxDA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GAC3CA,OAAO,GAAKA,OAAO,GAAKA,OAAO,IAAMA,OAAO,IAC5CA,OAAO,IAAMA,OAAO,IAAMA,OAAO,IAAMA,OAAO,IAAM,EACpD1P,KAAK0P,OAASA,OACd1P,KAAK2P,QAAUA,aAEf,GAAIV,aAAc,CAChB,IAAIW,EAAS,IAAIT,YAAY,IAC7BnP,KAAK2P,QAAU,IAAIE,WAAWD,GAC9B5P,KAAK0P,OAAS,IAAII,YAAYF,QAE9B5P,KAAK0P,OAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGnE1P,KAAKkR,GAAKlR,KAAKmR,GAAKnR,KAAKoR,GAAKpR,KAAKqR,GAAKrR,KAAKsR,MAAQtR,KAAKuR,MAAQvR,KAAKwR,OAAS,EAChFxR,KAAKyR,UAAYzR,KAAK0R,QAAS,EAC/B1R,KAAK2R,OAAQ,EAYftB,IAAI3O,UAAU4O,OAAS,SAAUjR,GAC/B,IAAIW,KAAKyR,UAAT,CAIA,IAAIG,EAAWvR,SAAchB,EAC7B,GAAa,WAATgB,EAAmB,CACrB,GAAa,WAATA,EAWF,MAAMrB,MAVN,GAAgB,OAAZK,EACF,MAAML,MACD,GAAIiQ,cAAgB5P,EAAQ6Q,cAAgBf,YACjD9P,EAAU,IAAIwQ,WAAWxQ,QACpB,KAAK6L,MAAMC,QAAQ9L,IACnB4P,cAAiBE,YAAYc,OAAO5Q,IACvC,MAAML,MAMZ4S,GAAY,EAKd,IAHA,IAAIC,EAAiBnB,EAAX1P,EAAQ,EAAMC,EAAS5B,EAAQ4B,OAAQyO,EAAS1P,KAAK0P,OAC3DC,EAAU3P,KAAK2P,QAEZ3O,EAAQC,GAAQ,CAUrB,GATIjB,KAAK0R,SACP1R,KAAK0R,QAAS,EACdhC,EAAO,GAAKA,EAAO,IACnBA,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC5CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC3CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAMA,EAAO,IAC5CA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAM,GAGlDkC,EACF,GAAI3C,aACF,IAAKyB,EAAI1Q,KAAKsR,MAAOtQ,EAAQC,GAAUyP,EAAI,KAAM1P,EAC/C2O,EAAQe,KAAOrR,EAAQ2B,QAGzB,IAAK0P,EAAI1Q,KAAKsR,MAAOtQ,EAAQC,GAAUyP,EAAI,KAAM1P,EAC/C0O,EAAOgB,GAAK,IAAMrR,EAAQ2B,IAAUuO,MAAY,EAANmB,UAI9C,GAAIzB,aACF,IAAKyB,EAAI1Q,KAAKsR,MAAOtQ,EAAQC,GAAUyP,EAAI,KAAM1P,GAC/C6Q,EAAOxS,EAAQyS,WAAW9Q,IACf,IACT2O,EAAQe,KAAOmB,EACNA,EAAO,MAChBlC,EAAQe,KAAO,IAAQmB,GAAQ,EAC/BlC,EAAQe,KAAO,IAAe,GAAPmB,GACdA,EAAO,OAAUA,GAAQ,OAClClC,EAAQe,KAAO,IAAQmB,GAAQ,GAC/BlC,EAAQe,KAAO,IAASmB,GAAQ,EAAK,GACrClC,EAAQe,KAAO,IAAe,GAAPmB,IAEvBA,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BxS,EAAQyS,aAAa9Q,IACjE2O,EAAQe,KAAO,IAAQmB,GAAQ,GAC/BlC,EAAQe,KAAO,IAASmB,GAAQ,GAAM,GACtClC,EAAQe,KAAO,IAASmB,GAAQ,EAAK,GACrClC,EAAQe,KAAO,IAAe,GAAPmB,QAI3B,IAAKnB,EAAI1Q,KAAKsR,MAAOtQ,EAAQC,GAAUyP,EAAI,KAAM1P,GAC/C6Q,EAAOxS,EAAQyS,WAAW9Q,IACf,IACT0O,EAAOgB,GAAK,IAAMmB,GAAQtC,MAAY,EAANmB,KACvBmB,EAAO,MAChBnC,EAAOgB,GAAK,KAAO,IAAQmB,GAAQ,IAAOtC,MAAY,EAANmB,KAChDhB,EAAOgB,GAAK,KAAO,IAAe,GAAPmB,IAAiBtC,MAAY,EAANmB,MACzCmB,EAAO,OAAUA,GAAQ,OAClCnC,EAAOgB,GAAK,KAAO,IAAQmB,GAAQ,KAAQtC,MAAY,EAANmB,KACjDhB,EAAOgB,GAAK,KAAO,IAASmB,GAAQ,EAAK,KAAUtC,MAAY,EAANmB,KACzDhB,EAAOgB,GAAK,KAAO,IAAe,GAAPmB,IAAiBtC,MAAY,EAANmB,OAElDmB,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BxS,EAAQyS,aAAa9Q,IACjE0O,EAAOgB,GAAK,KAAO,IAAQmB,GAAQ,KAAQtC,MAAY,EAANmB,KACjDhB,EAAOgB,GAAK,KAAO,IAASmB,GAAQ,GAAM,KAAUtC,MAAY,EAANmB,KAC1DhB,EAAOgB,GAAK,KAAO,IAASmB,GAAQ,EAAK,KAAUtC,MAAY,EAANmB,KACzDhB,EAAOgB,GAAK,KAAO,IAAe,GAAPmB,IAAiBtC,MAAY,EAANmB,MAK1D1Q,KAAK+R,cAAgBrB,EACrB1Q,KAAKuR,OAASb,EAAI1Q,KAAKsR,MACnBZ,GAAK,IACP1Q,KAAKsR,MAAQZ,EAAI,GACjB1Q,KAAKgS,OACLhS,KAAK0R,QAAS,GAEd1R,KAAKsR,MAAQZ,EAOjB,OAJI1Q,KAAKuR,MAAQ,aACfvR,KAAKwR,QAAUxR,KAAKuR,MAAQ,YAAc,EAC1CvR,KAAKuR,MAAQvR,KAAKuR,MAAQ,YAErBvR,OAGTqQ,IAAI3O,UAAUuQ,SAAW,WACvB,IAAIjS,KAAKyR,UAAT,CAGAzR,KAAKyR,WAAY,EACjB,IAAI/B,EAAS1P,KAAK0P,OAAQgB,EAAI1Q,KAAK+R,cACnCrC,EAAOgB,GAAK,IAAMpB,MAAU,EAAJoB,GACpBA,GAAK,KACF1Q,KAAK0R,QACR1R,KAAKgS,OAEPtC,EAAO,GAAKA,EAAO,IACnBA,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC5CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC3CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAMA,EAAO,IAC5CA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAM,GAEtDA,EAAO,IAAM1P,KAAKuR,OAAS,EAC3B7B,EAAO,IAAM1P,KAAKwR,QAAU,EAAIxR,KAAKuR,QAAU,GAC/CvR,KAAKgS,SAGP3B,IAAI3O,UAAUsQ,KAAO,WACnB,IAAIE,EAAGC,EAAGC,EAAGC,EAAGC,EAAIC,EAAI7C,EAAS1P,KAAK0P,OAElC1P,KAAK2R,MAQPQ,IADAA,IALAD,IADAA,EAAIxC,EAAO,GAAK,YACN,EAAIwC,IAAM,IAAM,WAAa,IAIvCE,IADAA,IAAM,WADNC,IADAA,IAAM,WAAiB,WAAJH,GAAkBxC,EAAO,GAAK,YACvC,GAAK2C,IAAM,IAAMH,GAAK,KACH,UAALA,IAAoBxC,EAAO,GAAK,aAC9C,GAAK0C,IAAM,IAAMC,GAAK,IACjBA,EAAIH,IAAOxC,EAAO,GAAK,aAC5B,GAAKyC,IAAM,IAAMC,GAAK,GAEhCF,EAAIlS,KAAKkR,GACTiB,EAAInS,KAAKmR,GACTiB,EAAIpS,KAAKoR,GASTe,IADAA,KALAD,IADAA,KADAG,EAAIrS,KAAKqR,IACEc,GAAKC,EAAIC,IAAO3C,EAAO,GAAK,YAC7B,EAAIwC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAO1C,EAAO,GAAK,YAC7B,GAAK2C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOzC,EAAO,GAAK,YAC7B,GAAK0C,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOxC,EAAO,GAAK,aAC7B,GAAKyC,IAAM,IAAMC,GAAK,GAUlCD,IADAA,KALAD,IADAA,IAAMG,EAAKF,GAAKC,EAAIC,IAAO3C,EAAO,GAAK,YAC7B,EAAIwC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAO1C,EAAO,GAAK,aAC7B,GAAK2C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOzC,EAAO,GAAK,aAC7B,GAAK0C,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOxC,EAAO,GAAK,WAC7B,GAAKyC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KALAD,IADAA,IAAMG,EAAKF,GAAKC,EAAIC,IAAO3C,EAAO,GAAK,aAC7B,EAAIwC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAO1C,EAAO,GAAK,aAC7B,GAAK2C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOzC,EAAO,IAAM,QAC9B,GAAK0C,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOxC,EAAO,IAAM,aAC9B,GAAKyC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KALAD,IADAA,IAAMG,EAAKF,GAAKC,EAAIC,IAAO3C,EAAO,IAAM,aAC9B,EAAIwC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAO1C,EAAO,IAAM,WAC9B,GAAK2C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOzC,EAAO,IAAM,aAC9B,GAAK0C,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOxC,EAAO,IAAM,aAC9B,GAAKyC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAO1C,EAAO,GAAK,YAC7B,EAAIwC,IAAM,IAAMC,GAAK,GACXA,IAAOzC,EAAO,GAAK,aAC7B,EAAI2C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOxC,EAAO,IAAM,YAC9B,GAAK0C,IAAM,IAAMC,GAAK,GACZA,IAAO3C,EAAO,GAAK,YAC7B,GAAKyC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAO1C,EAAO,GAAK,YAC7B,EAAIwC,IAAM,IAAMC,GAAK,GACXA,IAAOzC,EAAO,IAAM,WAC9B,EAAI2C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOxC,EAAO,IAAM,YAC9B,GAAK0C,IAAM,IAAMC,GAAK,GACZA,IAAO3C,EAAO,GAAK,YAC7B,GAAKyC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAO1C,EAAO,GAAK,YAC7B,EAAIwC,IAAM,IAAMC,GAAK,GACXA,IAAOzC,EAAO,IAAM,aAC9B,EAAI2C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOxC,EAAO,GAAK,YAC7B,GAAK0C,IAAM,IAAMC,GAAK,GACZA,IAAO3C,EAAO,GAAK,aAC7B,GAAKyC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAO1C,EAAO,IAAM,aAC9B,EAAIwC,IAAM,IAAMC,GAAK,GACXA,IAAOzC,EAAO,GAAK,WAC7B,EAAI2C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOxC,EAAO,GAAK,aAC7B,GAAK0C,IAAM,IAAMC,GAAK,GACZA,IAAO3C,EAAO,IAAM,aAC9B,GAAKyC,IAAM,IAAMC,GAAK,EAUhCD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK3C,EAAO,GAAK,SAClB,EAAIwC,IAAM,IAAMC,GAAK,IACfzC,EAAO,GAAK,aAClB,GAAK2C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKzC,EAAO,IAAM,aACnB,GAAK0C,IAAM,IAAMC,GAAK,IAChB3C,EAAO,IAAM,WACnB,GAAKyC,IAAM,GAAKC,GAAK,EAU/BD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK3C,EAAO,GAAK,aAClB,EAAIwC,IAAM,IAAMC,GAAK,IACfzC,EAAO,GAAK,aAClB,GAAK2C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKzC,EAAO,GAAK,YAClB,GAAK0C,IAAM,IAAMC,GAAK,IAChB3C,EAAO,IAAM,aACnB,GAAKyC,IAAM,GAAKC,GAAK,EAU/BD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK3C,EAAO,IAAM,YACnB,EAAIwC,IAAM,IAAMC,GAAK,IACfzC,EAAO,GAAK,YAClB,GAAK2C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKzC,EAAO,GAAK,YAClB,GAAK0C,IAAM,IAAMC,GAAK,IAChB3C,EAAO,GAAK,WAClB,GAAKyC,IAAM,GAAKC,GAAK,EAU/BD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK3C,EAAO,GAAK,YAClB,EAAIwC,IAAM,IAAMC,GAAK,IACfzC,EAAO,IAAM,YACnB,GAAK2C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKzC,EAAO,IAAM,YACnB,GAAK0C,IAAM,IAAMC,GAAK,IAChB3C,EAAO,GAAK,YAClB,GAAKyC,IAAM,GAAKC,GAAK,EAQ/BD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM3C,EAAO,GAAK,YACxB,EAAIwC,IAAM,IAAMC,GAAK,IACfC,IAAM1C,EAAO,GAAK,aACxB,GAAK2C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMzC,EAAO,IAAM,aACzB,GAAK0C,IAAM,IAAMC,GAAK,IAChBH,IAAMxC,EAAO,GAAK,WACxB,GAAKyC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM3C,EAAO,IAAM,aACzB,EAAIwC,IAAM,IAAMC,GAAK,IACfC,IAAM1C,EAAO,GAAK,aACxB,GAAK2C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMzC,EAAO,IAAM,UACzB,GAAK0C,IAAM,IAAMC,GAAK,IAChBH,IAAMxC,EAAO,GAAK,aACxB,GAAKyC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM3C,EAAO,GAAK,aACxB,EAAIwC,IAAM,IAAMC,GAAK,IACfC,IAAM1C,EAAO,IAAM,WACzB,GAAK2C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMzC,EAAO,GAAK,aACxB,GAAK0C,IAAM,IAAMC,GAAK,IAChBH,IAAMxC,EAAO,IAAM,aACzB,GAAKyC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM3C,EAAO,GAAK,YACxB,EAAIwC,IAAM,IAAMC,GAAK,IACfC,IAAM1C,EAAO,IAAM,aACzB,GAAK2C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMzC,EAAO,GAAK,YACxB,GAAK0C,IAAM,IAAMC,GAAK,IAChBH,IAAMxC,EAAO,GAAK,YACxB,GAAKyC,IAAM,IAAMC,GAAK,EAE5BpS,KAAK2R,OACP3R,KAAKkR,GAAKgB,EAAI,YAAc,EAC5BlS,KAAKmR,GAAKgB,EAAI,WAAa,EAC3BnS,KAAKoR,GAAKgB,EAAI,YAAc,EAC5BpS,KAAKqR,GAAKgB,EAAI,WAAa,EAC3BrS,KAAK2R,OAAQ,IAEb3R,KAAKkR,GAAKlR,KAAKkR,GAAKgB,GAAK,EACzBlS,KAAKmR,GAAKnR,KAAKmR,GAAKgB,GAAK,EACzBnS,KAAKoR,GAAKpR,KAAKoR,GAAKgB,GAAK,EACzBpS,KAAKqR,GAAKrR,KAAKqR,GAAKgB,GAAK,IAc7BhC,IAAI3O,UAAU8Q,IAAM,WAClBxS,KAAKiS,WAEL,IAAIf,EAAKlR,KAAKkR,GAAIC,EAAKnR,KAAKmR,GAAIC,EAAKpR,KAAKoR,GAAIC,EAAKrR,KAAKqR,GAExD,OAAOjC,UAAW8B,GAAM,EAAK,IAAQ9B,UAAe,GAAL8B,GAC7C9B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,EAAK,IACrD9B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,GAAM,IACtD9B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,GAAM,IACtD9B,UAAW+B,GAAM,EAAK,IAAQ/B,UAAe,GAAL+B,GACxC/B,UAAW+B,GAAM,GAAM,IAAQ/B,UAAW+B,GAAM,EAAK,IACrD/B,UAAW+B,GAAM,GAAM,IAAQ/B,UAAW+B,GAAM,GAAM,IACtD/B,UAAW+B,GAAM,GAAM,IAAQ/B,UAAW+B,GAAM,GAAM,IACtD/B,UAAWgC,GAAM,EAAK,IAAQhC,UAAe,GAALgC,GACxChC,UAAWgC,GAAM,GAAM,IAAQhC,UAAWgC,GAAM,EAAK,IACrDhC,UAAWgC,GAAM,GAAM,IAAQhC,UAAWgC,GAAM,GAAM,IACtDhC,UAAWgC,GAAM,GAAM,IAAQhC,UAAWgC,GAAM,GAAM,IACtDhC,UAAWiC,GAAM,EAAK,IAAQjC,UAAe,GAALiC,GACxCjC,UAAWiC,GAAM,GAAM,IAAQjC,UAAWiC,GAAM,EAAK,IACrDjC,UAAWiC,GAAM,GAAM,IAAQjC,UAAWiC,GAAM,GAAM,IACtDjC,UAAWiC,GAAM,GAAM,IAAQjC,UAAWiC,GAAM,GAAM,KAa1DhB,IAAI3O,UAAUG,SAAWwO,IAAI3O,UAAU8Q,IAYvCnC,IAAI3O,UAAUsP,OAAS,WACrBhR,KAAKiS,WAEL,IAAIf,EAAKlR,KAAKkR,GAAIC,EAAKnR,KAAKmR,GAAIC,EAAKpR,KAAKoR,GAAIC,EAAKrR,KAAKqR,GACxD,MAAO,CACA,IAALH,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,IACxD,IAALC,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,IACxD,IAALC,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,IACxD,IAALC,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,MAcjEhB,IAAI3O,UAAU+Q,MAAQpC,IAAI3O,UAAUsP,OAYpCX,IAAI3O,UAAUgR,YAAc,WAC1B1S,KAAKiS,WAEL,IAAIrC,EAAS,IAAIT,YAAY,IACzBO,EAAS,IAAII,YAAYF,GAK7B,OAJAF,EAAO,GAAK1P,KAAKkR,GACjBxB,EAAO,GAAK1P,KAAKmR,GACjBzB,EAAO,GAAK1P,KAAKoR,GACjB1B,EAAO,GAAK1P,KAAKqR,GACVzB,GAcTS,IAAI3O,UAAUkO,OAASS,IAAI3O,UAAUgR,YAYrCrC,IAAI3O,UAAUiR,OAAS,WAErB,IADA,IAAIC,EAAIC,EAAIC,EAAIC,EAAY,GAAIxB,EAAQvR,KAAKyS,QACpC/B,EAAI,EAAGA,EAAI,IAClBkC,EAAKrB,EAAMb,KACXmC,EAAKtB,EAAMb,KACXoC,EAAKvB,EAAMb,KACXqC,GAAatD,mBAAmBmD,IAAO,GACrCnD,mBAA0C,IAAtBmD,GAAM,EAAIC,IAAO,IACrCpD,mBAA0C,IAAtBoD,GAAM,EAAIC,IAAO,IACrCrD,mBAAwB,GAALqD,GAMvB,OAJAF,EAAKrB,EAAMb,GACXqC,GAAatD,mBAAmBmD,IAAO,GACrCnD,mBAAoBmD,GAAM,EAAK,IAC/B,MAIJ,IAAI5D,QAAUuB,eAEV1B,UACFE,eAAiBC,QAmBjBrO,KAAKqS,IAAMhE,QA1pBf,MCKMiE,eAAiB,CACrB5G,mEACA6G,eAAgB,CACdC,OAAQ,2BACRnH,SAAU,GAEZoH,SAAU,oDACVC,gBAAiB,mEACjB3H,QAASzM,eACTuN,MAAO,KACPc,UAAW,QACXgG,UAAU,EACVC,kBAAmB,IACnBC,qBAAsB,IACtBC,qBAAsB,EACtBC,QAAS,IACTC,iBAAkB,IAClBC,aAAc,IACdC,SAAU,QACVC,WAAY,CAAC,aACbC,SAAS,EACTpN,MAAO,KACPC,qBAAsB,gBACtBC,iBAAkB,YAClBmN,oBAAqB,SACrBC,WAAY,MAGVC,eAAiB,GACjBC,aAAe,IAAIC,IAEjBC,sCACQlV,yDAAU,mCACfA,yBACA8T,eACA9T,QAEAmV,iCACAnV,IAEAa,KAAKb,QAAQmO,gBACV,IAAIL,MAAM,wCAEb/N,OAAS,IAAIA,OAAOc,KAAKb,cACzBuM,QAAU,QACVK,OAAS,UACTwI,OAAS,UACTC,WAAY,OACZC,uBAAwB,OACxBC,qBAAsB,IAAI/U,MAAOuJ,eACjCyL,6BACAC,cAAgBT,kBAChBU,iBAAmB9Q,WAAS/D,KAAK8U,SAASC,KAAK/U,MAAOA,KAAKgV,iBAAiBzB,kBAAmB,CAClG/O,SAAS,EACTE,UAAU,SAEPuQ,oBAAsB,UACtBC,oBAAqB,OACrBC,iCACAC,4BACAC,kFAGP,kBACSrV,KAAK0U,2CAEd,gBACOY,KAAKlP,WAAW3H,OAAQ,CAC3B8W,OAAO,6CAGX,eACQC,EAAaxV,KAAKb,QAAQyH,sBAAwB,gBACnD5G,KAAKyV,qBAAqBD,UAG1BrW,QAAQwH,MAAM+O,eAAeF,EAAYG,uBACzCT,oBAAqB,uCAG5B,eACQM,EAAaxV,KAAKb,QAAQ0H,kBAAoB,YAC/C7G,KAAKyV,qBAAqBD,UAG1BrW,QAAQwH,MAAM+O,eAAeF,EAAYI,mBACzCV,oBAAqB,wCAG5B,eACQM,EAAaxV,KAAKb,QAAQ0W,mBAAqB,aAChD7V,KAAKyV,qBAAqBD,UAG1BrW,QAAQwH,MAAM+O,eAAeF,EAAYM,oBACzCZ,oBAAqB,uCAG5B,SAAqBM,OACX7O,EAAU3G,KAAKb,QAAfwH,cACHA,IAGDA,EAAMW,MAAMkO,IACd7O,EAAMoP,iBAAiBP,IAElB,wCAGT,gBACOR,iBAAmB,CACtBgB,WAAY,EACZvC,qBAAsBzT,KAAKb,QAAQsU,qBACnCF,kBAAmBvT,KAAKb,QAAQoU,kBAChC0C,qBAAsBjW,KAAKb,QAAQoU,kBACnC2C,qBAAsB,+BAI1B,gBACOC,4BACA3B,WAAY,OACZtV,OAAOY,IAAIsG,WAAWlI,QAAS8B,KAAKgV,sDAG3C,gBACOA,iBAAiBgB,WAAa,MAC/BI,EAAoBpW,KAAKgV,iBAAiBiB,0BACzCjB,iBAAiBzB,kBAAoB6C,OACrC7B,OAAO8B,GAAG9C,kBAAkB6C,QAC5B7B,OAAO8B,GAAG7C,qBAAqB4C,kCAGtC,SAAgB9W,QACTuV,iBAAiB,QAAQ,QACzBL,WAAY,OACZtV,OAAOY,IAAIsG,WAAWjI,cAAemB,2BAG5C,SAASgX,QACFpX,OAAOY,IAAIsG,WAAWpH,MAAOsX,qCAGpC,gBACOzB,iBAAiB,QAAO,QACxB3V,OAAOY,IAAIsG,WAAWxH,iBAAkBoB,KAAKgV,mDAGpD,gBACOH,iBAAiB,QAAO,QACxB3V,OAAOY,IAAIsG,WAAWhI,gBAAiB4B,KAAKgV,qDAGnD,mBACOR,WAAY,EACbxU,KAAKgV,iBAAiBgB,YAAchW,KAAKgV,iBAAiBvB,0BACvDoB,iBAAiB,QAAO,WAG3B7U,KAAKgV,iBAAiBzB,kBAAoBvT,KAAKgV,iBAAiBkB,qBAAsB,KACpFK,EAAWvW,KAAKgV,iBAAiBiB,qBAAuBjW,KAAKgV,iBAAiBgB,gBAC7EhB,iBAAiBzB,kBAAoBgD,OACrChC,OAAO8B,GAAG9C,kBAAkBgD,QAC5BhC,OAAO8B,GAAG7C,qBAAqB+C,QAEjCvB,iBAAiBgB,kBACjB9W,OAAOY,IAAIsG,WAAW5H,kBAAmBwB,KAAKgV,gDAGrD,SAAc9N,QACPsN,WAAY,OACZtV,OAAOY,IAAIsG,WAAW/H,WAAY6I,QAClC4N,SAAS,QAAQ,+BAGxB,SAAaxV,IACS,WAAhBkX,QAAOlX,IAAwC,IAAnBA,EAAKmX,YAIjCnX,GAAQU,KAAKwU,gBACVtV,OAAOY,IAAIsG,WAAWtH,0BACtB4V,qBAAsB,IAAI/U,MAAOuJ,gBALjCwN,wDAWTvK,eAAuB7M,GACjBA,EAAKqX,cACDlJ,mBAAmB,uEAEvBnO,EAAKsX,WACF7K,OAAS,CACZC,SAAU,EACVmH,OAAQ7T,EAAKsX,IAAIrV,QAAQ,WAAY,MAGrCjC,EAAKuX,SAAW3L,MAAMC,QAAQ7L,EAAKuX,gBAChCnL,QAAUpM,EAAKuX,QAAQC,KAAI,SAACzK,EAAKrL,SAC7B,CACLgL,SAAUhL,EACVmS,OAAQ9G,EAAI9K,QAAQ,WAAY,SAIlCjC,EAAKyX,aACF5X,QAAQqN,MAAQlN,EAAKyX,WACrBvK,MAAQlN,EAAKyX,YACZ/W,KAAK8U,SAAS,WAAW,IAE7BxV,EAAK0X,mBACF7X,QAAQ8X,YAAc3X,EAAK0X,aAE9B1X,EAAK4X,oBACF/X,QAAQoO,aAAejO,EAAK4X,kBAC5BC,wDAKT,sBACQjL,EAAO,IAAIvM,KAAKK,KAAKb,QAAQ8X,gBAC9BhL,YAAYC,QAGXwH,EAAUxH,EAAKhD,WAAY,IAAIvJ,MAAOuJ,UAAY,IACxDhE,YAAWiH,qBACLgB,EAAS,KACPP,QAAYW,aAAa6J,EAAKjY,QAAQkU,gBAAiB+D,EAAKjY,QAAQoO,iBACvEX,EAAIM,YACLC,EAASP,EAAIM,KAAKC,aACLiK,EAAKC,iBAAiBlK,SAE/B,IAAIF,iCACTyG,gCAGL,SAAa4D,UACNA,EAAOhY,KAKL,CACLiH,KAHS+Q,EAAOhY,KAAK,GAIrBA,KAHSgY,EAAOhY,KAAK,IAHd,2BAUX6M,qBAAeJ,yDAAS,UAAWwL,0DAC7BC,EAAkB,QACP,YAAXzL,EACFyL,EAAkBxX,KAAKyX,0BAClB,GAAe,SAAX1L,EACTyL,EAAkBxX,KAAK0X,+BAClB,CAAA,GAAe,SAAX3L,QAGH,IAAIkB,wEAAiElB,sCAF3EyL,EAAkBxX,KAAK2X,yBAIpBH,SACEzL,OAAS/L,KAAKyX,2BAEhBf,6BACAkB,yBACAC,sBACA1B,uBACDoB,SAGEvX,KAAK8X,MAAM9X,KAAKb,QAAQmO,qCAGhC,eACOtN,KAAKyU,4BACF,IAAIxH,MAAM,uGAIpB,eACM8K,EAAS/X,KAAK+L,OAAOoH,OACrBU,EAAW7T,KAAKb,QAAQ0U,SACxBxH,YAASwH,gBAAckE,QACtB7Y,OAAOY,IAAI,kBAAmBuM,QAC9B2L,0BACC7Y,EAAU,CACd8Y,cAAc,EACdC,mBAAmB,EACnBnE,SAAS,EACTD,WAAY,CAAC,aACb1U,OAAO,GAELY,KAAKwM,QACPrN,EAAQgZ,MAAQ,CACd3L,MAAOxM,KAAKwM,aAGX+H,OAASlG,OAAOgI,GAAGhK,EAAKlN,GAI7B+U,eAAe/J,KAAKnK,KAAKuU,aACpBE,uBAAwB,mCAE/B,2BACOF,OACJ6D,GAAGhS,WAAW5H,mBAAmB,SAAAc,UAAQ+Y,EAAKC,oBAAoBhZ,MAClE8Y,GAAGhS,WAAWxH,kBAAkB,SAAAU,UAAQ+Y,EAAKE,mBAAmBjZ,MAChE8Y,GAAGhS,WAAWlI,SAAS,SAAAoB,UAAQ+Y,EAAKG,WAAWlZ,MAC/C8Y,GAAGhS,WAAWhI,iBAAkB,SAAAkB,UAAQ+Y,EAAKI,kBAAkBnZ,MAC/D8Y,GAAGhS,WAAWjI,eAAe,SAAAmB,UAAQ+Y,EAAKK,gBAAgBpZ,MAC1D8Y,GAAGhS,WAAWzH,iBAAiB,SAAAW,UAAQ+Y,EAAKC,oBAAoBhZ,MAChE8Y,GAAGhS,WAAWpH,OAAO,SAAAM,UAAQ+Y,EAAKM,SAASrZ,MAC3C8Y,GAAGhS,WAAW/H,YAAY,SAAAiB,UAAQ+Y,EAAKO,cAActZ,WACjDiV,OAAOsE,SAAW7Y,KAAK8Y,SAAS/D,KAAK/U,WACrCuU,OAAOwE,QAAU/Y,KAAK8Y,SAAS/D,KAAK/U,oCAG3C,sBACMA,KAAKgZ,mBACPC,cAAcjZ,KAAKgZ,mBAGjBhZ,KAAK4T,cACPqF,cAAejZ,KAAK4T,mBAEjBoF,kBAAoBE,aAAY/M,qBAC7BzM,GAAM,IAAIC,MAAOuJ,UACjBiQ,EAAwC,EAAhCC,EAAKja,QAAQwU,iBAEvBjU,EAAM0Z,EAAKC,wBAA0BF,QACjCC,EAAKtE,SAAS,QAAQ,GAGzBsE,EAAK7E,OAIN7U,EAAM0Z,EAAKC,wBAA0BD,EAAKja,QAAQwU,kBACpDyF,EAAK9D,KAAKlP,WAAWvH,WAAYua,EAAKja,QAAQqN,OAJ9C4M,EAAK1C,0BAQN1W,KAAKb,QAAQwU,oDAOlB,eACM5H,EAAS,YACT/L,KAAK0L,QAAQzK,SACf8K,EAAS/L,KAAK0L,QAAQ,SAEnBK,OAASA,EACT/L,KAAK+L,cACHA,OAAS/L,KAAKb,QAAQ+T,gBAEtBlT,KAAK+L,+CAGd,eACMuN,EAAwBtZ,KAAK+L,OAAOC,iBACnC9M,OAAOY,iDACRwZ,IAA0BtZ,KAAK0L,QAAQzK,OAAS,SAC3CjB,KAAK2X,6BAEV4B,EAAqBD,EAAwB,EAC7CE,EAAaxZ,KAAK0L,QAAQ+N,MAAK,SAAA1N,UAAUA,EAAOC,WAAauN,YAC5DC,IACHA,EAAaxZ,KAAK2X,0BAKhB3X,KAAK+L,OAAOoH,SAAWqG,EAAWrG,aAC/BpH,OAASyN,EACPxZ,KAAK+L,cAET7M,OAAOY,wDAAyDE,KAAK+L,QACnE,mDAGT,gBACO7M,OAAOY,iDAAkD,8BAC1D4Z,EAAoBjO,6BAA6BzL,KAAK0L,gBACrD1L,KAAK+L,OAIN/L,KAAK+L,QAAU2N,EAAkBvG,SAAWnT,KAAK+L,OAAOoH,aACrDpH,OAAS2N,OACTxa,OAAOY,iDAAkDE,KAAK+L,QAC5D/L,KAAK+L,QAEP,WARAA,OAAS2N,EACP1Z,KAAK+L,mCAUhBI,iBAE2C,WAArCnM,KAAKb,QAAQ6U,qBAAoChU,KAAKsU,gBAAgB5I,SAAWR,MAAMC,QAAQnL,KAAKsU,gBAAgB5I,UAAY1L,KAAKsU,gBAAgB5I,QAAQzK,OAAS,SACnKyK,QAAU1L,KAAKsU,gBAAgB5I,iCAIxC,SAAS4L,mBACFA,EAAOhY,UAGRqa,EAAM3Z,KAAK4Z,aAAatC,QACvBpY,OAAOY,2BAAoB6Z,EAAIpT,MAAQoT,QACvCjF,qBAAsB,IAAI/U,MAAOuJ,eACjC0L,cAAc5K,SAAQ,SAAC6P,EAAUC,IAClB,MAAdA,GAEOH,EAAIpT,OAASuT,IADtBD,EAASF,UAiBPI,wBAXH3T,WAAWtH,oBAAsBkB,KAAKga,gCACtC5T,WAAWzI,eAAiBqC,KAAKqX,oCACjCjR,WAAWpI,kBAAoBgC,KAAKia,2BACpC7T,WAAWvI,eAAiBmC,KAAKia,2BACjC7T,WAAWtI,gBAAkBkC,KAAKia,2BAClC7T,WAAW9I,cAAe,WACpB4c,EAAK1F,WACR0F,EAAK1B,mBAIwBmB,EAAIpT,MACnCwT,GAAwC,mBAAjBA,GACzBA,EAAa5X,KAAKnC,KAAM2Z,EAAIra,MAE1BU,KAAKkV,oBACPiF,0BACEzT,UAAWiT,GACR3Z,KAAKb,+BASdgN,wBACMnM,KAAKyU,wBAGLzU,KAAKuU,aACFe,KAAKlP,WAAWrH,aAEjBiB,KAAKoa,kBACLpa,KAAKqa,wBACLra,KAAK8X,MAAM9X,KAAKb,QAAQmO,iBACxBtN,KAAKsa,gBARF,0BAgBXnO,eAAeK,QACRrN,QAAQqN,MAAQA,OAChB+N,mBACCva,KAAKwa,0CAMb,WACEtG,eAAelK,SAAQ,SAAAyQ,GACrBA,EAAWC,QACXD,EAAWF,gBAEbrG,eAAiB,GACblU,KAAKuU,cACFA,OAAOgG,kBACPhG,OAAOmG,aACPnG,OAAS,gCAOlB,gBACOK,cAAgB,IAAIR,SACpB4D,wCAQP,SAAG8B,EAAWD,QACPjF,cAAc+F,IAAIb,EAAWD,QAC7Be,iCASP,SAAKd,OAAWxa,yDAAO,QAChBsb,kBACA1b,OAAOY,sBAAega,GAAaxa,QACnCiV,OAAOe,KAAKwE,EAAWxa,yBAO9B,eAAOiW,kEACAD,KAAKlP,WAAW3H,OAAQ,CAAE8W,MAAAA,iCAGjCpJ,eAAoBE,OACZwO,EAAS7a,KAAKb,QAAQkN,IACtByO,EAAc9a,KAAKb,QAAQ6U,4BAE1B3H,cAGAlN,QAAQkN,IAAMA,OACdlN,QAAQ6U,oBAAsB,eAC7BhU,KAAKwa,OACX,MAAOlE,QACFqC,SAASrC,QACTnX,QAAQkN,IAAMwO,OACd1b,QAAQ6U,oBAAsB8G,QAC7B9a,KAAKwa,iCAIf,eACUlN,EAActN,KAAKb,QAAnBmO,kBACHd,MAAQxM,KAAKb,QAAQqN,MACR,UAAdc,IACGtN,KAAKwM,YACF,IAAIS,MAAM,2FAItB,kBACSoB,OAAO0M,eAAe9Z,QAEzB+Z,aAAaC,QAAQ,oBAAqBtb,KAAKD,OAEjD2O,OAAO6M,iBAAiB,WAAW,SAAC5U,MAEjB,qBAAbA,EAAM6U,IAERH,aAAaC,QAAQ,iBAAkBzb,KAAKC,UAAU4O,OAAO0M,iBAC7DC,aAAaI,WAAW,uBACnB,GAAiB,kBAAb9U,EAAM6U,MAA4BJ,eAAe9Z,OAAQ,KAE9D3B,EAAOE,KAAK6b,MAAM/U,EAAMgV,cAEvB,IAAIH,KAAO7b,EACd+O,OAAO0M,eAAeE,QAAQE,EAAK7b,EAAK6b,QAIvC,IAAIzN,SAAQ,SAAAC,UAAWzI,WAAYyI,EAAU,6BAQxD,sBAAMtN,yDAAO,QAEPkb,EAAU,CACZ/O,MAAOxM,KAAKb,QAAQqN,MACpBF,MAAOtM,KAAKb,QAAQmN,MACpBG,SAAUzM,KAAKb,QAAQsN,SACvBF,SAAUvM,KAAKb,QAAQoN,UAErB4O,EAAMnI,IAAIxT,KAAKC,UAAU8b,IACvBC,EAAQ,WACVxb,KAAKiV,oBAAsBuG,GAAQ,IAAI7b,MAAOuJ,UACzCwE,QAAQC,gBAEZsH,qBAAsB,IAAItV,MAAOuJ,UAC/B,IAAIwE,SAAQvB,eAAOwB,EAASO,WAE3BuN,EAAepN,OAAO0M,eAAeW,QAAQP,MAC9CM,SACDA,EAAejc,KAAK6b,MAAMI,GAC1BE,EAAKzc,OAAOY,IAAI,wBAAyB2b,SACnCE,EAAKtE,iBAAiBoE,GACrB9N,EAAQ8N,GAElB,MAAMnF,GACLqF,EAAKzc,OAAOY,IAAI,2BAA2BwW,WAGvCjK,EAAMe,oBAAoBuO,EAAKxc,QAAQiU,SAAU/S,GAC/CuM,QAAYR,cAAcC,EAAIkP,SAC9BI,EAAKtE,iBAAiBzK,GAE5ByB,OAAO0M,eAAeE,QAAQE,EAAK3b,KAAKC,UAAUmN,IAElDe,EAAQf,GACR,MAAO0J,GACPqF,EAAKjQ,QAAUiQ,EAAKrH,gBAAgB5I,SAAWzM,eAC/CiP,EAAOoI,uBCtnBO,oBAAXjI,SAETA,OAAOgG,UAAYuH"} \ No newline at end of file diff --git a/src/sdk.js b/src/sdk.js index 5dd9b83d..3d175204 100644 --- a/src/sdk.js +++ b/src/sdk.js @@ -5,6 +5,7 @@ import debounce from 'lodash/debounce' import handleStoreEvents from './store/handleStoreEvents' import extensionsModule from './store/extensions' import queuesModule from './store/queues' +import dialersModule from './store/dialers' import { getServerWithHighestPriority, isValidDate } from './utils'; import { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin'; import { loadExternalScript } from './utils/loadExternalScript' @@ -71,6 +72,7 @@ class EventsSDK { this._handleLocalEvents = false; this._registerExtensionsModule(); this._registerQueueModule(); + this._registerDialerModule(); } getLastEventTimestamp() { @@ -99,6 +101,15 @@ class EventsSDK { this._handleLocalEvents = true } + _registerDialerModule() { + const moduleName = this.options.dialersModuleName || 'sdkDialers' + if (!this._validateStoreModule(moduleName)) { + return + } + this.options.store.registerModule(moduleName, dialersModule) + this._handleLocalEvents = true + } + _validateStoreModule(moduleName) { const { store } = this.options if (!store) { diff --git a/src/store/dialers.js b/src/store/dialers.js new file mode 100644 index 00000000..acd65e45 --- /dev/null +++ b/src/store/dialers.js @@ -0,0 +1,52 @@ +const types = { + SET_DIALERS: 'SET_DIALERS', + UPDATE_DIALERS: 'UPDATE_DIALERS', +} +const state = { + all: [], +} + +const mutations = { + [types.SET_DIALERS]: (state, value) => { + state.all = value + }, + [types.UPDATE_DIALERS]: (state, data) => { + state.all = data + } +} + +const actions = { + async setDialers({commit}, value) { + commit(types.SET_DIALERS, value) + }, + async updateDialers({commit}, value) { + commit(types.UPDATE_DIALERS, value) + } +} + +const getters = { + getAllDialers: (state) => { + return state.all + } + // allQueueCalls: (state, getters) => { + // const allCalls = [] + // getters.queueWithActiveCalls.forEach((queue) => { + // const calls = queue.Calls || [] + // allCalls.push(...calls) + // }) + // return allCalls + // }, + // filterQueuesByIds: (state) => queueIds => { + // if (!queueIds || !Array.isArray(queueIds)) { + // return state.all + // } + // return state.all.filter(e => queueIds.includes(e.QueueID)) + // } +} +export default { + namespaced: true, + state, + mutations, + actions, + getters, +} From bd351ea89c89756e1795e58e85361ca6831ce9e7 Mon Sep 17 00:00:00 2001 From: OrtZz Date: Mon, 14 Mar 2022 16:44:17 +0200 Subject: [PATCH 03/27] changed: npm version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dc487016..a720c65b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "voicenter-events-sdk", - "version": "0.8.5", + "version": "0.8.6", "scripts": { "serve": "npm run docs", "build": "bili", From 90258290c347e21f237f97658bcabc268ca6cd5b Mon Sep 17 00:00:00 2001 From: OrtZz Date: Mon, 14 Mar 2022 16:59:41 +0200 Subject: [PATCH 04/27] updated: default config --- dist/voicenter-events-sdk.cjs.js | 1 + dist/voicenter-events-sdk.esm.js | 1 + dist/voicenter-events-sdk.umd.js | 2 +- dist/voicenter-events-sdk.umd.js.map | 2 +- src/sdk.js | 1 + 5 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js index 094f3a3c..61cd81ad 100644 --- a/dist/voicenter-events-sdk.cjs.js +++ b/dist/voicenter-events-sdk.cjs.js @@ -631,6 +631,7 @@ var defaultOptions = { store: null, extensionsModuleName: 'sdkExtensions', queuesModuleName: 'sdkQueues', + dialersModuleName: 'sdkDialers', serverFetchStrategy: 'remote', // get servers from external url options: remote | static serverType: null // can be 1 or 2. 2 is used for chrome extension diff --git a/dist/voicenter-events-sdk.esm.js b/dist/voicenter-events-sdk.esm.js index ccb4b5ee..ef9f746f 100644 --- a/dist/voicenter-events-sdk.esm.js +++ b/dist/voicenter-events-sdk.esm.js @@ -627,6 +627,7 @@ var defaultOptions = { store: null, extensionsModuleName: 'sdkExtensions', queuesModuleName: 'sdkQueues', + dialersModuleName: 'sdkDialers', serverFetchStrategy: 'remote', // get servers from external url options: remote | static serverType: null // can be 1 or 2. 2 is used for chrome extension diff --git a/dist/voicenter-events-sdk.umd.js b/dist/voicenter-events-sdk.umd.js index a47310b2..985c9772 100644 --- a/dist/voicenter-events-sdk.umd.js +++ b/dist/voicenter-events-sdk.umd.js @@ -8,5 +8,5 @@ * @copyright Chen, Yi-Cyuan 2014-2017 * @license MIT */ -!function(){var ERROR="input is invalid type",WINDOW="object"==typeof window,root=WINDOW?window:{};root.JS_MD5_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&"object"==typeof self,NODE_JS=!root.JS_MD5_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS?root=commonjsGlobal:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_MD5_NO_COMMON_JS&&module.exports,ARRAY_BUFFER=!root.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[128,32768,8388608,-2147483648],SHIFT=[0,8,16,24],OUTPUT_TYPES=["hex","array","digest","buffer","arrayBuffer","base64"],BASE64_ENCODE_CHAR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),blocks=[],buffer8;if(ARRAY_BUFFER){var buffer=new ArrayBuffer(68);buffer8=new Uint8Array(buffer),blocks=new Uint32Array(buffer)}!root.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!ARRAY_BUFFER||!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e){return function(t){return new Md5(!0).update(t)[e]()}},createMethod=function(){var e=createOutputMethod("hex");NODE_JS&&(e=nodeWrap(e)),e.create=function(){return new Md5},e.update=function(t){return e.create().update(t)};for(var t=0;t>2]|=e[r]<>6,c[i++]=128|63&o):o<55296||o>=57344?(c[i++]=224|o>>12,c[i++]=128|o>>6&63,c[i++]=128|63&o):(o=65536+((1023&o)<<10|1023&e.charCodeAt(++r)),c[i++]=240|o>>18,c[i++]=128|o>>12&63,c[i++]=128|o>>6&63,c[i++]=128|63&o);else for(i=this.start;r>2]|=o<>2]|=(192|o>>6)<>2]|=(128|63&o)<=57344?(a[i>>2]|=(224|o>>12)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<>2]|=(240|o>>18)<>2]|=(128|o>>12&63)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<=64?(this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,o,i,r,s=this.blocks;this.first?t=((t=((e=((e=s[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(o=((o=(-1732584194^2004318071&e)+s[1]-117830708)<<12|o>>>20)+e<<0)&(-271733879^e))+s[2]-1126478375)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((o=this.h3)^t&(n^o))+s[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[1]-389564586)<<12|o>>>20)+e<<0)&(e^t))+s[2]+606105819)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(o^t&(n^o))+s[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[5]+1200080426)<<12|o>>>20)+e<<0)&(e^t))+s[6]-1473231341)<<17|n>>>15)+o<<0)&(o^e))+s[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[9]-1958414417)<<12|o>>>20)+e<<0)&(e^t))+s[10]-42063)<<17|n>>>15)+o<<0)&(o^e))+s[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[13]-40341101)<<12|o>>>20)+e<<0)&(e^t))+s[14]-1502002290)<<17|n>>>15)+o<<0)&(o^e))+s[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[1]-165796510)<<5|e>>>27)+t<<0)^t))+s[6]-1069501632)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[11]+643717713)<<14|n>>>18)+o<<0)^o))+s[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[5]-701558691)<<5|e>>>27)+t<<0)^t))+s[10]+38016083)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[15]-660478335)<<14|n>>>18)+o<<0)^o))+s[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[9]+568446438)<<5|e>>>27)+t<<0)^t))+s[14]-1019803690)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[3]-187363961)<<14|n>>>18)+o<<0)^o))+s[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[13]-1444681467)<<5|e>>>27)+t<<0)^t))+s[2]-51403784)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[7]+1735328473)<<14|n>>>18)+o<<0)^o))+s[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[5]-378558)<<4|e>>>28)+t<<0))+s[8]-2022574463)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[11]+1839030562)<<16|n>>>16)+o<<0))+s[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[1]-1530992060)<<4|e>>>28)+t<<0))+s[4]+1272893353)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[7]-155497632)<<16|n>>>16)+o<<0))+s[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[13]+681279174)<<4|e>>>28)+t<<0))+s[0]-358537222)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[3]-722521979)<<16|n>>>16)+o<<0))+s[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[9]-640364487)<<4|e>>>28)+t<<0))+s[12]-421815835)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[15]+530742520)<<16|n>>>16)+o<<0))+s[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[0]-198630844)<<6|e>>>26)+t<<0)|~n))+s[7]+1126891415)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[14]-1416354905)<<15|n>>>17)+o<<0)|~e))+s[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+s[3]-1894986606)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[10]-1051523)<<15|n>>>17)+o<<0)|~e))+s[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+s[15]-30611744)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[6]-1560198380)<<15|n>>>17)+o<<0)|~e))+s[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[4]-145523070)<<6|e>>>26)+t<<0)|~n))+s[11]-1120210379)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[2]+718787259)<<15|n>>>17)+o<<0)|~e))+s[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=o+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+o<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[15&o]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return[255&e,e>>8&255,e>>16&255,e>>24&255,255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,o="",i=this.array(),r=0;r<15;)e=i[r++],t=i[r++],n=i[r++],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=i[r],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:root.md5=exports}()})),defaultOptions={url:"https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls",fallbackServer:{Domain:"monitor5.voicenter.co.il",Priority:0},loginUrl:"https://loginapi.voicenter.co.il/monitorAPI/Login",refreshTokenUrl:"https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken",servers:defaultServers,token:null,loginType:"token",forceNew:!0,reconnectionDelay:1e4,reconnectionDelayMax:1e4,maxReconnectAttempts:2,timeout:1e4,keepAliveTimeout:6e4,idleInterval:3e5,protocol:"https",transports:["websocket"],upgrade:!1,store:null,extensionsModuleName:"sdkExtensions",queuesModuleName:"sdkQueues",serverFetchStrategy:"remote",serverType:null},allConnections=[],listenersMap=new Map,EventsSDK=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(_classCallCheck(this,e),this.options=Object.assign({},defaultOptions,t),this.argumentOptions=Object.assign({},t),!this.options.loginType)throw new Error("A login type should be provided");this.Logger=new Logger(this.options),this.servers=[],this.server=null,this.socket=null,this.connected=!1,this.connectionEstablished=!1,this._lastEventTimestamp=(new Date).getTime(),this._initReconnectOptions(),this._listenersMap=listenersMap,this._retryConnection=debounce_1(this._connect.bind(this),this.reconnectOptions.reconnectionDelay,{leading:!0,trailing:!1}),this._lastLoginTimestamp=null,this._handleLocalEvents=!1,this._registerExtensionsModule(),this._registerQueueModule(),this._registerDialerModule()}return _createClass(e,[{key:"getLastEventTimestamp",value:function(){return this._lastEventTimestamp}},{key:"_reSync",value:function(){this.emit(eventTypes.RESYNC,{cache:!1})}},{key:"_registerExtensionsModule",value:function(){var e=this.options.extensionsModuleName||"sdkExtensions";this._validateStoreModule(e)&&(this.options.store.registerModule(e,extensionsModule),this._handleLocalEvents=!0)}},{key:"_registerQueueModule",value:function(){var e=this.options.queuesModuleName||"sdkQueues";this._validateStoreModule(e)&&(this.options.store.registerModule(e,queuesModule),this._handleLocalEvents=!0)}},{key:"_registerDialerModule",value:function(){var e=this.options.dialersModuleName||"sdkDialers";this._validateStoreModule(e)&&(this.options.store.registerModule(e,dialersModule),this._handleLocalEvents=!0)}},{key:"_validateStoreModule",value:function(e){var t=this.options.store;return!!t&&(t.state[e]&&t.unregisterModule(e),!0)}},{key:"_initReconnectOptions",value:function(){this.reconnectOptions={retryCount:1,maxReconnectAttempts:this.options.maxReconnectAttempts,reconnectionDelay:this.options.reconnectionDelay,minReconnectionDelay:this.options.reconnectionDelay,maxReconnectionDelay:3e5}}},{key:"_onConnect",value:function(){this._initReconnectDelays(),this.connected=!0,this.Logger.log(eventTypes.CONNECT,this.reconnectOptions)}},{key:"_initReconnectDelays",value:function(){this.reconnectOptions.retryCount=1;var e=this.reconnectOptions.minReconnectionDelay;this.reconnectOptions.reconnectionDelay=e,this.socket.io.reconnectionDelay(e),this.socket.io.reconnectionDelayMax(e)}},{key:"_onConnectError",value:function(e){this._retryConnection("next",!0),this.connected=!1,this.Logger.log(eventTypes.CONNECT_ERROR,e)}},{key:"_onError",value:function(e){this.Logger.log(eventTypes.ERROR,e)}},{key:"_onReconnectFailed",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.RECONNECT_FAILED,this.reconnectOptions)}},{key:"_onConnectTimeout",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.CONNECT_TIMEOUT,this.reconnectOptions)}},{key:"_onReconnectAttempt",value:function(){if(this.connected=!1,this.reconnectOptions.retryCount>=this.reconnectOptions.maxReconnectAttempts)this._retryConnection("next",!0);else{if(this.reconnectOptions.reconnectionDelay0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=null;if("default"===e)n=this._findCurrentServer();else if("next"===e)n=this._findNextAvailableServer();else{if("prev"!==e)throw new Error("Incorrect 'server' parameter passed to connect function ".concat(e,". Should be 'default' or 'next'"));n=this._findMaxPriorityServer()}n||(this.server=this._findCurrentServer()),this._initSocketConnection(),this._initSocketEvents(),this._initKeepAlive(),this._initReconnectDelays(),t||await this.login(this.options.loginType)}},{key:"_checkInit",value:function(){if(!this.connectionEstablished)throw new Error('Make sure you call "sdk.init()" before doing other operations.')}},{key:"_initSocketConnection",value:function(){var e=this.server.Domain,t=this.options.protocol,n="".concat(t,"://").concat(e);this.Logger.log("Connecting to..",n),this.closeAllConnections();var o={reconnection:!1,perMessageDeflate:!1,upgrade:!1,transports:["websocket"],debug:!1};this.token&&(o.query={token:this.token}),this.socket=window.io(n,o),allConnections.push(this.socket),this.connectionEstablished=!0}},{key:"_initSocketEvents",value:function(){var e=this;this.socket.on(eventTypes.RECONNECT_ATTEMPT,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.RECONNECT_FAILED,(function(t){return e._onReconnectFailed(t)})).on(eventTypes.CONNECT,(function(t){return e._onConnect(t)})).on(eventTypes.CONNECT_TIMEOUT,(function(t){return e._onConnectTimeout(t)})).on(eventTypes.CONNECT_ERROR,(function(t){return e._onConnectError(t)})).on(eventTypes.RECONNECT_ERROR,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.ERROR,(function(t){return e._onError(t)})).on(eventTypes.DISCONNECT,(function(t){return e._onDisconnect(t)})),this.socket.onpacket=this._onEvent.bind(this),this.socket.onevent=this._onEvent.bind(this)}},{key:"_initKeepAlive",value:function(){var e=this;this.keepAliveInterval&&clearInterval(this.keepAliveInterval),this.idleInterval&&clearInterval(this.idleInterval),this.keepAliveInterval=setInterval((async function(){var t=(new Date).getTime(),n=2*e.options.keepAliveTimeout;t>e.getLastEventTimestamp()+n?await e._connect("next",!0):e.socket?t>e.getLastEventTimestamp()+e.options.keepAliveTimeout&&e.emit(eventTypes.KEEP_ALIVE,e.options.token):e._initSocketConnection()}),this.options.keepAliveTimeout)}},{key:"_findCurrentServer",value:function(){var e=null;return this.servers.length&&(e=this.servers[0]),this.server=e,this.server||(this.server=this.options.fallbackServer),this.server}},{key:"_findNextAvailableServer",value:function(){var e=this.server.Priority;if(this.Logger.log("Failover -> Trying to find another server"),e===this.servers.length-1)return this._findMaxPriorityServer();var t=e+1,n=this.servers.find((function(e){return e.Priority===t}));return n||(n=this._findMaxPriorityServer())?this.server.Domain!==n.Domain?(this.server=n,this.server):(this.Logger.log("Failover -> Found new server. Connecting to it...",this.server),null):void 0}},{key:"_findMaxPriorityServer",value:function(){this.Logger.log("Fallback -> Trying to find previous server","_findMaxPriorityServer");var e=getServerWithHighestPriority(this.servers);return this.server?this.server&&e.Domain!==this.server.Domain?(this.server=e,this.Logger.log("Fallback -> Trying to find previous server",this.server),this.server):null:(this.server=e,this.server)}},{key:"_getServers",value:async function(){"static"===this.options.serverFetchStrategy&&this.argumentOptions.servers&&Array.isArray(this.argumentOptions.servers)&&this.argumentOptions.servers.length>1&&(this.servers=this.argumentOptions.servers)}},{key:"_onEvent",value:function(e){var t,n=this;if(e.data){var o=this._parsePacket(e);this.Logger.log("New event -> ".concat(o.name),o),this._lastEventTimestamp=(new Date).getTime(),this._listenersMap.forEach((function(e,t){("*"===t||o.name===t)&&e(o)}));var i=(_defineProperty(t={},eventTypes.KEEP_ALIVE_RESPONSE,this._onKeepAlive),_defineProperty(t,eventTypes.LOGIN_RESPONSE,this._onLoginResponse),_defineProperty(t,eventTypes.EXTENSION_UPDATED,this._reSync),_defineProperty(t,eventTypes.QUEUES_UPDATED,this._reSync),_defineProperty(t,eventTypes.DIALERS_UPDATED,this._reSync),_defineProperty(t,eventTypes.LOGIN_STATUS,(function(){n.connected||n._onConnect()})),t)[o.name];i&&"function"==typeof i&&i.call(this,o.data),this._handleLocalEvents&&onNewEvent(Object.assign({eventData:o},this.options))}}},{key:"init",value:async function(){return this.connectionEstablished||(this.socket&&this.emit(eventTypes.CLOSE),await this._getToken(),await this._getTabsSession(),await this.login(this.options.loginType),await this._getServers()),!0}},{key:"setToken",value:async function(e){this.options.token=e,this.disconnect(),await this.init()}},{key:"closeAllConnections",value:function(){allConnections.forEach((function(e){e.close(),e.disconnect()})),allConnections=[],this.socket&&(this.socket.disconnect(),this.socket.close(),this.socket=null)}},{key:"disconnect",value:function(){this._listenersMap=new Map,this.closeAllConnections()}},{key:"on",value:function(e,t){this._listenersMap.set(e,t),this._checkInit()}},{key:"emit",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._checkInit(),this.Logger.log("EMIT -> ".concat(e),t),this.socket.emit(e,t)}},{key:"reSync",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.emit(eventTypes.RESYNC,{cache:e})}},{key:"setMonitorUrl",value:async function(e){var t=this.options.url,n=this.options.serverFetchStrategy;try{if(!e)return;this.options.url=e,this.options.serverFetchStrategy="remote",await this.init()}catch(e){this._onError(e),this.options.url=t,this.options.serverFetchStrategy=n,await this.init()}}},{key:"_getToken",value:function(){var e=this.options.loginType;if(this.token=this.options.token,"token"===e&&!this.token)throw new Error("Token login type expects the token option to be provided")}},{key:"_getTabsSession",value:function(){return window.sessionStorage.length||localStorage.setItem("getSessionStorage",Date.now()),window.addEventListener("storage",(function(e){if("getSessionStorage"==e.key)localStorage.setItem("sessionStorage",JSON.stringify(window.sessionStorage)),localStorage.removeItem("sessionStorage");else if("sessionStorage"==e.key&&!sessionStorage.length){var t=JSON.parse(e.newValue);for(var n in t)window.sessionStorage.setItem(n,t[n])}})),new Promise((function(e){return setTimeout(e,200)}))}},{key:"login",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"token",n={token:this.options.token,email:this.options.email,username:this.options.username,password:this.options.password},o=md5(JSON.stringify(n)),i=1e3;return this._lastLoginTimestamp+i>(new Date).getTime()?Promise.resolve():(this._lastLoginTimestamp=(new Date).getTime(),new Promise((async function(i,r){try{var s=window.sessionStorage.getItem(o);if(s)return s=JSON.parse(s),e.Logger.log("got data from session",s),await e._onLoginResponse(s),i(s)}catch(t){e.Logger.log("Error on getting session",t)}try{var a=getExternalLoginUrl(e.options.loginUrl,t),c=await externalLogin(a,n);await e._onLoginResponse(c),window.sessionStorage.setItem(o,JSON.stringify(c)),i(c)}catch(t){e.servers=e.argumentOptions.servers||defaultServers,r(t)}})))}}]),e}();return"undefined"!=typeof window&&(window.EventsSDK=EventsSDK),EventsSDK})); +!function(){var ERROR="input is invalid type",WINDOW="object"==typeof window,root=WINDOW?window:{};root.JS_MD5_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&"object"==typeof self,NODE_JS=!root.JS_MD5_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS?root=commonjsGlobal:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_MD5_NO_COMMON_JS&&module.exports,ARRAY_BUFFER=!root.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[128,32768,8388608,-2147483648],SHIFT=[0,8,16,24],OUTPUT_TYPES=["hex","array","digest","buffer","arrayBuffer","base64"],BASE64_ENCODE_CHAR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),blocks=[],buffer8;if(ARRAY_BUFFER){var buffer=new ArrayBuffer(68);buffer8=new Uint8Array(buffer),blocks=new Uint32Array(buffer)}!root.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!ARRAY_BUFFER||!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e){return function(t){return new Md5(!0).update(t)[e]()}},createMethod=function(){var e=createOutputMethod("hex");NODE_JS&&(e=nodeWrap(e)),e.create=function(){return new Md5},e.update=function(t){return e.create().update(t)};for(var t=0;t>2]|=e[r]<>6,c[i++]=128|63&o):o<55296||o>=57344?(c[i++]=224|o>>12,c[i++]=128|o>>6&63,c[i++]=128|63&o):(o=65536+((1023&o)<<10|1023&e.charCodeAt(++r)),c[i++]=240|o>>18,c[i++]=128|o>>12&63,c[i++]=128|o>>6&63,c[i++]=128|63&o);else for(i=this.start;r>2]|=o<>2]|=(192|o>>6)<>2]|=(128|63&o)<=57344?(a[i>>2]|=(224|o>>12)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<>2]|=(240|o>>18)<>2]|=(128|o>>12&63)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<=64?(this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,o,i,r,s=this.blocks;this.first?t=((t=((e=((e=s[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(o=((o=(-1732584194^2004318071&e)+s[1]-117830708)<<12|o>>>20)+e<<0)&(-271733879^e))+s[2]-1126478375)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((o=this.h3)^t&(n^o))+s[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[1]-389564586)<<12|o>>>20)+e<<0)&(e^t))+s[2]+606105819)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(o^t&(n^o))+s[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[5]+1200080426)<<12|o>>>20)+e<<0)&(e^t))+s[6]-1473231341)<<17|n>>>15)+o<<0)&(o^e))+s[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[9]-1958414417)<<12|o>>>20)+e<<0)&(e^t))+s[10]-42063)<<17|n>>>15)+o<<0)&(o^e))+s[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[13]-40341101)<<12|o>>>20)+e<<0)&(e^t))+s[14]-1502002290)<<17|n>>>15)+o<<0)&(o^e))+s[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[1]-165796510)<<5|e>>>27)+t<<0)^t))+s[6]-1069501632)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[11]+643717713)<<14|n>>>18)+o<<0)^o))+s[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[5]-701558691)<<5|e>>>27)+t<<0)^t))+s[10]+38016083)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[15]-660478335)<<14|n>>>18)+o<<0)^o))+s[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[9]+568446438)<<5|e>>>27)+t<<0)^t))+s[14]-1019803690)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[3]-187363961)<<14|n>>>18)+o<<0)^o))+s[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[13]-1444681467)<<5|e>>>27)+t<<0)^t))+s[2]-51403784)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[7]+1735328473)<<14|n>>>18)+o<<0)^o))+s[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[5]-378558)<<4|e>>>28)+t<<0))+s[8]-2022574463)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[11]+1839030562)<<16|n>>>16)+o<<0))+s[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[1]-1530992060)<<4|e>>>28)+t<<0))+s[4]+1272893353)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[7]-155497632)<<16|n>>>16)+o<<0))+s[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[13]+681279174)<<4|e>>>28)+t<<0))+s[0]-358537222)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[3]-722521979)<<16|n>>>16)+o<<0))+s[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[9]-640364487)<<4|e>>>28)+t<<0))+s[12]-421815835)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[15]+530742520)<<16|n>>>16)+o<<0))+s[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[0]-198630844)<<6|e>>>26)+t<<0)|~n))+s[7]+1126891415)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[14]-1416354905)<<15|n>>>17)+o<<0)|~e))+s[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+s[3]-1894986606)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[10]-1051523)<<15|n>>>17)+o<<0)|~e))+s[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+s[15]-30611744)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[6]-1560198380)<<15|n>>>17)+o<<0)|~e))+s[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[4]-145523070)<<6|e>>>26)+t<<0)|~n))+s[11]-1120210379)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[2]+718787259)<<15|n>>>17)+o<<0)|~e))+s[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=o+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+o<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[15&o]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return[255&e,e>>8&255,e>>16&255,e>>24&255,255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,o="",i=this.array(),r=0;r<15;)e=i[r++],t=i[r++],n=i[r++],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=i[r],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:root.md5=exports}()})),defaultOptions={url:"https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls",fallbackServer:{Domain:"monitor5.voicenter.co.il",Priority:0},loginUrl:"https://loginapi.voicenter.co.il/monitorAPI/Login",refreshTokenUrl:"https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken",servers:defaultServers,token:null,loginType:"token",forceNew:!0,reconnectionDelay:1e4,reconnectionDelayMax:1e4,maxReconnectAttempts:2,timeout:1e4,keepAliveTimeout:6e4,idleInterval:3e5,protocol:"https",transports:["websocket"],upgrade:!1,store:null,extensionsModuleName:"sdkExtensions",queuesModuleName:"sdkQueues",dialersModuleName:"sdkDialers",serverFetchStrategy:"remote",serverType:null},allConnections=[],listenersMap=new Map,EventsSDK=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(_classCallCheck(this,e),this.options=Object.assign({},defaultOptions,t),this.argumentOptions=Object.assign({},t),!this.options.loginType)throw new Error("A login type should be provided");this.Logger=new Logger(this.options),this.servers=[],this.server=null,this.socket=null,this.connected=!1,this.connectionEstablished=!1,this._lastEventTimestamp=(new Date).getTime(),this._initReconnectOptions(),this._listenersMap=listenersMap,this._retryConnection=debounce_1(this._connect.bind(this),this.reconnectOptions.reconnectionDelay,{leading:!0,trailing:!1}),this._lastLoginTimestamp=null,this._handleLocalEvents=!1,this._registerExtensionsModule(),this._registerQueueModule(),this._registerDialerModule()}return _createClass(e,[{key:"getLastEventTimestamp",value:function(){return this._lastEventTimestamp}},{key:"_reSync",value:function(){this.emit(eventTypes.RESYNC,{cache:!1})}},{key:"_registerExtensionsModule",value:function(){var e=this.options.extensionsModuleName||"sdkExtensions";this._validateStoreModule(e)&&(this.options.store.registerModule(e,extensionsModule),this._handleLocalEvents=!0)}},{key:"_registerQueueModule",value:function(){var e=this.options.queuesModuleName||"sdkQueues";this._validateStoreModule(e)&&(this.options.store.registerModule(e,queuesModule),this._handleLocalEvents=!0)}},{key:"_registerDialerModule",value:function(){var e=this.options.dialersModuleName||"sdkDialers";this._validateStoreModule(e)&&(this.options.store.registerModule(e,dialersModule),this._handleLocalEvents=!0)}},{key:"_validateStoreModule",value:function(e){var t=this.options.store;return!!t&&(t.state[e]&&t.unregisterModule(e),!0)}},{key:"_initReconnectOptions",value:function(){this.reconnectOptions={retryCount:1,maxReconnectAttempts:this.options.maxReconnectAttempts,reconnectionDelay:this.options.reconnectionDelay,minReconnectionDelay:this.options.reconnectionDelay,maxReconnectionDelay:3e5}}},{key:"_onConnect",value:function(){this._initReconnectDelays(),this.connected=!0,this.Logger.log(eventTypes.CONNECT,this.reconnectOptions)}},{key:"_initReconnectDelays",value:function(){this.reconnectOptions.retryCount=1;var e=this.reconnectOptions.minReconnectionDelay;this.reconnectOptions.reconnectionDelay=e,this.socket.io.reconnectionDelay(e),this.socket.io.reconnectionDelayMax(e)}},{key:"_onConnectError",value:function(e){this._retryConnection("next",!0),this.connected=!1,this.Logger.log(eventTypes.CONNECT_ERROR,e)}},{key:"_onError",value:function(e){this.Logger.log(eventTypes.ERROR,e)}},{key:"_onReconnectFailed",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.RECONNECT_FAILED,this.reconnectOptions)}},{key:"_onConnectTimeout",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.CONNECT_TIMEOUT,this.reconnectOptions)}},{key:"_onReconnectAttempt",value:function(){if(this.connected=!1,this.reconnectOptions.retryCount>=this.reconnectOptions.maxReconnectAttempts)this._retryConnection("next",!0);else{if(this.reconnectOptions.reconnectionDelay0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=null;if("default"===e)n=this._findCurrentServer();else if("next"===e)n=this._findNextAvailableServer();else{if("prev"!==e)throw new Error("Incorrect 'server' parameter passed to connect function ".concat(e,". Should be 'default' or 'next'"));n=this._findMaxPriorityServer()}n||(this.server=this._findCurrentServer()),this._initSocketConnection(),this._initSocketEvents(),this._initKeepAlive(),this._initReconnectDelays(),t||await this.login(this.options.loginType)}},{key:"_checkInit",value:function(){if(!this.connectionEstablished)throw new Error('Make sure you call "sdk.init()" before doing other operations.')}},{key:"_initSocketConnection",value:function(){var e=this.server.Domain,t=this.options.protocol,n="".concat(t,"://").concat(e);this.Logger.log("Connecting to..",n),this.closeAllConnections();var o={reconnection:!1,perMessageDeflate:!1,upgrade:!1,transports:["websocket"],debug:!1};this.token&&(o.query={token:this.token}),this.socket=window.io(n,o),allConnections.push(this.socket),this.connectionEstablished=!0}},{key:"_initSocketEvents",value:function(){var e=this;this.socket.on(eventTypes.RECONNECT_ATTEMPT,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.RECONNECT_FAILED,(function(t){return e._onReconnectFailed(t)})).on(eventTypes.CONNECT,(function(t){return e._onConnect(t)})).on(eventTypes.CONNECT_TIMEOUT,(function(t){return e._onConnectTimeout(t)})).on(eventTypes.CONNECT_ERROR,(function(t){return e._onConnectError(t)})).on(eventTypes.RECONNECT_ERROR,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.ERROR,(function(t){return e._onError(t)})).on(eventTypes.DISCONNECT,(function(t){return e._onDisconnect(t)})),this.socket.onpacket=this._onEvent.bind(this),this.socket.onevent=this._onEvent.bind(this)}},{key:"_initKeepAlive",value:function(){var e=this;this.keepAliveInterval&&clearInterval(this.keepAliveInterval),this.idleInterval&&clearInterval(this.idleInterval),this.keepAliveInterval=setInterval((async function(){var t=(new Date).getTime(),n=2*e.options.keepAliveTimeout;t>e.getLastEventTimestamp()+n?await e._connect("next",!0):e.socket?t>e.getLastEventTimestamp()+e.options.keepAliveTimeout&&e.emit(eventTypes.KEEP_ALIVE,e.options.token):e._initSocketConnection()}),this.options.keepAliveTimeout)}},{key:"_findCurrentServer",value:function(){var e=null;return this.servers.length&&(e=this.servers[0]),this.server=e,this.server||(this.server=this.options.fallbackServer),this.server}},{key:"_findNextAvailableServer",value:function(){var e=this.server.Priority;if(this.Logger.log("Failover -> Trying to find another server"),e===this.servers.length-1)return this._findMaxPriorityServer();var t=e+1,n=this.servers.find((function(e){return e.Priority===t}));return n||(n=this._findMaxPriorityServer())?this.server.Domain!==n.Domain?(this.server=n,this.server):(this.Logger.log("Failover -> Found new server. Connecting to it...",this.server),null):void 0}},{key:"_findMaxPriorityServer",value:function(){this.Logger.log("Fallback -> Trying to find previous server","_findMaxPriorityServer");var e=getServerWithHighestPriority(this.servers);return this.server?this.server&&e.Domain!==this.server.Domain?(this.server=e,this.Logger.log("Fallback -> Trying to find previous server",this.server),this.server):null:(this.server=e,this.server)}},{key:"_getServers",value:async function(){"static"===this.options.serverFetchStrategy&&this.argumentOptions.servers&&Array.isArray(this.argumentOptions.servers)&&this.argumentOptions.servers.length>1&&(this.servers=this.argumentOptions.servers)}},{key:"_onEvent",value:function(e){var t,n=this;if(e.data){var o=this._parsePacket(e);this.Logger.log("New event -> ".concat(o.name),o),this._lastEventTimestamp=(new Date).getTime(),this._listenersMap.forEach((function(e,t){("*"===t||o.name===t)&&e(o)}));var i=(_defineProperty(t={},eventTypes.KEEP_ALIVE_RESPONSE,this._onKeepAlive),_defineProperty(t,eventTypes.LOGIN_RESPONSE,this._onLoginResponse),_defineProperty(t,eventTypes.EXTENSION_UPDATED,this._reSync),_defineProperty(t,eventTypes.QUEUES_UPDATED,this._reSync),_defineProperty(t,eventTypes.DIALERS_UPDATED,this._reSync),_defineProperty(t,eventTypes.LOGIN_STATUS,(function(){n.connected||n._onConnect()})),t)[o.name];i&&"function"==typeof i&&i.call(this,o.data),this._handleLocalEvents&&onNewEvent(Object.assign({eventData:o},this.options))}}},{key:"init",value:async function(){return this.connectionEstablished||(this.socket&&this.emit(eventTypes.CLOSE),await this._getToken(),await this._getTabsSession(),await this.login(this.options.loginType),await this._getServers()),!0}},{key:"setToken",value:async function(e){this.options.token=e,this.disconnect(),await this.init()}},{key:"closeAllConnections",value:function(){allConnections.forEach((function(e){e.close(),e.disconnect()})),allConnections=[],this.socket&&(this.socket.disconnect(),this.socket.close(),this.socket=null)}},{key:"disconnect",value:function(){this._listenersMap=new Map,this.closeAllConnections()}},{key:"on",value:function(e,t){this._listenersMap.set(e,t),this._checkInit()}},{key:"emit",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._checkInit(),this.Logger.log("EMIT -> ".concat(e),t),this.socket.emit(e,t)}},{key:"reSync",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.emit(eventTypes.RESYNC,{cache:e})}},{key:"setMonitorUrl",value:async function(e){var t=this.options.url,n=this.options.serverFetchStrategy;try{if(!e)return;this.options.url=e,this.options.serverFetchStrategy="remote",await this.init()}catch(e){this._onError(e),this.options.url=t,this.options.serverFetchStrategy=n,await this.init()}}},{key:"_getToken",value:function(){var e=this.options.loginType;if(this.token=this.options.token,"token"===e&&!this.token)throw new Error("Token login type expects the token option to be provided")}},{key:"_getTabsSession",value:function(){return window.sessionStorage.length||localStorage.setItem("getSessionStorage",Date.now()),window.addEventListener("storage",(function(e){if("getSessionStorage"==e.key)localStorage.setItem("sessionStorage",JSON.stringify(window.sessionStorage)),localStorage.removeItem("sessionStorage");else if("sessionStorage"==e.key&&!sessionStorage.length){var t=JSON.parse(e.newValue);for(var n in t)window.sessionStorage.setItem(n,t[n])}})),new Promise((function(e){return setTimeout(e,200)}))}},{key:"login",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"token",n={token:this.options.token,email:this.options.email,username:this.options.username,password:this.options.password},o=md5(JSON.stringify(n)),i=1e3;return this._lastLoginTimestamp+i>(new Date).getTime()?Promise.resolve():(this._lastLoginTimestamp=(new Date).getTime(),new Promise((async function(i,r){try{var s=window.sessionStorage.getItem(o);if(s)return s=JSON.parse(s),e.Logger.log("got data from session",s),await e._onLoginResponse(s),i(s)}catch(t){e.Logger.log("Error on getting session",t)}try{var a=getExternalLoginUrl(e.options.loginUrl,t),c=await externalLogin(a,n);await e._onLoginResponse(c),window.sessionStorage.setItem(o,JSON.stringify(c)),i(c)}catch(t){e.servers=e.argumentOptions.servers||defaultServers,r(t)}})))}}]),e}();return"undefined"!=typeof window&&(window.EventsSDK=EventsSDK),EventsSDK})); //# sourceMappingURL=voicenter-events-sdk.umd.js.map diff --git a/dist/voicenter-events-sdk.umd.js.map b/dist/voicenter-events-sdk.umd.js.map index cffb82fd..c4913957 100644 --- a/dist/voicenter-events-sdk.umd.js.map +++ b/dist/voicenter-events-sdk.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n }\r\n // allQueueCalls: (state, getters) => {\r\n // const allCalls = []\r\n // getters.queueWithActiveCalls.forEach((queue) => {\r\n // const calls = queue.Calls || []\r\n // allCalls.push(...calls)\r\n // })\r\n // return allCalls\r\n // },\r\n // filterQueuesByIds: (state) => queueIds => {\r\n // if (!queueIds || !Array.isArray(queueIds)) {\r\n // return state.all\r\n // }\r\n // return state.all.filter(e => queueIds.includes(e.QueueID))\r\n // }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","export function loadExternalScript(url) {\r\n return new Promise((resolve) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0')\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = window.io(url, options)\r\n\r\n\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) { \r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession(){\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n };\r\n window.addEventListener('storage', (event) => {\r\n //console.log('storage event', event);\r\n if (event.key == 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key == 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n var data = JSON.parse(event.newValue),\r\n value;\r\n for (let key in data) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n })\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n this._lastLoginTimestamp = new Date().getTime()\r\n return new Promise(async (resolve, reject) => {\r\n try{\r\n let loginSession = window.sessionStorage.getItem(key);\r\n if(loginSession){\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n }catch(err){\r\n this.Logger.log('Error on getting session',err)\r\n }\r\n try {\r\n let url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url,payload)\r\n await this._onLoginResponse(res)\r\n\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadExternalScript","Promise","resolve","script","document","createElement","src","onload","onerror","reject","append","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","eval","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModuleName","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","io","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n }\r\n // allQueueCalls: (state, getters) => {\r\n // const allCalls = []\r\n // getters.queueWithActiveCalls.forEach((queue) => {\r\n // const calls = queue.Calls || []\r\n // allCalls.push(...calls)\r\n // })\r\n // return allCalls\r\n // },\r\n // filterQueuesByIds: (state) => queueIds => {\r\n // if (!queueIds || !Array.isArray(queueIds)) {\r\n // return state.all\r\n // }\r\n // return state.all.filter(e => queueIds.includes(e.QueueID))\r\n // }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","export function loadExternalScript(url) {\r\n return new Promise((resolve) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0')\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = window.io(url, options)\r\n\r\n\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) { \r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession(){\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n };\r\n window.addEventListener('storage', (event) => {\r\n //console.log('storage event', event);\r\n if (event.key == 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key == 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n var data = JSON.parse(event.newValue),\r\n value;\r\n for (let key in data) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n })\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n this._lastLoginTimestamp = new Date().getTime()\r\n return new Promise(async (resolve, reject) => {\r\n try{\r\n let loginSession = window.sessionStorage.getItem(key);\r\n if(loginSession){\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n }catch(err){\r\n this.Logger.log('Error on getting session',err)\r\n }\r\n try {\r\n let url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url,payload)\r\n await this._onLoginResponse(res)\r\n\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadExternalScript","Promise","resolve","script","document","createElement","src","onload","onerror","reject","append","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","eval","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","dialersModuleName","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","io","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file diff --git a/src/sdk.js b/src/sdk.js index 3d175204..a38f3a69 100644 --- a/src/sdk.js +++ b/src/sdk.js @@ -36,6 +36,7 @@ const defaultOptions = { store: null, extensionsModuleName: 'sdkExtensions', queuesModuleName: 'sdkQueues', + dialersModuleName: 'sdkDialers', serverFetchStrategy: 'remote', // get servers from external url options: remote | static serverType: null, // can be 1 or 2. 2 is used for chrome extension }; From e846b6a83fb7f53c10622f3574d821c4c0ef58eb Mon Sep 17 00:00:00 2001 From: OrtZz Date: Mon, 14 Mar 2022 17:10:32 +0200 Subject: [PATCH 05/27] updated: handler store --- dist/voicenter-events-sdk.cjs.js | 10 ++++++++-- dist/voicenter-events-sdk.esm.js | 10 ++++++++-- dist/voicenter-events-sdk.umd.js | 2 +- dist/voicenter-events-sdk.umd.js.map | 2 +- src/eventTypes.js | 1 + src/store/handleStoreEvents.js | 5 ++++- 6 files changed, 23 insertions(+), 7 deletions(-) diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js index 61cd81ad..0600bc86 100644 --- a/dist/voicenter-events-sdk.cjs.js +++ b/dist/voicenter-events-sdk.cjs.js @@ -115,7 +115,8 @@ var eventTypes = { KEEP_ALIVE: 'keepalive', KEEP_ALIVE_RESPONSE: 'keepaliveResponse', CLOSE: 'closeme', - ERROR: 'error' + ERROR: 'error', + ALL_DIALERS_STATUS: 'AllDialersStatus' }; var defaultServers = [{ @@ -237,7 +238,8 @@ function onNewEvent(_ref) { var eventData = _ref.eventData, store = _ref.store, extensionsModuleName = _ref.extensionsModuleName, - queuesModuleName = _ref.queuesModuleName; + queuesModuleName = _ref.queuesModuleName, + dialersModuleName = _ref.dialersModuleName; var name = eventData.name, data = eventData.data; store.commit("".concat(extensionsModuleName, "/SET_IS_SOCKET_OFFLINE"), isSocketOffline(eventData)); @@ -288,6 +290,10 @@ function onNewEvent(_ref) { } break; + + case eventTypes.ALL_DIALERS_STATUS: + store.dispatch("".concat(dialersModuleName, "/setDialers"), data.dialers); + break; } } diff --git a/dist/voicenter-events-sdk.esm.js b/dist/voicenter-events-sdk.esm.js index ef9f746f..162e5b64 100644 --- a/dist/voicenter-events-sdk.esm.js +++ b/dist/voicenter-events-sdk.esm.js @@ -111,7 +111,8 @@ var eventTypes = { KEEP_ALIVE: 'keepalive', KEEP_ALIVE_RESPONSE: 'keepaliveResponse', CLOSE: 'closeme', - ERROR: 'error' + ERROR: 'error', + ALL_DIALERS_STATUS: 'AllDialersStatus' }; var defaultServers = [{ @@ -233,7 +234,8 @@ function onNewEvent(_ref) { var eventData = _ref.eventData, store = _ref.store, extensionsModuleName = _ref.extensionsModuleName, - queuesModuleName = _ref.queuesModuleName; + queuesModuleName = _ref.queuesModuleName, + dialersModuleName = _ref.dialersModuleName; var name = eventData.name, data = eventData.data; store.commit("".concat(extensionsModuleName, "/SET_IS_SOCKET_OFFLINE"), isSocketOffline(eventData)); @@ -284,6 +286,10 @@ function onNewEvent(_ref) { } break; + + case eventTypes.ALL_DIALERS_STATUS: + store.dispatch("".concat(dialersModuleName, "/setDialers"), data.dialers); + break; } } diff --git a/dist/voicenter-events-sdk.umd.js b/dist/voicenter-events-sdk.umd.js index 985c9772..15934a97 100644 --- a/dist/voicenter-events-sdk.umd.js +++ b/dist/voicenter-events-sdk.umd.js @@ -1,4 +1,4 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).VoicenterEventsSDK=t()}(this,(function(){"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=t.name,s=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),r){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),s.extensions);break;case eventTypes.EXTENSION_EVENT:var a=s.data;a.lastEvent={reason:s.reason,ivrid:s.ivruniqueid};var c=n.state[o].extensions.findIndex((function(e){return e.userID===a.userID}));-1!==c&&n.dispatch("".concat(o,"/updateExtension"),{index:c,extension:a});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),s),n.dispatch("".concat(i,"/setQueues"),s.queues);break;case eventTypes.QUEUE_EVENT:var l=s.data,u=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===l.QueueID}));-1!==u&&n.dispatch("".concat(i,"/updateQueue"),{index:u,queue:l})}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){e.all=t})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Prioritye.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers)}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){e.all=t})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Priority ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n }\r\n // allQueueCalls: (state, getters) => {\r\n // const allCalls = []\r\n // getters.queueWithActiveCalls.forEach((queue) => {\r\n // const calls = queue.Calls || []\r\n // allCalls.push(...calls)\r\n // })\r\n // return allCalls\r\n // },\r\n // filterQueuesByIds: (state) => queueIds => {\r\n // if (!queueIds || !Array.isArray(queueIds)) {\r\n // return state.all\r\n // }\r\n // return state.all.filter(e => queueIds.includes(e.QueueID))\r\n // }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","export function loadExternalScript(url) {\r\n return new Promise((resolve) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0')\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = window.io(url, options)\r\n\r\n\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) { \r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession(){\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n };\r\n window.addEventListener('storage', (event) => {\r\n //console.log('storage event', event);\r\n if (event.key == 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key == 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n var data = JSON.parse(event.newValue),\r\n value;\r\n for (let key in data) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n })\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n this._lastLoginTimestamp = new Date().getTime()\r\n return new Promise(async (resolve, reject) => {\r\n try{\r\n let loginSession = window.sessionStorage.getItem(key);\r\n if(loginSession){\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n }catch(err){\r\n this.Logger.log('Error on getting session',err)\r\n }\r\n try {\r\n let url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url,payload)\r\n await this._onLoginResponse(res)\r\n\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadExternalScript","Promise","resolve","script","document","createElement","src","onload","onerror","reject","append","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","eval","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","dialersModuleName","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","io","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n ALL_DIALERS_STATUS: 'AllDialersStatus'\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n }\r\n // allQueueCalls: (state, getters) => {\r\n // const allCalls = []\r\n // getters.queueWithActiveCalls.forEach((queue) => {\r\n // const calls = queue.Calls || []\r\n // allCalls.push(...calls)\r\n // })\r\n // return allCalls\r\n // },\r\n // filterQueuesByIds: (state) => queueIds => {\r\n // if (!queueIds || !Array.isArray(queueIds)) {\r\n // return state.all\r\n // }\r\n // return state.all.filter(e => queueIds.includes(e.QueueID))\r\n // }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","export function loadExternalScript(url) {\r\n return new Promise((resolve) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0')\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = window.io(url, options)\r\n\r\n\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) { \r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession(){\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n };\r\n window.addEventListener('storage', (event) => {\r\n //console.log('storage event', event);\r\n if (event.key == 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key == 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n var data = JSON.parse(event.newValue),\r\n value;\r\n for (let key in data) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n })\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n this._lastLoginTimestamp = new Date().getTime()\r\n return new Promise(async (resolve, reject) => {\r\n try{\r\n let loginSession = window.sessionStorage.getItem(key);\r\n if(loginSession){\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n }catch(err){\r\n this.Logger.log('Error on getting session',err)\r\n }\r\n try {\r\n let url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url,payload)\r\n await this._onLoginResponse(res)\r\n\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadExternalScript","Promise","resolve","script","document","createElement","src","onload","onerror","reject","append","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","eval","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","io","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file diff --git a/src/eventTypes.js b/src/eventTypes.js index 5f42be9f..513d440e 100644 --- a/src/eventTypes.js +++ b/src/eventTypes.js @@ -26,4 +26,5 @@ export default { KEEP_ALIVE_RESPONSE: 'keepaliveResponse', CLOSE: 'closeme', ERROR: 'error', + ALL_DIALERS_STATUS: 'AllDialersStatus' } diff --git a/src/store/handleStoreEvents.js b/src/store/handleStoreEvents.js index d510d3e8..df915907 100644 --- a/src/store/handleStoreEvents.js +++ b/src/store/handleStoreEvents.js @@ -21,7 +21,7 @@ function isSocketOffline(event) { return offlineEvents.includes(name) } -export default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName }) { +export default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) { let { name, data } = eventData store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData)) switch (name) { @@ -59,6 +59,9 @@ export default function onNewEvent({ eventData, store, extensionsModuleName, que }) } break; + case eventTypes.ALL_DIALERS_STATUS: + store.dispatch(`${dialersModuleName}/setDialers`, data.dialers) + break; default: break; } From f8f3fd27da70357df66f42848fa66f1c535a92d0 Mon Sep 17 00:00:00 2001 From: OrtZz Date: Mon, 14 Mar 2022 17:26:33 +0200 Subject: [PATCH 06/27] updated: dialers vuex file --- src/store/dialers.js | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/store/dialers.js b/src/store/dialers.js index acd65e45..d6f0223e 100644 --- a/src/store/dialers.js +++ b/src/store/dialers.js @@ -27,21 +27,13 @@ const actions = { const getters = { getAllDialers: (state) => { return state.all + }, + getAllDialersWithTypeIVR: (state) => { + return state.all.filter(el => el.type === 'IVR') + }, + getAllDialersWithTypeAUTOMATIC: (state) => { + return state.all.filter(el => el.type === 'Automatic') } - // allQueueCalls: (state, getters) => { - // const allCalls = [] - // getters.queueWithActiveCalls.forEach((queue) => { - // const calls = queue.Calls || [] - // allCalls.push(...calls) - // }) - // return allCalls - // }, - // filterQueuesByIds: (state) => queueIds => { - // if (!queueIds || !Array.isArray(queueIds)) { - // return state.all - // } - // return state.all.filter(e => queueIds.includes(e.QueueID)) - // } } export default { namespaced: true, From de1d74e3f3b74edea817973bac190db80284d394 Mon Sep 17 00:00:00 2001 From: OrtZz Date: Mon, 14 Mar 2022 17:26:59 +0200 Subject: [PATCH 07/27] updated: build folder --- dist/voicenter-events-sdk.cjs.js | 26 +++++++++++--------------- dist/voicenter-events-sdk.esm.js | 26 +++++++++++--------------- dist/voicenter-events-sdk.umd.js | 2 +- dist/voicenter-events-sdk.umd.js.map | 2 +- 4 files changed, 24 insertions(+), 32 deletions(-) diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js index 0600bc86..d508b7da 100644 --- a/dist/voicenter-events-sdk.cjs.js +++ b/dist/voicenter-events-sdk.cjs.js @@ -495,21 +495,17 @@ var actions$2 = { var getters$2 = { getAllDialers: function getAllDialers(state) { return state.all; - } // allQueueCalls: (state, getters) => { - // const allCalls = [] - // getters.queueWithActiveCalls.forEach((queue) => { - // const calls = queue.Calls || [] - // allCalls.push(...calls) - // }) - // return allCalls - // }, - // filterQueuesByIds: (state) => queueIds => { - // if (!queueIds || !Array.isArray(queueIds)) { - // return state.all - // } - // return state.all.filter(e => queueIds.includes(e.QueueID)) - // } - + }, + getAllDialersWithTypeIVR: function getAllDialersWithTypeIVR(state) { + return state.all.filter(function (el) { + return el.type === 'IVR'; + }); + }, + getAllDialersWithTypeAUTOMATIC: function getAllDialersWithTypeAUTOMATIC(state) { + return state.all.filter(function (el) { + return el.type === 'Automatic'; + }); + } }; var dialersModule = { namespaced: true, diff --git a/dist/voicenter-events-sdk.esm.js b/dist/voicenter-events-sdk.esm.js index 162e5b64..ddfeba62 100644 --- a/dist/voicenter-events-sdk.esm.js +++ b/dist/voicenter-events-sdk.esm.js @@ -491,21 +491,17 @@ var actions$2 = { var getters$2 = { getAllDialers: function getAllDialers(state) { return state.all; - } // allQueueCalls: (state, getters) => { - // const allCalls = [] - // getters.queueWithActiveCalls.forEach((queue) => { - // const calls = queue.Calls || [] - // allCalls.push(...calls) - // }) - // return allCalls - // }, - // filterQueuesByIds: (state) => queueIds => { - // if (!queueIds || !Array.isArray(queueIds)) { - // return state.all - // } - // return state.all.filter(e => queueIds.includes(e.QueueID)) - // } - + }, + getAllDialersWithTypeIVR: function getAllDialersWithTypeIVR(state) { + return state.all.filter(function (el) { + return el.type === 'IVR'; + }); + }, + getAllDialersWithTypeAUTOMATIC: function getAllDialersWithTypeAUTOMATIC(state) { + return state.all.filter(function (el) { + return el.type === 'Automatic'; + }); + } }; var dialersModule = { namespaced: true, diff --git a/dist/voicenter-events-sdk.umd.js b/dist/voicenter-events-sdk.umd.js index 15934a97..d7278343 100644 --- a/dist/voicenter-events-sdk.umd.js +++ b/dist/voicenter-events-sdk.umd.js @@ -1,4 +1,4 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).VoicenterEventsSDK=t()}(this,(function(){"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers)}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){e.all=t})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Prioritye.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function y(e){return l=e,a=setTimeout(_,t),u?p(e):s}function E(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(E(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=E(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return y(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers)}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){e.all=t})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all},getAllDialersWithTypeIVR:function(e){return e.all.filter((function(e){return"IVR"===e.type}))},getAllDialersWithTypeAUTOMATIC:function(e){return e.all.filter((function(e){return"Automatic"===e.type}))}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Priority ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n }\r\n // allQueueCalls: (state, getters) => {\r\n // const allCalls = []\r\n // getters.queueWithActiveCalls.forEach((queue) => {\r\n // const calls = queue.Calls || []\r\n // allCalls.push(...calls)\r\n // })\r\n // return allCalls\r\n // },\r\n // filterQueuesByIds: (state) => queueIds => {\r\n // if (!queueIds || !Array.isArray(queueIds)) {\r\n // return state.all\r\n // }\r\n // return state.all.filter(e => queueIds.includes(e.QueueID))\r\n // }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","export function loadExternalScript(url) {\r\n return new Promise((resolve) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0')\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = window.io(url, options)\r\n\r\n\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) { \r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession(){\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n };\r\n window.addEventListener('storage', (event) => {\r\n //console.log('storage event', event);\r\n if (event.key == 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key == 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n var data = JSON.parse(event.newValue),\r\n value;\r\n for (let key in data) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n })\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n this._lastLoginTimestamp = new Date().getTime()\r\n return new Promise(async (resolve, reject) => {\r\n try{\r\n let loginSession = window.sessionStorage.getItem(key);\r\n if(loginSession){\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n }catch(err){\r\n this.Logger.log('Error on getting session',err)\r\n }\r\n try {\r\n let url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url,payload)\r\n await this._onLoginResponse(res)\r\n\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadExternalScript","Promise","resolve","script","document","createElement","src","onload","onerror","reject","append","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","eval","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","io","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n ALL_DIALERS_STATUS: 'AllDialersStatus'\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","export function loadExternalScript(url) {\r\n return new Promise((resolve) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0')\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = window.io(url, options)\r\n\r\n\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) { \r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession(){\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n };\r\n window.addEventListener('storage', (event) => {\r\n //console.log('storage event', event);\r\n if (event.key == 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key == 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n var data = JSON.parse(event.newValue),\r\n value;\r\n for (let key in data) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n })\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n this._lastLoginTimestamp = new Date().getTime()\r\n return new Promise(async (resolve, reject) => {\r\n try{\r\n let loginSession = window.sessionStorage.getItem(key);\r\n if(loginSession){\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n }catch(err){\r\n this.Logger.log('Error on getting session',err)\r\n }\r\n try {\r\n let url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url,payload)\r\n await this._onLoginResponse(res)\r\n\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadExternalScript","Promise","resolve","script","document","createElement","src","onload","onerror","reject","append","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","eval","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","io","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file From 3247baa0bdf4443bf4e0ec8c9ec39682f2f02075 Mon Sep 17 00:00:00 2001 From: OrtZz Date: Tue, 15 Mar 2022 17:49:37 +0200 Subject: [PATCH 08/27] updated: dialer store --- dist/voicenter-events-sdk.cjs.js | 7 ++++++- dist/voicenter-events-sdk.esm.js | 7 ++++++- dist/voicenter-events-sdk.umd.js | 2 +- dist/voicenter-events-sdk.umd.js.map | 2 +- src/eventTypes.js | 3 ++- src/store/handleStoreEvents.js | 3 +++ 6 files changed, 19 insertions(+), 5 deletions(-) diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js index d508b7da..aa27733a 100644 --- a/dist/voicenter-events-sdk.cjs.js +++ b/dist/voicenter-events-sdk.cjs.js @@ -116,7 +116,8 @@ var eventTypes = { KEEP_ALIVE_RESPONSE: 'keepaliveResponse', CLOSE: 'closeme', ERROR: 'error', - ALL_DIALERS_STATUS: 'AllDialersStatus' + ALL_DIALERS_STATUS: 'AllDialersStatus', + DIALER_EVENT: 'DialerEvent' }; var defaultServers = [{ @@ -294,6 +295,10 @@ function onNewEvent(_ref) { case eventTypes.ALL_DIALERS_STATUS: store.dispatch("".concat(dialersModuleName, "/setDialers"), data.dialers); break; + + case eventTypes.DIALER_EVENT: + store.dispatch("".concat(dialersModuleName, "/updateDialers"), data.dialers); + break; } } diff --git a/dist/voicenter-events-sdk.esm.js b/dist/voicenter-events-sdk.esm.js index ddfeba62..72f46d1d 100644 --- a/dist/voicenter-events-sdk.esm.js +++ b/dist/voicenter-events-sdk.esm.js @@ -112,7 +112,8 @@ var eventTypes = { KEEP_ALIVE_RESPONSE: 'keepaliveResponse', CLOSE: 'closeme', ERROR: 'error', - ALL_DIALERS_STATUS: 'AllDialersStatus' + ALL_DIALERS_STATUS: 'AllDialersStatus', + DIALER_EVENT: 'DialerEvent' }; var defaultServers = [{ @@ -290,6 +291,10 @@ function onNewEvent(_ref) { case eventTypes.ALL_DIALERS_STATUS: store.dispatch("".concat(dialersModuleName, "/setDialers"), data.dialers); break; + + case eventTypes.DIALER_EVENT: + store.dispatch("".concat(dialersModuleName, "/updateDialers"), data.dialers); + break; } } diff --git a/dist/voicenter-events-sdk.umd.js b/dist/voicenter-events-sdk.umd.js index d7278343..13904774 100644 --- a/dist/voicenter-events-sdk.umd.js +++ b/dist/voicenter-events-sdk.umd.js @@ -1,4 +1,4 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).VoicenterEventsSDK=t()}(this,(function(){"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function y(e){return l=e,a=setTimeout(_,t),u?p(e):s}function E(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(E(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=E(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return y(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers)}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){e.all=t})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all},getAllDialersWithTypeIVR:function(e){return e.all.filter((function(e){return"IVR"===e.type}))},getAllDialersWithTypeAUTOMATIC:function(e){return e.all.filter((function(e){return"Automatic"===e.type}))}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Prioritye.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers);break;case eventTypes.DIALER_EVENT:n.dispatch("".concat(r,"/updateDialers"),a.dialers)}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){e.all=t})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all},getAllDialersWithTypeIVR:function(e){return e.all.filter((function(e){return"IVR"===e.type}))},getAllDialersWithTypeAUTOMATIC:function(e){return e.all.filter((function(e){return"Automatic"===e.type}))}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Priority ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","export function loadExternalScript(url) {\r\n return new Promise((resolve) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0')\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = window.io(url, options)\r\n\r\n\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) { \r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession(){\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n };\r\n window.addEventListener('storage', (event) => {\r\n //console.log('storage event', event);\r\n if (event.key == 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key == 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n var data = JSON.parse(event.newValue),\r\n value;\r\n for (let key in data) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n })\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n this._lastLoginTimestamp = new Date().getTime()\r\n return new Promise(async (resolve, reject) => {\r\n try{\r\n let loginSession = window.sessionStorage.getItem(key);\r\n if(loginSession){\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n }catch(err){\r\n this.Logger.log('Error on getting session',err)\r\n }\r\n try {\r\n let url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url,payload)\r\n await this._onLoginResponse(res)\r\n\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadExternalScript","Promise","resolve","script","document","createElement","src","onload","onerror","reject","append","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","eval","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","io","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n ALL_DIALERS_STATUS: 'AllDialersStatus',\r\n DIALER_EVENT: 'DialerEvent'\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n case eventTypes.DIALER_EVENT:\r\n store.dispatch(`${dialersModuleName}/updateDialers`, data.dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","export function loadExternalScript(url) {\r\n return new Promise((resolve) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript('https://loginapi.voicenter.co.il/monitorAPI/GetSocketClient?v=2.4.0')\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = window.io(url, options)\r\n\r\n\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) { \r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession(){\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n };\r\n window.addEventListener('storage', (event) => {\r\n //console.log('storage event', event);\r\n if (event.key == 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key == 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n var data = JSON.parse(event.newValue),\r\n value;\r\n for (let key in data) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n })\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n this._lastLoginTimestamp = new Date().getTime()\r\n return new Promise(async (resolve, reject) => {\r\n try{\r\n let loginSession = window.sessionStorage.getItem(key);\r\n if(loginSession){\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n }catch(err){\r\n this.Logger.log('Error on getting session',err)\r\n }\r\n try {\r\n let url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url,payload)\r\n await this._onLoginResponse(res)\r\n\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","DIALER_EVENT","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadExternalScript","Promise","resolve","script","document","createElement","src","onload","onerror","reject","append","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","eval","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","io","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file diff --git a/src/eventTypes.js b/src/eventTypes.js index 513d440e..11b0da4d 100644 --- a/src/eventTypes.js +++ b/src/eventTypes.js @@ -26,5 +26,6 @@ export default { KEEP_ALIVE_RESPONSE: 'keepaliveResponse', CLOSE: 'closeme', ERROR: 'error', - ALL_DIALERS_STATUS: 'AllDialersStatus' + ALL_DIALERS_STATUS: 'AllDialersStatus', + DIALER_EVENT: 'DialerEvent' } diff --git a/src/store/handleStoreEvents.js b/src/store/handleStoreEvents.js index df915907..ac517faa 100644 --- a/src/store/handleStoreEvents.js +++ b/src/store/handleStoreEvents.js @@ -62,6 +62,9 @@ export default function onNewEvent({ eventData, store, extensionsModuleName, que case eventTypes.ALL_DIALERS_STATUS: store.dispatch(`${dialersModuleName}/setDialers`, data.dialers) break; + case eventTypes.DIALER_EVENT: + store.dispatch(`${dialersModuleName}/updateDialers`, data.dialers) + break; default: break; } From 3c34333f8fcdc1b60bdc4d879684a0e4805de0c3 Mon Sep 17 00:00:00 2001 From: Bohdan Date: Mon, 21 Mar 2022 17:07:12 +0200 Subject: [PATCH 09/27] Update: add ability to load socket library using external function --- dist/voicenter-events-sdk.cjs.js | 270 ++++++++++++++++++++------- dist/voicenter-events-sdk.esm.js | 270 ++++++++++++++++++++------- dist/voicenter-events-sdk.umd.js | 12 +- dist/voicenter-events-sdk.umd.js.map | 2 +- src/sdk.js | 3 +- src/utils/loadExternalScript.js | 8 +- 6 files changed, 421 insertions(+), 144 deletions(-) diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js index 3bceb800..247a0b30 100644 --- a/dist/voicenter-events-sdk.cjs.js +++ b/dist/voicenter-events-sdk.cjs.js @@ -3,19 +3,16 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var debounce = _interopDefault(require('lodash/debounce')); +var md5 = _interopDefault(require('js-md5')); function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } + "@babel/helpers - typeof"; - return _typeof(obj); + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); } function _classCallCheck(instance, Constructor) { @@ -37,6 +34,9 @@ function _defineProperties(target, props) { function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); return Constructor; } @@ -56,23 +56,36 @@ function _defineProperty(obj, key, value) { } function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } + if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; } function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var eventTypes = { @@ -105,6 +118,11 @@ var eventTypes = { ERROR: 'error' }; +var environments = { + BROWSER: 'browser', + CHROME_EXTENSION: 'chrome-extension' +}; + var defaultServers = [{ 'URLID': 59, 'Priority': 5, @@ -132,9 +150,7 @@ var defaultServers = [{ 'Domain': 'monitor5.voicenter.co.il' }]; -var Logger = -/*#__PURE__*/ -function () { +var Logger = /*#__PURE__*/function () { function Logger() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -277,9 +293,6 @@ function onNewEvent(_ref) { } break; - - default: - break; } } @@ -530,8 +543,8 @@ async function refreshToken(url, oldRefreshToken) { return res.json(); } -function loadExternalScript(url) { - return new Promise(function (resolve) { +function loadBrowserScript(url) { + return new Promise(function (resolve, reject) { var script = document.createElement('script'); script.src = url; @@ -547,8 +560,36 @@ function loadExternalScript(url) { }); } +async function loadExtensionScript(url) { + try { + var script = await fetch(url); + script = await script.text(); + eval(script); + } catch (e) { + return Promise.reject(e); + } +} + +async function loadExternalScript(url, environment, getSocketIOFunction) { + if (typeof getSocketIOFunction === 'function') { + self.io = getSocketIOFunction(url); + return; + } + + switch (environment) { + case environments.BROWSER: + await loadBrowserScript(url); + break; + + case environments.CHROME_EXTENSION: + await loadExtensionScript(url); + } +} + var defaultOptions = { url: "https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls", + environment: environments.BROWSER, + getSocketIOFunction: undefined, fallbackServer: { Domain: 'monitor5.voicenter.co.il', Priority: 0 @@ -580,15 +621,13 @@ var defaultOptions = { var allConnections = []; var listenersMap = new Map(); -var EventsSDK = -/*#__PURE__*/ -function () { +var EventsSDK = /*#__PURE__*/function () { function EventsSDK() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, EventsSDK); - this.options = Object.assign({}, defaultOptions, {}, options); + this.options = Object.assign({}, defaultOptions, options); this.argumentOptions = Object.assign({}, options); if (!this.options.loginType) { @@ -703,7 +742,7 @@ function () { }, { key: "_onConnectError", value: function _onConnectError(data) { - this._retryConnection('next'); + this._retryConnection('next', true); this.connected = false; this.Logger.log(eventTypes.CONNECT_ERROR, data); @@ -716,22 +755,24 @@ function () { }, { key: "_onReconnectFailed", value: function _onReconnectFailed() { - this._retryConnection('next'); + this._retryConnection('next', true); this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions); } }, { key: "_onConnectTimeout", value: function _onConnectTimeout() { - this._retryConnection('next'); + this._retryConnection('next', true); this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions); } }, { key: "_onReconnectAttempt", value: function _onReconnectAttempt() { + this.connected = false; + if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) { - this._retryConnection('next'); + this._retryConnection('next', true); return; } @@ -752,7 +793,7 @@ function () { this.connected = false; this.Logger.log(eventTypes.DISCONNECT, reason); - this._connect('next'); + this._connect('next', true); } }, { key: "_onKeepAlive", @@ -774,7 +815,7 @@ function () { key: "_onLoginResponse", value: async function _onLoginResponse(data) { if (data.Client) { - await loadExternalScript(data.Client); + await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction); } if (data.URL) { @@ -799,15 +840,15 @@ function () { await this._connect('default', true); } + if (data.TokenExpiry) { + this.options.tokenExpiry = data.TokenExpiry; + } + if (data.RefreshToken) { this.options.refreshToken = data.RefreshToken; this._handleTokenExpiry(); } - - if (data.TokenExpiry) { - this.options.tokenExpiry = data.TokenExpiry; - } } }, { key: "_handleTokenExpiry", @@ -823,8 +864,15 @@ function () { var timeout = date.getTime() - new Date().getTime() - 5000; // 5 seconds before expire setTimeout(async function () { + var Socket = null; var res = await refreshToken(_this.options.refreshTokenUrl, _this.options.refreshToken); - await _this._onLoginResponse(res); + + if (res.Data) { + Socket = res.Data.Socket; + return await _this._onLoginResponse(Socket); + } + + throw new Error("Error on refreshToken"); }, timeout); } }, { @@ -891,9 +939,13 @@ function () { var url = "".concat(protocol, "://").concat(domain); this.Logger.log('Connecting to..', url); this.closeAllConnections(); - var options = Object.assign({}, this.options, { + var options = { + reconnection: false, + perMessageDeflate: false, + upgrade: false, + transports: ['websocket'], debug: false - }); + }; if (this.token) { options.query = { @@ -901,19 +953,39 @@ function () { }; } - this.socket = window.io(url, options); + this.socket = self.io(url, options); allConnections.push(this.socket); this.connectionEstablished = true; } }, { key: "_initSocketEvents", value: function _initSocketEvents() { + var _this2 = this; + + this.socket.on(eventTypes.RECONNECT_ATTEMPT, function (data) { + return _this2._onReconnectAttempt(data); + }).on(eventTypes.RECONNECT_FAILED, function (data) { + return _this2._onReconnectFailed(data); + }).on(eventTypes.CONNECT, function (data) { + return _this2._onConnect(data); + }).on(eventTypes.CONNECT_TIMEOUT, function (data) { + return _this2._onConnectTimeout(data); + }).on(eventTypes.CONNECT_ERROR, function (data) { + return _this2._onConnectError(data); + }).on(eventTypes.RECONNECT_ERROR, function (data) { + return _this2._onReconnectAttempt(data); + }).on(eventTypes.ERROR, function (data) { + return _this2._onError(data); + }).on(eventTypes.DISCONNECT, function (data) { + return _this2._onDisconnect(data); + }); + this.socket.onpacket = this._onEvent.bind(this); this.socket.onevent = this._onEvent.bind(this); } }, { key: "_initKeepAlive", value: function _initKeepAlive() { - var _this2 = this; + var _this3 = this; if (this.keepAliveInterval) { clearInterval(this.keepAliveInterval); @@ -925,26 +997,27 @@ function () { this.keepAliveInterval = setInterval(async function () { var now = new Date().getTime(); - var delta = _this2.options.keepAliveTimeout * 2; + var delta = _this3.options.keepAliveTimeout * 2; - if (now > _this2.getLastEventTimestamp() + delta) { - await _this2._connect('next', true); + if (now > _this3.getLastEventTimestamp() + delta) { + await _this3._connect('next', true); return; } - if (!_this2.socket) { - _this2._initSocketConnection(); + if (!_this3.socket) { + _this3._initSocketConnection(); return; } - if (now > _this2.getLastEventTimestamp() + _this2.options.keepAliveTimeout) { - _this2.emit(eventTypes.KEEP_ALIVE, _this2.options.token); + if (now > _this3.getLastEventTimestamp() + _this3.options.keepAliveTimeout) { + _this3.emit(eventTypes.KEEP_ALIVE, _this3.options.token); + + return; } - }, this.options.keepAliveTimeout); - this.idleInterval = setInterval(function () { - _this2.reSync(false); - }, this.options.idleInterval); + }, this.options.keepAliveTimeout); // this.idleInterval = setInterval(() => { + // this.reSync(false) + // }, this.options.idleInterval) } }, { key: "_findCurrentServer", @@ -1024,7 +1097,7 @@ function () { }, { key: "_onEvent", value: function _onEvent(packet) { - var _this3 = this, + var _this4 = this, _eventMappings; if (!packet.data) { @@ -1044,9 +1117,9 @@ function () { } }); - var eventMappings = (_eventMappings = {}, _defineProperty(_eventMappings, eventTypes.RECONNECT_ATTEMPT, this._onReconnectAttempt), _defineProperty(_eventMappings, eventTypes.RECONNECT_FAILED, this._onReconnectFailed), _defineProperty(_eventMappings, eventTypes.CONNECT, this._onConnect), _defineProperty(_eventMappings, eventTypes.DISCONNECT, this._onDisconnect), _defineProperty(_eventMappings, eventTypes.ERROR, this._onError), _defineProperty(_eventMappings, eventTypes.CONNECT_ERROR, this._onConnectError), _defineProperty(_eventMappings, eventTypes.CONNECT_TIMEOUT, this._onConnectTimeout), _defineProperty(_eventMappings, eventTypes.KEEP_ALIVE_RESPONSE, this._onKeepAlive), _defineProperty(_eventMappings, eventTypes.LOGIN_RESPONSE, this._onLoginResponse), _defineProperty(_eventMappings, eventTypes.EXTENSION_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.QUEUES_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.DIALERS_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.LOGIN_STATUS, function () { - if (!_this3.connected) { - _this3._onConnect(); + var eventMappings = (_eventMappings = {}, _defineProperty(_eventMappings, eventTypes.KEEP_ALIVE_RESPONSE, this._onKeepAlive), _defineProperty(_eventMappings, eventTypes.LOGIN_RESPONSE, this._onLoginResponse), _defineProperty(_eventMappings, eventTypes.EXTENSION_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.QUEUES_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.DIALERS_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.LOGIN_STATUS, function () { + if (!_this4.connected) { + _this4._onConnect(); } }), _eventMappings); var eventHandler = eventMappings[evt.name]; @@ -1078,6 +1151,7 @@ function () { } await this._getToken(); + await this._getTabsSession(); await this.login(this.options.loginType); await this._getServers(); return true; @@ -1109,6 +1183,7 @@ function () { if (this.socket) { this.socket.disconnect(); + this.socket.close(); this.socket = null; } } @@ -1198,6 +1273,39 @@ function () { } } } + }, { + key: "_getTabsSession", + value: function _getTabsSession() { + if (this.options.environment !== environments.BROWSER) { + return Promise.resolve(); + } + + if (!window.sessionStorage.length) { + // Ask other tabs for session storage + localStorage.setItem('getSessionStorage', Date.now()); + } + + return new Promise(function (resolve) { + window.addEventListener('storage', function (event) { + if (event.key === 'getSessionStorage') { + // Some tab asked for the sessionStorage -> send it + localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); + localStorage.removeItem('sessionStorage'); + } else if (event.key === 'sessionStorage' && !sessionStorage.length) { + // sessionStorage is empty -> fill it + var data = JSON.parse(event.newValue); + + for (var key in data) { + if (data.hasOwnProperty(key)) { + window.sessionStorage.setItem(key, data[key]); + } + } + + resolve(); + } + }); + }); + } /** * Login (logs in based on the token/credentials provided) * @param type (login type. Can be token/user/code/account) @@ -1207,10 +1315,17 @@ function () { }, { key: "login", value: function login() { - var _this4 = this; + var _this5 = this; var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'token'; // throttle login for 1 second + var payload = { + token: this.options.token, + email: this.options.email, + username: this.options.username, + password: this.options.password + }; + var key = md5(JSON.stringify(payload)); var delay = 1000; if (this._lastLoginTimestamp + delay > new Date().getTime()) { @@ -1220,17 +1335,32 @@ function () { this._lastLoginTimestamp = new Date().getTime(); return new Promise(async function (resolve, reject) { try { - var url = getExternalLoginUrl(_this4.options.loginUrl, type); - var res = await externalLogin(url, { - token: _this4.options.token, - email: _this4.options.email, - username: _this4.options.username, - password: _this4.options.password - }); - await _this4._onLoginResponse(res); + var loginSession = window.sessionStorage.getItem(key); + + if (loginSession) { + loginSession = JSON.parse(loginSession); + + _this5.Logger.log('got data from session', loginSession); + + await _this5._onLoginResponse(loginSession); + return resolve(loginSession); + } + } catch (err) { + _this5.Logger.log('Error on getting session', err); + } + + try { + var url = getExternalLoginUrl(_this5.options.loginUrl, type); + var res = await externalLogin(url, payload); + await _this5._onLoginResponse(res); + + if (_this5.options.environment === environments.BROWSER) { + window.sessionStorage.setItem(key, JSON.stringify(res)); + } + resolve(res); } catch (err) { - _this4.servers = _this4.argumentOptions.servers || defaultServers; + _this5.servers = _this5.argumentOptions.servers || defaultServers; reject(err); } }); diff --git a/dist/voicenter-events-sdk.esm.js b/dist/voicenter-events-sdk.esm.js index 747f4431..2c821bab 100644 --- a/dist/voicenter-events-sdk.esm.js +++ b/dist/voicenter-events-sdk.esm.js @@ -1,17 +1,14 @@ import debounce from 'lodash/debounce'; +import md5 from 'js-md5'; function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } + "@babel/helpers - typeof"; - return _typeof(obj); + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); } function _classCallCheck(instance, Constructor) { @@ -33,6 +30,9 @@ function _defineProperties(target, props) { function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); return Constructor; } @@ -52,23 +52,36 @@ function _defineProperty(obj, key, value) { } function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } + if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; } function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var eventTypes = { @@ -101,6 +114,11 @@ var eventTypes = { ERROR: 'error' }; +var environments = { + BROWSER: 'browser', + CHROME_EXTENSION: 'chrome-extension' +}; + var defaultServers = [{ 'URLID': 59, 'Priority': 5, @@ -128,9 +146,7 @@ var defaultServers = [{ 'Domain': 'monitor5.voicenter.co.il' }]; -var Logger = -/*#__PURE__*/ -function () { +var Logger = /*#__PURE__*/function () { function Logger() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -273,9 +289,6 @@ function onNewEvent(_ref) { } break; - - default: - break; } } @@ -526,8 +539,8 @@ async function refreshToken(url, oldRefreshToken) { return res.json(); } -function loadExternalScript(url) { - return new Promise(function (resolve) { +function loadBrowserScript(url) { + return new Promise(function (resolve, reject) { var script = document.createElement('script'); script.src = url; @@ -543,8 +556,36 @@ function loadExternalScript(url) { }); } +async function loadExtensionScript(url) { + try { + var script = await fetch(url); + script = await script.text(); + eval(script); + } catch (e) { + return Promise.reject(e); + } +} + +async function loadExternalScript(url, environment, getSocketIOFunction) { + if (typeof getSocketIOFunction === 'function') { + self.io = getSocketIOFunction(url); + return; + } + + switch (environment) { + case environments.BROWSER: + await loadBrowserScript(url); + break; + + case environments.CHROME_EXTENSION: + await loadExtensionScript(url); + } +} + var defaultOptions = { url: "https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls", + environment: environments.BROWSER, + getSocketIOFunction: undefined, fallbackServer: { Domain: 'monitor5.voicenter.co.il', Priority: 0 @@ -576,15 +617,13 @@ var defaultOptions = { var allConnections = []; var listenersMap = new Map(); -var EventsSDK = -/*#__PURE__*/ -function () { +var EventsSDK = /*#__PURE__*/function () { function EventsSDK() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, EventsSDK); - this.options = Object.assign({}, defaultOptions, {}, options); + this.options = Object.assign({}, defaultOptions, options); this.argumentOptions = Object.assign({}, options); if (!this.options.loginType) { @@ -699,7 +738,7 @@ function () { }, { key: "_onConnectError", value: function _onConnectError(data) { - this._retryConnection('next'); + this._retryConnection('next', true); this.connected = false; this.Logger.log(eventTypes.CONNECT_ERROR, data); @@ -712,22 +751,24 @@ function () { }, { key: "_onReconnectFailed", value: function _onReconnectFailed() { - this._retryConnection('next'); + this._retryConnection('next', true); this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions); } }, { key: "_onConnectTimeout", value: function _onConnectTimeout() { - this._retryConnection('next'); + this._retryConnection('next', true); this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions); } }, { key: "_onReconnectAttempt", value: function _onReconnectAttempt() { + this.connected = false; + if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) { - this._retryConnection('next'); + this._retryConnection('next', true); return; } @@ -748,7 +789,7 @@ function () { this.connected = false; this.Logger.log(eventTypes.DISCONNECT, reason); - this._connect('next'); + this._connect('next', true); } }, { key: "_onKeepAlive", @@ -770,7 +811,7 @@ function () { key: "_onLoginResponse", value: async function _onLoginResponse(data) { if (data.Client) { - await loadExternalScript(data.Client); + await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction); } if (data.URL) { @@ -795,15 +836,15 @@ function () { await this._connect('default', true); } + if (data.TokenExpiry) { + this.options.tokenExpiry = data.TokenExpiry; + } + if (data.RefreshToken) { this.options.refreshToken = data.RefreshToken; this._handleTokenExpiry(); } - - if (data.TokenExpiry) { - this.options.tokenExpiry = data.TokenExpiry; - } } }, { key: "_handleTokenExpiry", @@ -819,8 +860,15 @@ function () { var timeout = date.getTime() - new Date().getTime() - 5000; // 5 seconds before expire setTimeout(async function () { + var Socket = null; var res = await refreshToken(_this.options.refreshTokenUrl, _this.options.refreshToken); - await _this._onLoginResponse(res); + + if (res.Data) { + Socket = res.Data.Socket; + return await _this._onLoginResponse(Socket); + } + + throw new Error("Error on refreshToken"); }, timeout); } }, { @@ -887,9 +935,13 @@ function () { var url = "".concat(protocol, "://").concat(domain); this.Logger.log('Connecting to..', url); this.closeAllConnections(); - var options = Object.assign({}, this.options, { + var options = { + reconnection: false, + perMessageDeflate: false, + upgrade: false, + transports: ['websocket'], debug: false - }); + }; if (this.token) { options.query = { @@ -897,19 +949,39 @@ function () { }; } - this.socket = window.io(url, options); + this.socket = self.io(url, options); allConnections.push(this.socket); this.connectionEstablished = true; } }, { key: "_initSocketEvents", value: function _initSocketEvents() { + var _this2 = this; + + this.socket.on(eventTypes.RECONNECT_ATTEMPT, function (data) { + return _this2._onReconnectAttempt(data); + }).on(eventTypes.RECONNECT_FAILED, function (data) { + return _this2._onReconnectFailed(data); + }).on(eventTypes.CONNECT, function (data) { + return _this2._onConnect(data); + }).on(eventTypes.CONNECT_TIMEOUT, function (data) { + return _this2._onConnectTimeout(data); + }).on(eventTypes.CONNECT_ERROR, function (data) { + return _this2._onConnectError(data); + }).on(eventTypes.RECONNECT_ERROR, function (data) { + return _this2._onReconnectAttempt(data); + }).on(eventTypes.ERROR, function (data) { + return _this2._onError(data); + }).on(eventTypes.DISCONNECT, function (data) { + return _this2._onDisconnect(data); + }); + this.socket.onpacket = this._onEvent.bind(this); this.socket.onevent = this._onEvent.bind(this); } }, { key: "_initKeepAlive", value: function _initKeepAlive() { - var _this2 = this; + var _this3 = this; if (this.keepAliveInterval) { clearInterval(this.keepAliveInterval); @@ -921,26 +993,27 @@ function () { this.keepAliveInterval = setInterval(async function () { var now = new Date().getTime(); - var delta = _this2.options.keepAliveTimeout * 2; + var delta = _this3.options.keepAliveTimeout * 2; - if (now > _this2.getLastEventTimestamp() + delta) { - await _this2._connect('next', true); + if (now > _this3.getLastEventTimestamp() + delta) { + await _this3._connect('next', true); return; } - if (!_this2.socket) { - _this2._initSocketConnection(); + if (!_this3.socket) { + _this3._initSocketConnection(); return; } - if (now > _this2.getLastEventTimestamp() + _this2.options.keepAliveTimeout) { - _this2.emit(eventTypes.KEEP_ALIVE, _this2.options.token); + if (now > _this3.getLastEventTimestamp() + _this3.options.keepAliveTimeout) { + _this3.emit(eventTypes.KEEP_ALIVE, _this3.options.token); + + return; } - }, this.options.keepAliveTimeout); - this.idleInterval = setInterval(function () { - _this2.reSync(false); - }, this.options.idleInterval); + }, this.options.keepAliveTimeout); // this.idleInterval = setInterval(() => { + // this.reSync(false) + // }, this.options.idleInterval) } }, { key: "_findCurrentServer", @@ -1020,7 +1093,7 @@ function () { }, { key: "_onEvent", value: function _onEvent(packet) { - var _this3 = this, + var _this4 = this, _eventMappings; if (!packet.data) { @@ -1040,9 +1113,9 @@ function () { } }); - var eventMappings = (_eventMappings = {}, _defineProperty(_eventMappings, eventTypes.RECONNECT_ATTEMPT, this._onReconnectAttempt), _defineProperty(_eventMappings, eventTypes.RECONNECT_FAILED, this._onReconnectFailed), _defineProperty(_eventMappings, eventTypes.CONNECT, this._onConnect), _defineProperty(_eventMappings, eventTypes.DISCONNECT, this._onDisconnect), _defineProperty(_eventMappings, eventTypes.ERROR, this._onError), _defineProperty(_eventMappings, eventTypes.CONNECT_ERROR, this._onConnectError), _defineProperty(_eventMappings, eventTypes.CONNECT_TIMEOUT, this._onConnectTimeout), _defineProperty(_eventMappings, eventTypes.KEEP_ALIVE_RESPONSE, this._onKeepAlive), _defineProperty(_eventMappings, eventTypes.LOGIN_RESPONSE, this._onLoginResponse), _defineProperty(_eventMappings, eventTypes.EXTENSION_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.QUEUES_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.DIALERS_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.LOGIN_STATUS, function () { - if (!_this3.connected) { - _this3._onConnect(); + var eventMappings = (_eventMappings = {}, _defineProperty(_eventMappings, eventTypes.KEEP_ALIVE_RESPONSE, this._onKeepAlive), _defineProperty(_eventMappings, eventTypes.LOGIN_RESPONSE, this._onLoginResponse), _defineProperty(_eventMappings, eventTypes.EXTENSION_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.QUEUES_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.DIALERS_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.LOGIN_STATUS, function () { + if (!_this4.connected) { + _this4._onConnect(); } }), _eventMappings); var eventHandler = eventMappings[evt.name]; @@ -1074,6 +1147,7 @@ function () { } await this._getToken(); + await this._getTabsSession(); await this.login(this.options.loginType); await this._getServers(); return true; @@ -1105,6 +1179,7 @@ function () { if (this.socket) { this.socket.disconnect(); + this.socket.close(); this.socket = null; } } @@ -1194,6 +1269,39 @@ function () { } } } + }, { + key: "_getTabsSession", + value: function _getTabsSession() { + if (this.options.environment !== environments.BROWSER) { + return Promise.resolve(); + } + + if (!window.sessionStorage.length) { + // Ask other tabs for session storage + localStorage.setItem('getSessionStorage', Date.now()); + } + + return new Promise(function (resolve) { + window.addEventListener('storage', function (event) { + if (event.key === 'getSessionStorage') { + // Some tab asked for the sessionStorage -> send it + localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); + localStorage.removeItem('sessionStorage'); + } else if (event.key === 'sessionStorage' && !sessionStorage.length) { + // sessionStorage is empty -> fill it + var data = JSON.parse(event.newValue); + + for (var key in data) { + if (data.hasOwnProperty(key)) { + window.sessionStorage.setItem(key, data[key]); + } + } + + resolve(); + } + }); + }); + } /** * Login (logs in based on the token/credentials provided) * @param type (login type. Can be token/user/code/account) @@ -1203,10 +1311,17 @@ function () { }, { key: "login", value: function login() { - var _this4 = this; + var _this5 = this; var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'token'; // throttle login for 1 second + var payload = { + token: this.options.token, + email: this.options.email, + username: this.options.username, + password: this.options.password + }; + var key = md5(JSON.stringify(payload)); var delay = 1000; if (this._lastLoginTimestamp + delay > new Date().getTime()) { @@ -1216,17 +1331,32 @@ function () { this._lastLoginTimestamp = new Date().getTime(); return new Promise(async function (resolve, reject) { try { - var url = getExternalLoginUrl(_this4.options.loginUrl, type); - var res = await externalLogin(url, { - token: _this4.options.token, - email: _this4.options.email, - username: _this4.options.username, - password: _this4.options.password - }); - await _this4._onLoginResponse(res); + var loginSession = window.sessionStorage.getItem(key); + + if (loginSession) { + loginSession = JSON.parse(loginSession); + + _this5.Logger.log('got data from session', loginSession); + + await _this5._onLoginResponse(loginSession); + return resolve(loginSession); + } + } catch (err) { + _this5.Logger.log('Error on getting session', err); + } + + try { + var url = getExternalLoginUrl(_this5.options.loginUrl, type); + var res = await externalLogin(url, payload); + await _this5._onLoginResponse(res); + + if (_this5.options.environment === environments.BROWSER) { + window.sessionStorage.setItem(key, JSON.stringify(res)); + } + resolve(res); } catch (err) { - _this4.servers = _this4.argumentOptions.servers || defaultServers; + _this5.servers = _this5.argumentOptions.servers || defaultServers; reject(err); } }); diff --git a/dist/voicenter-events-sdk.umd.js b/dist/voicenter-events-sdk.umd.js index 2f365d6e..2ac3cb84 100644 --- a/dist/voicenter-events-sdk.umd.js +++ b/dist/voicenter-events-sdk.umd.js @@ -1,2 +1,12 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).VoicenterEventsSDK=t()}(this,function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.debug=n.debug}return i(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),i=(new Date).toUTCString();console.log("%c ".concat(i,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),i=(new Date).toUTCString();console.error("".concat(i,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();var l=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},h="object"==typeof u&&u&&u.Object===Object&&u,v="object"==typeof self&&self&&self.Object===Object&&self,f=h||v||Function("return this")(),p=function(){return f.Date.now()},E=f.Symbol,y=Object.prototype,d=y.hasOwnProperty,m=y.toString,g=E?E.toStringTag:void 0;var T=function(e){var t=d.call(e,g),n=e[g];try{e[g]=void 0;var i=!0}catch(e){}var o=m.call(e);return i&&(t?e[g]=n:delete e[g]),o},_=Object.prototype.toString;var k=function(e){return _.call(e)},S="[object Null]",N="[object Undefined]",O=E?E.toStringTag:void 0;var C=function(e){return null==e?void 0===e?N:S:O&&O in Object(e)?T(e):k(e)};var D=function(e){return null!=e&&"object"==typeof e},R="[object Symbol]";var A=function(e){return"symbol"==typeof e||D(e)&&C(e)==R},I=NaN,b=/^\s+|\s+$/g,L=/^[-+]0x[0-9a-f]+$/i,w=/^0b[01]+$/i,x=/^0o[0-7]+$/i,U=parseInt;var P=function(e){if("number"==typeof e)return e;if(A(e))return I;if(l(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=l(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(b,"");var n=w.test(e);return n||x.test(e)?U(e.slice(2),n?2:8):L.test(e)?I:+e},M="Expected a function",j=Math.max,F=Math.min;var Q=function(e,t,n){var i,o,r,s,a,c,u=0,h=!1,v=!1,f=!0;if("function"!=typeof e)throw new TypeError(M);function E(t){var n=i,r=o;return i=o=void 0,u=t,s=e.apply(r,n)}function y(e){var n=e-c;return void 0===c||n>=t||n<0||v&&e-u>=r}function d(){var e=p();if(y(e))return m(e);a=setTimeout(d,function(e){var n=t-(e-c);return v?F(n,r-(e-u)):n}(e))}function m(e){return a=void 0,f&&i?E(e):(i=o=void 0,s)}function g(){var e=p(),n=y(e);if(i=arguments,o=this,c=e,n){if(void 0===a)return function(e){return u=e,a=setTimeout(d,t),h?E(e):s}(c);if(v)return clearTimeout(a),a=setTimeout(d,t),E(c)}return void 0===a&&(a=setTimeout(d,t)),s}return t=P(t)||0,l(n)&&(h=!!n.leading,r=(v="maxWait"in n)?j(P(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),g.cancel=function(){void 0!==a&&clearTimeout(a),u=0,i=c=o=a=void 0},g.flush=function(){return void 0===a?s:m(p())},g},V=[s.CONNECT_ERROR,s.CONNECT_TIMEOUT,s.DISCONNECT,s.RECONNECT_ATTEMPT,s.RECONNECTING,s.RECONNECT_ERROR,s.RECONNECT_FAILED,{NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"}.CLOSE];function G(e){var t=e.eventData,n=e.store,i=e.extensionsModuleName,o=e.queuesModuleName,r=t.name,a=t.data;switch(n.commit("".concat(i,"/SET_IS_SOCKET_OFFLINE"),function(e){var t=e.name;return V.includes(t)}(t)),r){case s.ALL_EXTENSION_STATUS:n.dispatch("".concat(i,"/setExtensions"),a.extensions);break;case s.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[i].extensions.findIndex(function(e){return e.userID===c.userID});-1!==l&&n.dispatch("".concat(i,"/updateExtension"),{index:l,extension:c});break;case s.LOGIN_STATUS:n.commit("".concat(i,"/SET_SERVER_TIME"),a),n.dispatch("".concat(o,"/setQueues"),a.queues);break;case s.QUEUE_EVENT:var u=a.data,h=(n.state[o].all||[]).findIndex(function(e){return e.QueueID===u.QueueID});-1!==h&&n.dispatch("".concat(o,"/updateQueue"),{index:h,queue:u})}}var K,q=100,W=101,X="hold",J="SET_EXTENSIONS",$="UPDATE_EXTENSIONS",B="SET_SERVER_TIME",Y="SET_IS_SOCKET_OFFLINE";function H(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===X}var z,Z={namespaced:!0,state:{extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations:(o(K={},J,function(e,t){e.extensions=t}),o(K,$,function(e,t){var n=t.index,i=t.extension;e.extensions.splice(n,1,i)}),o(K,B,function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||108e5,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime}),o(K,Y,function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null}),K),actions:{setExtensions:async function(e,t){(0,e.commit)(J,t)},updateExtension:async function(e,t){(0,e.commit)($,t)}},getters:{isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>6e4},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach(function(e){e.calls.length>0&&(e.calls.filter(H).length?e.representativeStatus=W:e.representativeStatus=q),n.push(e)}),t?n.filter(function(e){return 2!==e.representativeStatus}):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter(function(t){return t.representativeStatus===e}).length||0}}}},ee="SET_QUEUES",te="UPDATE_QUEUES",ne={namespaced:!0,state:{all:[]},mutations:(o(z={},ee,function(e,t){e.all=t}),o(z,te,function(e,t){var n=t.index,i=t.queue;e.all.splice(n,1,i)}),z),actions:{setQueues:async function(e,t){(0,e.commit)(ee,t)},updateQueue:async function(e,t){(0,e.commit)(te,t)}},getters:{queueWithActiveCalls:function(e){return e.all.filter(function(e){return e.Calls.length})},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach(function(e){var t=e.Calls||[];n.push.apply(n,r(t))}),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter(function(e){return t.includes(e.QueueID)}):e.all}}}};var ie={url:"https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls",fallbackServer:{Domain:"monitor5.voicenter.co.il",Priority:0},loginUrl:"https://loginapi.voicenter.co.il/monitorAPI/Login",refreshTokenUrl:"https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken",servers:a,token:null,loginType:"token",forceNew:!0,reconnectionDelay:1e4,reconnectionDelayMax:1e4,maxReconnectAttempts:2,timeout:1e4,keepAliveTimeout:6e4,idleInterval:3e5,protocol:"https",transports:["websocket"],upgrade:!1,store:null,extensionsModuleName:"sdkExtensions",queuesModuleName:"sdkQueues",serverFetchStrategy:"remote",serverType:null},oe=[],re=new Map,se=function(){function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(t(this,n),this.options=Object.assign({},ie,{},e),this.argumentOptions=Object.assign({},e),!this.options.loginType)throw new Error("A login type should be provided");this.Logger=new c(this.options),this.servers=[],this.server=null,this.socket=null,this.connected=!1,this.connectionEstablished=!1,this._lastEventTimestamp=(new Date).getTime(),this._initReconnectOptions(),this._listenersMap=re,this._retryConnection=Q(this._connect.bind(this),this.reconnectOptions.reconnectionDelay,{leading:!0,trailing:!1}),this._lastLoginTimestamp=null,this._handleLocalEvents=!1,this._registerExtensionsModule(),this._registerQueueModule()}return i(n,[{key:"getLastEventTimestamp",value:function(){return this._lastEventTimestamp}},{key:"_reSync",value:function(){this.emit(s.RESYNC,{cache:!1})}},{key:"_registerExtensionsModule",value:function(){var e=this.options.extensionsModuleName||"sdkExtensions";this._validateStoreModule(e)&&(this.options.store.registerModule(e,Z),this._handleLocalEvents=!0)}},{key:"_registerQueueModule",value:function(){var e=this.options.queuesModuleName||"sdkQueues";this._validateStoreModule(e)&&(this.options.store.registerModule(e,ne),this._handleLocalEvents=!0)}},{key:"_validateStoreModule",value:function(e){var t=this.options.store;return!!t&&(t.state[e]&&t.unregisterModule(e),!0)}},{key:"_initReconnectOptions",value:function(){this.reconnectOptions={retryCount:1,maxReconnectAttempts:this.options.maxReconnectAttempts,reconnectionDelay:this.options.reconnectionDelay,minReconnectionDelay:this.options.reconnectionDelay,maxReconnectionDelay:3e5}}},{key:"_onConnect",value:function(){this._initReconnectDelays(),this.connected=!0,this.Logger.log(s.CONNECT,this.reconnectOptions)}},{key:"_initReconnectDelays",value:function(){this.reconnectOptions.retryCount=1;var e=this.reconnectOptions.minReconnectionDelay;this.reconnectOptions.reconnectionDelay=e,this.socket.io.reconnectionDelay(e),this.socket.io.reconnectionDelayMax(e)}},{key:"_onConnectError",value:function(e){this._retryConnection("next"),this.connected=!1,this.Logger.log(s.CONNECT_ERROR,e)}},{key:"_onError",value:function(e){this.Logger.log(s.ERROR,e)}},{key:"_onReconnectFailed",value:function(){this._retryConnection("next"),this.Logger.log(s.RECONNECT_FAILED,this.reconnectOptions)}},{key:"_onConnectTimeout",value:function(){this._retryConnection("next"),this.Logger.log(s.CONNECT_TIMEOUT,this.reconnectOptions)}},{key:"_onReconnectAttempt",value:function(){if(this.reconnectOptions.retryCount>=this.reconnectOptions.maxReconnectAttempts)this._retryConnection("next");else{if(this.reconnectOptions.reconnectionDelay0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=null;if("default"===e)n=this._findCurrentServer();else if("next"===e)n=this._findNextAvailableServer();else{if("prev"!==e)throw new Error("Incorrect 'server' parameter passed to connect function ".concat(e,". Should be 'default' or 'next'"));n=this._findMaxPriorityServer()}n||(this.server=this._findCurrentServer()),this._initSocketConnection(),this._initSocketEvents(),this._initKeepAlive(),this._initReconnectDelays(),t||await this.login(this.options.loginType)}},{key:"_checkInit",value:function(){if(!this.connectionEstablished)throw new Error('Make sure you call "sdk.init()" before doing other operations.')}},{key:"_initSocketConnection",value:function(){var e=this.server.Domain,t=this.options.protocol,n="".concat(t,"://").concat(e);this.Logger.log("Connecting to..",n),this.closeAllConnections();var i=Object.assign({},this.options,{debug:!1});this.token&&(i.query={token:this.token}),this.socket=window.io(n,i),oe.push(this.socket),this.connectionEstablished=!0}},{key:"_initSocketEvents",value:function(){this.socket.onevent=this._onEvent.bind(this)}},{key:"_initKeepAlive",value:function(){var e=this;this.keepAliveInterval&&clearInterval(this.keepAliveInterval),this.idleInterval&&clearInterval(this.idleInterval),this.keepAliveInterval=setInterval(async function(){var t=(new Date).getTime(),n=2*e.options.keepAliveTimeout;t>e.getLastEventTimestamp()+n?await e._connect("next",!0):e.socket?t>e.getLastEventTimestamp()+e.options.keepAliveTimeout&&e.emit(s.KEEP_ALIVE,e.options.token):e._initSocketConnection()},this.options.keepAliveTimeout),this.idleInterval=setInterval(function(){e.reSync(!1)},this.options.idleInterval)}},{key:"_findCurrentServer",value:function(){var e=null;return this.servers.length&&(e=this.servers[0]),this.server=e,this.server||(this.server=this.options.fallbackServer),this.server}},{key:"_findNextAvailableServer",value:function(){var e=this.server.Priority;if(this.Logger.log("Failover -> Trying to find another server"),e===this.servers.length-1)return this._findMaxPriorityServer();var t=e+1,n=this.servers.find(function(e){return e.Priority===t});return n||(n=this._findMaxPriorityServer())?this.server.Domain!==n.Domain?(this.server=n,this.server):(this.Logger.log("Failover -> Found new server. Connecting to it...",this.server),null):void 0}},{key:"_findMaxPriorityServer",value:function(){this.Logger.log("Fallback -> Trying to find previous server","_findMaxPriorityServer");var e,t,n,i=(e=this.servers,t=null,n=Number.MAX_SAFE_INTEGER,e.forEach(function(e){e.Priority Trying to find previous server",this.server),this.server):null:(this.server=i,this.server)}},{key:"_getServers",value:async function(){"static"===this.options.serverFetchStrategy&&this.argumentOptions.servers&&Array.isArray(this.argumentOptions.servers)&&this.argumentOptions.servers.length>1&&(this.servers=this.argumentOptions.servers)}},{key:"_onEvent",value:function(e){var t,n=this;if(e.data){var i=this._parsePacket(e);this.Logger.log("New event -> ".concat(i.name),i),this._lastEventTimestamp=(new Date).getTime(),this._listenersMap.forEach(function(e,t){"*"===t?e(i):i.name===t&&e(i)});var r=(o(t={},s.RECONNECT_ATTEMPT,this._onReconnectAttempt),o(t,s.RECONNECT_FAILED,this._onReconnectFailed),o(t,s.CONNECT,this._onConnect),o(t,s.DISCONNECT,this._onDisconnect),o(t,s.ERROR,this._onError),o(t,s.CONNECT_ERROR,this._onConnectError),o(t,s.CONNECT_TIMEOUT,this._onConnectTimeout),o(t,s.KEEP_ALIVE_RESPONSE,this._onKeepAlive),o(t,s.LOGIN_RESPONSE,this._onLoginResponse),o(t,s.EXTENSION_UPDATED,this._reSync),o(t,s.QUEUES_UPDATED,this._reSync),o(t,s.DIALERS_UPDATED,this._reSync),o(t,s.LOGIN_STATUS,function(){n.connected||n._onConnect()}),t)[i.name];r&&"function"==typeof r&&r.call(this,i.data),this._handleLocalEvents&&G(Object.assign({eventData:i},this.options))}}},{key:"init",value:async function(){return!!this.connectionEstablished||(this.socket&&this.emit(s.CLOSE),await this._getToken(),await this.login(this.options.loginType),await this._getServers(),!0)}},{key:"setToken",value:async function(e){this.options.token=e,this.disconnect(),await this.init()}},{key:"closeAllConnections",value:function(){oe.forEach(function(e){e.close(),e.disconnect()}),oe=[],this.socket&&(this.socket.disconnect(),this.socket=null)}},{key:"disconnect",value:function(){this._listenersMap=new Map,this.closeAllConnections()}},{key:"on",value:function(e,t){this._listenersMap.set(e,t),this._checkInit()}},{key:"emit",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._checkInit(),this.Logger.log("EMIT -> ".concat(e),t),this.socket.emit(e,t)}},{key:"reSync",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.emit(s.RESYNC,{cache:e})}},{key:"setMonitorUrl",value:async function(e){var t=this.options.url,n=this.options.serverFetchStrategy;try{if(!e)return;this.options.url=e,this.options.serverFetchStrategy="remote",await this.init()}catch(e){this._onError(e),this.options.url=t,this.options.serverFetchStrategy=n,await this.init()}}},{key:"_getToken",value:function(){var e=this.options.loginType;if(this.token=this.options.token,"token"===e&&!this.token)throw new Error("Token login type expects the token option to be provided")}},{key:"login",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"token";return this._lastLoginTimestamp+1e3>(new Date).getTime()?Promise.resolve():(this._lastLoginTimestamp=(new Date).getTime(),new Promise(async function(n,i){try{var o=(s=e.options.loginUrl,"user"===(c=t)?"".concat(s,"/User"):"token"===c?"".concat(s,"/Token"):"account"===c?"".concat(s,"/Account"):s),r=await async function(e,t){var n=t.email,i=t.password,o=t.token,r=t.username,s=null;s=o?JSON.stringify({token:o}):r?JSON.stringify({username:r,password:i}):JSON.stringify({email:n,pin:i});var a=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:s}),c=await a.json();if(c.error)throw new Error(c.error);return c.Data.Socket}(o,{token:e.options.token,email:e.options.email,username:e.options.username,password:e.options.password});await e._onLoginResponse(r),n(r)}catch(t){e.servers=e.argumentOptions.servers||a,i(t)}var s,c}))}}]),n}();return"undefined"!=typeof window&&(window.EventsSDK=se),se}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).VoicenterEventsSDK=t()}(this,(function(){"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(v,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function v(){var e=now_1();if(y(e))return _(e);a=setTimeout(v,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function _(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(v,t),p(c)}return void 0===a&&(a=setTimeout(v,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:_(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=t.name,s=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),r){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),s.extensions);break;case eventTypes.EXTENSION_EVENT:var a=s.data;a.lastEvent={reason:s.reason,ivrid:s.ivruniqueid};var c=n.state[o].extensions.findIndex((function(e){return e.userID===a.userID}));-1!==c&&n.dispatch("".concat(o,"/updateExtension"),{index:c,extension:a});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),s),n.dispatch("".concat(i,"/setQueues"),s.queues);break;case eventTypes.QUEUE_EVENT:var l=s.data,u=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===l.QueueID}));-1!==u&&n.dispatch("".concat(i,"/updateQueue"),{index:u,queue:l})}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Priority>2]|=e[r]<>6,c[i++]=128|63&o):o<55296||o>=57344?(c[i++]=224|o>>12,c[i++]=128|o>>6&63,c[i++]=128|63&o):(o=65536+((1023&o)<<10|1023&e.charCodeAt(++r)),c[i++]=240|o>>18,c[i++]=128|o>>12&63,c[i++]=128|o>>6&63,c[i++]=128|63&o);else for(i=this.start;r>2]|=o<>2]|=(192|o>>6)<>2]|=(128|63&o)<=57344?(a[i>>2]|=(224|o>>12)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<>2]|=(240|o>>18)<>2]|=(128|o>>12&63)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<=64?(this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,o,i,r,s=this.blocks;this.first?t=((t=((e=((e=s[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(o=((o=(-1732584194^2004318071&e)+s[1]-117830708)<<12|o>>>20)+e<<0)&(-271733879^e))+s[2]-1126478375)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((o=this.h3)^t&(n^o))+s[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[1]-389564586)<<12|o>>>20)+e<<0)&(e^t))+s[2]+606105819)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(o^t&(n^o))+s[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[5]+1200080426)<<12|o>>>20)+e<<0)&(e^t))+s[6]-1473231341)<<17|n>>>15)+o<<0)&(o^e))+s[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[9]-1958414417)<<12|o>>>20)+e<<0)&(e^t))+s[10]-42063)<<17|n>>>15)+o<<0)&(o^e))+s[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[13]-40341101)<<12|o>>>20)+e<<0)&(e^t))+s[14]-1502002290)<<17|n>>>15)+o<<0)&(o^e))+s[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[1]-165796510)<<5|e>>>27)+t<<0)^t))+s[6]-1069501632)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[11]+643717713)<<14|n>>>18)+o<<0)^o))+s[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[5]-701558691)<<5|e>>>27)+t<<0)^t))+s[10]+38016083)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[15]-660478335)<<14|n>>>18)+o<<0)^o))+s[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[9]+568446438)<<5|e>>>27)+t<<0)^t))+s[14]-1019803690)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[3]-187363961)<<14|n>>>18)+o<<0)^o))+s[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[13]-1444681467)<<5|e>>>27)+t<<0)^t))+s[2]-51403784)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[7]+1735328473)<<14|n>>>18)+o<<0)^o))+s[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[5]-378558)<<4|e>>>28)+t<<0))+s[8]-2022574463)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[11]+1839030562)<<16|n>>>16)+o<<0))+s[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[1]-1530992060)<<4|e>>>28)+t<<0))+s[4]+1272893353)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[7]-155497632)<<16|n>>>16)+o<<0))+s[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[13]+681279174)<<4|e>>>28)+t<<0))+s[0]-358537222)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[3]-722521979)<<16|n>>>16)+o<<0))+s[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[9]-640364487)<<4|e>>>28)+t<<0))+s[12]-421815835)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[15]+530742520)<<16|n>>>16)+o<<0))+s[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[0]-198630844)<<6|e>>>26)+t<<0)|~n))+s[7]+1126891415)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[14]-1416354905)<<15|n>>>17)+o<<0)|~e))+s[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+s[3]-1894986606)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[10]-1051523)<<15|n>>>17)+o<<0)|~e))+s[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+s[15]-30611744)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[6]-1560198380)<<15|n>>>17)+o<<0)|~e))+s[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[4]-145523070)<<6|e>>>26)+t<<0)|~n))+s[11]-1120210379)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[2]+718787259)<<15|n>>>17)+o<<0)|~e))+s[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=o+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+o<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[15&o]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return[255&e,e>>8&255,e>>16&255,e>>24&255,255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,o="",i=this.array(),r=0;r<15;)e=i[r++],t=i[r++],n=i[r++],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=i[r],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:root.md5=exports}()})),defaultOptions={url:"https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls",environment:environments.BROWSER,getSocketIOFunction:void 0,fallbackServer:{Domain:"monitor5.voicenter.co.il",Priority:0},loginUrl:"https://loginapi.voicenter.co.il/monitorAPI/Login",refreshTokenUrl:"https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken",servers:defaultServers,token:null,loginType:"token",forceNew:!0,reconnectionDelay:1e4,reconnectionDelayMax:1e4,maxReconnectAttempts:2,timeout:1e4,keepAliveTimeout:6e4,idleInterval:3e5,protocol:"https",transports:["websocket"],upgrade:!1,store:null,extensionsModuleName:"sdkExtensions",queuesModuleName:"sdkQueues",serverFetchStrategy:"remote",serverType:null},allConnections=[],listenersMap=new Map,EventsSDK=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(_classCallCheck(this,e),this.options=Object.assign({},defaultOptions,t),this.argumentOptions=Object.assign({},t),!this.options.loginType)throw new Error("A login type should be provided");this.Logger=new Logger(this.options),this.servers=[],this.server=null,this.socket=null,this.connected=!1,this.connectionEstablished=!1,this._lastEventTimestamp=(new Date).getTime(),this._initReconnectOptions(),this._listenersMap=listenersMap,this._retryConnection=debounce_1(this._connect.bind(this),this.reconnectOptions.reconnectionDelay,{leading:!0,trailing:!1}),this._lastLoginTimestamp=null,this._handleLocalEvents=!1,this._registerExtensionsModule(),this._registerQueueModule()}return _createClass(e,[{key:"getLastEventTimestamp",value:function(){return this._lastEventTimestamp}},{key:"_reSync",value:function(){this.emit(eventTypes.RESYNC,{cache:!1})}},{key:"_registerExtensionsModule",value:function(){var e=this.options.extensionsModuleName||"sdkExtensions";this._validateStoreModule(e)&&(this.options.store.registerModule(e,extensionsModule),this._handleLocalEvents=!0)}},{key:"_registerQueueModule",value:function(){var e=this.options.queuesModuleName||"sdkQueues";this._validateStoreModule(e)&&(this.options.store.registerModule(e,queuesModule),this._handleLocalEvents=!0)}},{key:"_validateStoreModule",value:function(e){var t=this.options.store;return!!t&&(t.state[e]&&t.unregisterModule(e),!0)}},{key:"_initReconnectOptions",value:function(){this.reconnectOptions={retryCount:1,maxReconnectAttempts:this.options.maxReconnectAttempts,reconnectionDelay:this.options.reconnectionDelay,minReconnectionDelay:this.options.reconnectionDelay,maxReconnectionDelay:3e5}}},{key:"_onConnect",value:function(){this._initReconnectDelays(),this.connected=!0,this.Logger.log(eventTypes.CONNECT,this.reconnectOptions)}},{key:"_initReconnectDelays",value:function(){this.reconnectOptions.retryCount=1;var e=this.reconnectOptions.minReconnectionDelay;this.reconnectOptions.reconnectionDelay=e,this.socket.io.reconnectionDelay(e),this.socket.io.reconnectionDelayMax(e)}},{key:"_onConnectError",value:function(e){this._retryConnection("next",!0),this.connected=!1,this.Logger.log(eventTypes.CONNECT_ERROR,e)}},{key:"_onError",value:function(e){this.Logger.log(eventTypes.ERROR,e)}},{key:"_onReconnectFailed",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.RECONNECT_FAILED,this.reconnectOptions)}},{key:"_onConnectTimeout",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.CONNECT_TIMEOUT,this.reconnectOptions)}},{key:"_onReconnectAttempt",value:function(){if(this.connected=!1,this.reconnectOptions.retryCount>=this.reconnectOptions.maxReconnectAttempts)this._retryConnection("next",!0);else{if(this.reconnectOptions.reconnectionDelay0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=null;if("default"===e)n=this._findCurrentServer();else if("next"===e)n=this._findNextAvailableServer();else{if("prev"!==e)throw new Error("Incorrect 'server' parameter passed to connect function ".concat(e,". Should be 'default' or 'next'"));n=this._findMaxPriorityServer()}n||(this.server=this._findCurrentServer()),this._initSocketConnection(),this._initSocketEvents(),this._initKeepAlive(),this._initReconnectDelays(),t||await this.login(this.options.loginType)}},{key:"_checkInit",value:function(){if(!this.connectionEstablished)throw new Error('Make sure you call "sdk.init()" before doing other operations.')}},{key:"_initSocketConnection",value:function(){var e=this.server.Domain,t=this.options.protocol,n="".concat(t,"://").concat(e);this.Logger.log("Connecting to..",n),this.closeAllConnections();var o={reconnection:!1,perMessageDeflate:!1,upgrade:!1,transports:["websocket"],debug:!1};this.token&&(o.query={token:this.token}),this.socket=self.io(n,o),allConnections.push(this.socket),this.connectionEstablished=!0}},{key:"_initSocketEvents",value:function(){var e=this;this.socket.on(eventTypes.RECONNECT_ATTEMPT,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.RECONNECT_FAILED,(function(t){return e._onReconnectFailed(t)})).on(eventTypes.CONNECT,(function(t){return e._onConnect(t)})).on(eventTypes.CONNECT_TIMEOUT,(function(t){return e._onConnectTimeout(t)})).on(eventTypes.CONNECT_ERROR,(function(t){return e._onConnectError(t)})).on(eventTypes.RECONNECT_ERROR,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.ERROR,(function(t){return e._onError(t)})).on(eventTypes.DISCONNECT,(function(t){return e._onDisconnect(t)})),this.socket.onpacket=this._onEvent.bind(this),this.socket.onevent=this._onEvent.bind(this)}},{key:"_initKeepAlive",value:function(){var e=this;this.keepAliveInterval&&clearInterval(this.keepAliveInterval),this.idleInterval&&clearInterval(this.idleInterval),this.keepAliveInterval=setInterval((async function(){var t=(new Date).getTime(),n=2*e.options.keepAliveTimeout;t>e.getLastEventTimestamp()+n?await e._connect("next",!0):e.socket?t>e.getLastEventTimestamp()+e.options.keepAliveTimeout&&e.emit(eventTypes.KEEP_ALIVE,e.options.token):e._initSocketConnection()}),this.options.keepAliveTimeout)}},{key:"_findCurrentServer",value:function(){var e=null;return this.servers.length&&(e=this.servers[0]),this.server=e,this.server||(this.server=this.options.fallbackServer),this.server}},{key:"_findNextAvailableServer",value:function(){var e=this.server.Priority;if(this.Logger.log("Failover -> Trying to find another server"),e===this.servers.length-1)return this._findMaxPriorityServer();var t=e+1,n=this.servers.find((function(e){return e.Priority===t}));return n||(n=this._findMaxPriorityServer())?this.server.Domain!==n.Domain?(this.server=n,this.server):(this.Logger.log("Failover -> Found new server. Connecting to it...",this.server),null):void 0}},{key:"_findMaxPriorityServer",value:function(){this.Logger.log("Fallback -> Trying to find previous server","_findMaxPriorityServer");var e=getServerWithHighestPriority(this.servers);return this.server?this.server&&e.Domain!==this.server.Domain?(this.server=e,this.Logger.log("Fallback -> Trying to find previous server",this.server),this.server):null:(this.server=e,this.server)}},{key:"_getServers",value:async function(){"static"===this.options.serverFetchStrategy&&this.argumentOptions.servers&&Array.isArray(this.argumentOptions.servers)&&this.argumentOptions.servers.length>1&&(this.servers=this.argumentOptions.servers)}},{key:"_onEvent",value:function(e){var t,n=this;if(e.data){var o=this._parsePacket(e);this.Logger.log("New event -> ".concat(o.name),o),this._lastEventTimestamp=(new Date).getTime(),this._listenersMap.forEach((function(e,t){("*"===t||o.name===t)&&e(o)}));var i=(_defineProperty(t={},eventTypes.KEEP_ALIVE_RESPONSE,this._onKeepAlive),_defineProperty(t,eventTypes.LOGIN_RESPONSE,this._onLoginResponse),_defineProperty(t,eventTypes.EXTENSION_UPDATED,this._reSync),_defineProperty(t,eventTypes.QUEUES_UPDATED,this._reSync),_defineProperty(t,eventTypes.DIALERS_UPDATED,this._reSync),_defineProperty(t,eventTypes.LOGIN_STATUS,(function(){n.connected||n._onConnect()})),t)[o.name];i&&"function"==typeof i&&i.call(this,o.data),this._handleLocalEvents&&onNewEvent(Object.assign({eventData:o},this.options))}}},{key:"init",value:async function(){return this.connectionEstablished||(this.socket&&this.emit(eventTypes.CLOSE),await this._getToken(),await this._getTabsSession(),await this.login(this.options.loginType),await this._getServers()),!0}},{key:"setToken",value:async function(e){this.options.token=e,this.disconnect(),await this.init()}},{key:"closeAllConnections",value:function(){allConnections.forEach((function(e){e.close(),e.disconnect()})),allConnections=[],this.socket&&(this.socket.disconnect(),this.socket.close(),this.socket=null)}},{key:"disconnect",value:function(){this._listenersMap=new Map,this.closeAllConnections()}},{key:"on",value:function(e,t){this._listenersMap.set(e,t),this._checkInit()}},{key:"emit",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._checkInit(),this.Logger.log("EMIT -> ".concat(e),t),this.socket.emit(e,t)}},{key:"reSync",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.emit(eventTypes.RESYNC,{cache:e})}},{key:"setMonitorUrl",value:async function(e){var t=this.options.url,n=this.options.serverFetchStrategy;try{if(!e)return;this.options.url=e,this.options.serverFetchStrategy="remote",await this.init()}catch(e){this._onError(e),this.options.url=t,this.options.serverFetchStrategy=n,await this.init()}}},{key:"_getToken",value:function(){var e=this.options.loginType;if(this.token=this.options.token,"token"===e&&!this.token)throw new Error("Token login type expects the token option to be provided")}},{key:"_getTabsSession",value:function(){return this.options.environment!==environments.BROWSER?Promise.resolve():(window.sessionStorage.length||localStorage.setItem("getSessionStorage",Date.now()),new Promise((function(e){window.addEventListener("storage",(function(t){if("getSessionStorage"===t.key)localStorage.setItem("sessionStorage",JSON.stringify(window.sessionStorage)),localStorage.removeItem("sessionStorage");else if("sessionStorage"===t.key&&!sessionStorage.length){var n=JSON.parse(t.newValue);for(var o in n)n.hasOwnProperty(o)&&window.sessionStorage.setItem(o,n[o]);e()}}))})))}},{key:"login",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"token",n={token:this.options.token,email:this.options.email,username:this.options.username,password:this.options.password},o=md5(JSON.stringify(n)),i=1e3;return this._lastLoginTimestamp+i>(new Date).getTime()?Promise.resolve():(this._lastLoginTimestamp=(new Date).getTime(),new Promise((async function(i,r){try{var s=window.sessionStorage.getItem(o);if(s)return s=JSON.parse(s),e.Logger.log("got data from session",s),await e._onLoginResponse(s),i(s)}catch(t){e.Logger.log("Error on getting session",t)}try{var a=getExternalLoginUrl(e.options.loginUrl,t),c=await externalLogin(a,n);await e._onLoginResponse(c),e.options.environment===environments.BROWSER&&window.sessionStorage.setItem(o,JSON.stringify(c)),i(c)}catch(t){e.servers=e.argumentOptions.servers||defaultServers,r(t)}})))}}]),e}();return"undefined"!=typeof window&&(window.EventsSDK=EventsSDK),EventsSDK})); //# sourceMappingURL=voicenter-events-sdk.umd.js.map diff --git a/dist/voicenter-events-sdk.umd.js.map b/dist/voicenter-events-sdk.umd.js.map index 094f9500..56da2e4e 100644 --- a/dist/voicenter-events-sdk.umd.js.map +++ b/dist/voicenter-events-sdk.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/sdk.js","../src/utils/loadExternalScript.js","../src/utils.js","../src/utils/externalLogin.js","../src/index.js"],"sourcesContent":["export default {\n LOGIN_STATUS: 'loginStatus',\n LOGIN: 'login',\n LOGIN_USER: 'loginUser',\n LOGIN_CODE: 'loginUserCode',\n LOGIN_ACCOUNT: 'loginAccount',\n LOGIN_RESPONSE: 'loginResponse',\n QUEUE_EVENT: 'QueueEvent',\n QUEUES_UPDATED: 'QueuesUpdated',\n DIALERS_UPDATED: 'DialersUpdated',\n EXTENSION_EVENT: 'ExtensionEvent',\n EXTENSION_UPDATED: 'ExtensionsUpdated',\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\n CONNECT: 'connect',\n CONNECT_ERROR: 'connect_error',\n CONNECT_TIMEOUT: 'connect_timeout',\n DISCONNECT: 'disconnect',\n PONG: 'pong',\n RECONNECT: 'reconnect',\n RECONNECT_ATTEMPT: 'reconnect_attempt',\n RESYNC: 'resync',\n RECONNECTING: 'reconnecting',\n RECONNECT_ERROR: 'reconnect_error',\n RECONNECT_FAILED: 'reconnect_failed',\n KEEP_ALIVE: 'keepalive',\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\n CLOSE: 'closeme',\n ERROR: 'error',\n}\n","export const defaultServers = [{\n 'URLID': 59,\n 'Priority': 5,\n 'Version': 2,\n 'Domain': 'monitor1.voicenter.co'\n}, {\n 'URLID': 3,\n 'Priority': 4,\n 'Version': 2,\n 'Domain': 'monitor3.voicenter.co.il'\n}, {\n 'URLID': 4,\n 'Priority': 3,\n 'Version': 2,\n 'Domain': 'monitor4.voicenter.co.il'\n}, {\n 'URLID': 11,\n 'Priority': 2,\n 'Version': 2,\n 'Domain': 'monitor11.voicenter.co'\n}, {\n 'URLID': 5,\n 'Priority': 0,\n 'Version': 2,\n 'Domain': 'monitor5.voicenter.co.il'\n}];\n","\nclass Logger {\n constructor(options = {}) {\n this.debug = options.debug\n }\n\n /**\n * Logs to console a colored message\n * @param message\n * @param data\n * @private\n */\n _log(message, data) {\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\n let now = new Date().toUTCString()\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\n }\n\n /**\n * Logs to console a colored message\n * @param message\n * @param data\n * @private\n */\n _error(message, data) {\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\n let now = new Date().toUTCString()\n console.error(`${now}: ${toLog}`)\n }\n\n /**\n * Logs messages in case debug mode is set\n * @param message\n * @param data\n */\n log(message, data) {\n if (this.debug) {\n if (message && !data) {\n this._log(message)\n } else {\n this._log(message, data)\n }\n }\n }\n /**\n * Logs error messages in case debug mode is set\n * @param message\n * @param data\n */\n error(message, data) {\n if (this.debug) {\n if (message && !data) {\n this._error(message)\n } else {\n this._error(message, data)\n }\n }\n }\n}\n\nexport default Logger\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\n\nexport const sdkEventReasons = {\n NEWCALL: 'NEWCALL',\n ANSWER: 'ANSWER',\n HANGUP: 'HANGUP'\n}\nconst offlineEvents = [\n eventTypes.CONNECT_ERROR,\n eventTypes.CONNECT_TIMEOUT,\n eventTypes.DISCONNECT,\n eventTypes.RECONNECT_ATTEMPT,\n eventTypes.RECONNECTING,\n eventTypes.RECONNECT_ERROR,\n eventTypes.RECONNECT_FAILED,\n sdkEventReasons.CLOSE\n]\n\nfunction isSocketOffline(event) {\n let { name } = event\n return offlineEvents.includes(name)\n}\n\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName }) {\n let { name, data } = eventData\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\n switch (name) {\n case eventTypes.ALL_EXTENSION_STATUS:\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\n break;\n case eventTypes.EXTENSION_EVENT:\n let extension = data.data\n // Event reason: NEWCALL/ANSWER/HANGUP\n extension['lastEvent'] = {\n reason: data.reason,\n ivrid: data.ivruniqueid\n }\n const extensions = store.state[extensionsModuleName].extensions\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\n if (extensionIndex !== -1) {\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\n index: extensionIndex,\n extension\n })\n }\n break;\n case eventTypes.LOGIN_STATUS:\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\n break;\n case eventTypes.QUEUE_EVENT:\n let queue = data.data;\n const allQueues = store.state[queuesModuleName].all || []\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\n if (queueIndex !== -1) {\n store.dispatch(`${queuesModuleName}/updateQueue`, {\n index: queueIndex,\n queue\n })\n }\n break;\n default:\n break;\n }\n}\n","import colors from \"./colors\";\n\nexport const callStatuses = {\n CALLING: 100,\n HOLD: 101,\n}\n\nexport default {\n 1: {\n icon: \"IconLogin\",\n color: colors.LOGIN_COLOR,\n text: 'status.login',\n value: 1\n },\n 2: {\n icon: \"IconLogout\",\n color: colors.LOGOUT_COLOR,\n text: 'status.logout',\n value: 2\n },\n 3: {\n icon: \"IconLunch\",\n color: colors.LUNCH_COLOR,\n text: 'status.lunch',\n value: 3\n },\n 5: {\n icon: \"IconAdministrative\",\n color: colors.ADMINISTRATIVE_COLOR,\n text: 'status.administrative',\n value: 5\n },\n 7: {\n icon: \"IconPrivate\",\n color: colors.PRIVATE_COLOR,\n text: 'status.private',\n value: 7\n },\n 9: {\n icon: \"IconOther\",\n color: colors.OTHER_COLOR,\n text: 'status.other',\n value: 9\n },\n 11: {\n icon: \"IconTraining\",\n color: colors.TRAINING_COLOR,\n text: 'status.training',\n value: 11\n },\n 12: {\n icon: \"IconTeamMeeting\",\n color: colors.TEAM_MEETING_COLOR,\n text: 'status.teamMeeting',\n value: 12\n },\n 13: {\n icon: \"IconBrief\",\n color: colors.BRIEF_COLOR,\n text: 'status.brief',\n value: 13\n },\n 100: {\n icon: 'IconIncomingCall',\n color: colors.LIGHT_GREEN,\n text: 'status.incall',\n value: 100\n },\n 101: {\n icon: 'IconHold',\n color: colors.HOLD_COLOR,\n text: 'status.hold',\n value: 101\n }\n}\n","import { callStatuses } from '../utils/statusTypes';\n\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\nconst MINUTE = 60 * 1000\nconst LOGOUT_STATUS = 2;\nconst LOGIN_STATUS = 1;\nconst HOLD_STATUS = 'hold'\n\nconst types = {\n SET_EXTENSIONS: 'SET_EXTENSIONS',\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\n SET_SERVER_TIME: 'SET_SERVER_TIME',\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\n};\nconst state = {\n extensions: [],\n serverTime: null,\n serverDelta: 0,\n serverOffset: 0,\n isSocketOffline: false,\n offlineSocketTimestamp: null\n};\n\nconst mutations = {\n [types.SET_EXTENSIONS]: (state, value) => {\n state.extensions = value\n },\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\n state.extensions.splice(index, 1, extension)\n },\n [types.SET_SERVER_TIME]: (state, value) => {\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\n state.serverTime = value.servertime * 1000 - state.serverOffset\n state.serverDelta = new Date().getTime() - state.serverTime\n },\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\n state.isSocketOffline = value\n if (value) {\n state.offlineSocketTimestamp = new Date().getTime()\n } else {\n state.offlineSocketTimestamp = null\n }\n }\n};\n\nconst actions = {\n async setExtensions({commit}, value) {\n commit(types.SET_EXTENSIONS, value)\n },\n async updateExtension({commit}, value) {\n commit(types.UPDATE_EXTENSIONS, value)\n },\n};\n\nfunction isCallOnHold(call = {}) {\n let status = call.callstatus || ''\n status = status.toLowerCase()\n return call.answered && status === HOLD_STATUS\n}\n\nconst getters = {\n isSocketOffline: state => {\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\n return false\n }\n const now = new Date().getTime()\n // show after 1 minute of disconnect\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\n },\n extensionsWithCalls: state => hideLoggedOutUsers => {\n let groupedExtensions = [];\n\n state.extensions.forEach((extension) => {\n\n if (extension.calls.length > 0) {\n if (extension.calls.filter(isCallOnHold).length) {\n extension['representativeStatus'] = callStatuses.HOLD;\n } else {\n extension['representativeStatus'] = callStatuses.CALLING;\n }\n }\n groupedExtensions.push(extension);\n });\n\n if (hideLoggedOutUsers) {\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\n }\n return groupedExtensions;\n },\n extensionCountByStatus: (state, getters) => status => {\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\n }\n}\n\nexport default {\n namespaced: true,\n state,\n mutations,\n actions,\n getters,\n};\n","const types = {\n SET_QUEUES: 'SET_QUEUES',\n UPDATE_QUEUES: 'UPDATE_QUEUES',\n}\nconst state = {\n all: [],\n}\n\nconst mutations = {\n [types.SET_QUEUES]: (state, value) => {\n state.all = value\n },\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\n state.all.splice(index, 1, queue)\n },\n}\n\nconst actions = {\n async setQueues({commit}, value) {\n commit(types.SET_QUEUES, value)\n },\n async updateQueue({commit}, value) {\n commit(types.UPDATE_QUEUES, value)\n },\n}\n\nconst getters = {\n queueWithActiveCalls: (state) => {\n return state.all.filter((el) => el.Calls.length)\n },\n allQueueCalls: (state, getters) => {\n const allCalls = []\n getters.queueWithActiveCalls.forEach((queue) => {\n const calls = queue.Calls || []\n allCalls.push(...calls)\n })\n return allCalls\n },\n filterQueuesByIds: (state) => queueIds => {\n if (!queueIds || !Array.isArray(queueIds)) {\n return state.all\n }\n return state.all.filter(e => queueIds.includes(e.QueueID))\n }\n}\nexport default {\n namespaced: true,\n state,\n mutations,\n actions,\n getters,\n}\n","import eventTypes from './eventTypes';\nimport { defaultServers } from './config';\nimport Logger from './Logger';\nimport debounce from 'lodash/debounce'\nimport handleStoreEvents from './store/handleStoreEvents'\nimport extensionsModule from './store/extensions'\nimport queuesModule from './store/queues'\nimport { getServerWithHighestPriority, isValidDate } from './utils';\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\nimport { loadExternalScript } from './utils/loadExternalScript'\n\nconst defaultOptions = {\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\n fallbackServer: {\n Domain: 'monitor5.voicenter.co.il',\n Priority: 0,\n },\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\n servers: defaultServers,\n token: null,\n loginType: 'token',\n forceNew: true,\n reconnectionDelay: 10000,\n reconnectionDelayMax: 10000,\n maxReconnectAttempts: 2,\n timeout: 10000,\n keepAliveTimeout: 60000,\n idleInterval: 60000 * 5, // 5 minutes\n protocol: 'https',\n transports: ['websocket'],\n upgrade: false,\n store: null,\n extensionsModuleName: 'sdkExtensions',\n queuesModuleName: 'sdkQueues',\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\n};\n\nlet allConnections = [];\nlet listenersMap = new Map();\n\nclass EventsSDK {\n constructor(options = {}) {\n this.options = {\n ...defaultOptions,\n ...options,\n };\n this.argumentOptions = {\n ...options\n }\n if (!this.options.loginType) {\n throw new Error('A login type should be provided');\n }\n this.Logger = new Logger(this.options);\n this.servers = [];\n this.server = null;\n this.socket = null;\n this.connected = false;\n this.connectionEstablished = false;\n this._lastEventTimestamp = new Date().getTime();\n this._initReconnectOptions();\n this._listenersMap = listenersMap;\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\n leading: true,\n trailing: false\n });\n this._lastLoginTimestamp = null;\n this._handleLocalEvents = false;\n this._registerExtensionsModule();\n this._registerQueueModule();\n }\n\n getLastEventTimestamp() {\n return this._lastEventTimestamp\n }\n _reSync () {\n this.emit(eventTypes.RESYNC, {\n cache: false\n });\n }\n _registerExtensionsModule() {\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, extensionsModule)\n this._handleLocalEvents = true\n }\n\n _registerQueueModule() {\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, queuesModule)\n this._handleLocalEvents = true\n }\n\n _validateStoreModule(moduleName) {\n const { store } = this.options\n if (!store) {\n return false\n }\n if (store.state[moduleName]) {\n store.unregisterModule(moduleName)\n }\n return true\n }\n\n _initReconnectOptions() {\n this.reconnectOptions = {\n retryCount: 1,\n maxReconnectAttempts: this.options.maxReconnectAttempts,\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\n maxReconnectionDelay: 60000 * 5 // 5 minutes\n }\n }\n\n _onConnect() {\n this._initReconnectDelays();\n this.connected = true;\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\n }\n\n _initReconnectDelays() {\n this.reconnectOptions.retryCount = 1;\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\n this.socket.io.reconnectionDelay(minReconnectDelay);\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\n }\n\n _onConnectError(data) {\n this._retryConnection('next');\n this.connected = false;\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\n }\n\n _onError(err) {\n this.Logger.log(eventTypes.ERROR, err);\n }\n\n _onReconnectFailed() {\n this._retryConnection('next');\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\n }\n\n _onConnectTimeout() {\n this._retryConnection('next');\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\n }\n\n _onReconnectAttempt() {\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\n this._retryConnection('next');\n return;\n }\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\n this.reconnectOptions.reconnectionDelay = newDelay;\n this.socket.io.reconnectionDelay(newDelay);\n this.socket.io.reconnectionDelayMax(newDelay);\n }\n this.reconnectOptions.retryCount++;\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\n }\n\n _onDisconnect(reason) {\n this.connected = false;\n this.Logger.log(eventTypes.DISCONNECT, reason);\n this._connect('next')\n }\n\n _onKeepAlive(data) {\n if (typeof data === 'object' && data.errorCode !== 0) {\n this._initSocketConnection();\n return\n }\n if (data && this.connected) {\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\n this._lastEventTimestamp = new Date().getTime()\n } else {\n this._initSocketConnection();\n }\n }\n\n async _onLoginResponse(data) {\n if (data.Client) {\n await loadExternalScript(data.Client)\n }\n if (data.URL) {\n this.server = {\n Priority: 0,\n Domain: data.URL.replace('https://', '')\n }\n }\n if (data.URLList && Array.isArray(data.URLList)) {\n this.servers = data.URLList.map((url, index) => {\n return {\n Priority: index,\n Domain: url.replace('https://', '')\n }\n })\n }\n if (data.Token) {\n this.options.token = data.Token;\n this.token = data.Token\n await this._connect('default', true)\n }\n\n if (data.RefreshToken) {\n this.options.refreshToken = data.RefreshToken\n this._handleTokenExpiry()\n }\n if (data.TokenExpiry) {\n this.options.tokenExpiry = data.TokenExpiry\n }\n }\n\n _handleTokenExpiry() {\n const date = new Date(this.options.tokenExpiry)\n if (!isValidDate(date)) {\n return\n }\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\n setTimeout(async () => {\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\n await this._onLoginResponse(res)\n }, timeout)\n }\n\n _parsePacket(packet) {\n if (!packet.data) {\n return {};\n }\n let name = packet.data[0];\n let data = packet.data[1];\n return {\n name,\n data\n };\n }\n\n async _connect(server = 'default', skipLogin = false) {\n let serverToConnect = null;\n if (server === 'default') {\n serverToConnect = this._findCurrentServer();\n } else if (server === 'next') {\n serverToConnect = this._findNextAvailableServer()\n } else if (server === 'prev') {\n serverToConnect = this._findMaxPriorityServer()\n } else {\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\n }\n if (!serverToConnect) {\n this.server = this._findCurrentServer();\n }\n this._initSocketConnection();\n this._initSocketEvents();\n this._initKeepAlive();\n this._initReconnectDelays();\n if (skipLogin) {\n return\n }\n await this.login(this.options.loginType)\n }\n\n _checkInit() {\n if (!this.connectionEstablished) {\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\n }\n }\n\n _initSocketConnection() {\n let domain = this.server.Domain;\n let protocol = this.options.protocol;\n let url = `${protocol}://${domain}`;\n this.Logger.log('Connecting to..', url);\n this.closeAllConnections();\n const options = {\n ...this.options,\n debug: false\n }\n if (this.token) {\n options.query = {\n token: this.token\n }\n }\n this.socket = window.io(url, options);\n allConnections.push(this.socket);\n this.connectionEstablished = true;\n }\n\n _initSocketEvents() {\n this.socket.onevent = this._onEvent.bind(this)\n }\n\n _initKeepAlive() {\n if (this.keepAliveInterval) {\n clearInterval(this.keepAliveInterval)\n }\n\n if (this.idleInterval) {\n clearInterval((this.idleInterval))\n }\n this.keepAliveInterval = setInterval(async () => {\n const now = new Date().getTime()\n const delta = this.options.keepAliveTimeout * 2\n\n if (now > this.getLastEventTimestamp() + delta) {\n await this._connect('next', true)\n return\n }\n if (!this.socket) {\n this._initSocketConnection();\n return\n }\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\n }\n\n }, this.options.keepAliveTimeout);\n\n this.idleInterval = setInterval(() => {\n this.reSync(false)\n }, this.options.idleInterval)\n }\n\n _findCurrentServer() {\n let server = null;\n if (this.servers.length) {\n server = this.servers[0];\n }\n this.server = server;\n if (!this.server) {\n this.server = this.options.fallbackServer\n }\n return this.server;\n }\n\n _findNextAvailableServer() {\n let currentServerPriority = this.server.Priority;\n this.Logger.log(`Failover -> Trying to find another server`);\n if (currentServerPriority === this.servers.length - 1) {\n return this._findMaxPriorityServer()\n }\n let nextServerPriority = currentServerPriority + 1\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\n if (!nextServer) {\n nextServer = this._findMaxPriorityServer();\n if (!nextServer) {\n return\n }\n }\n if (this.server.Domain !== nextServer.Domain) {\n this.server = nextServer;\n return this.server\n }\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\n return null\n }\n\n _findMaxPriorityServer() {\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\n if (!this.server) {\n this.server = maxPriorityServer;\n return this.server\n }\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\n this.server = maxPriorityServer;\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\n return this.server\n }\n return null\n }\n\n async _getServers() {\n // Ignore server fetch if we have a list of servers passed via options\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\n this.servers = this.argumentOptions.servers\n }\n }\n\n _onEvent(packet) {\n if (!packet.data) {\n return;\n }\n let evt = this._parsePacket(packet);\n this.Logger.log(`New event -> ${evt.name}`, evt);\n this._lastEventTimestamp = new Date().getTime()\n this._listenersMap.forEach((callback, eventName) => {\n if (eventName === '*') {\n callback(evt);\n } else if (evt.name === eventName) {\n callback(evt);\n }\n })\n const eventMappings = {\n [eventTypes.RECONNECT_ATTEMPT]: this._onReconnectAttempt,\n [eventTypes.RECONNECT_FAILED]: this._onReconnectFailed,\n [eventTypes.CONNECT]: this._onConnect,\n [eventTypes.DISCONNECT]: this._onDisconnect,\n [eventTypes.ERROR]: this._onError,\n [eventTypes.CONNECT_ERROR]: this._onConnectError,\n [eventTypes.CONNECT_TIMEOUT]: this._onConnectTimeout,\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\n [eventTypes.QUEUES_UPDATED]: this._reSync,\n [eventTypes.DIALERS_UPDATED]: this._reSync,\n [eventTypes.LOGIN_STATUS]: () => {\n if (!this.connected) {\n this._onConnect()\n }\n }\n };\n const eventHandler = eventMappings[evt.name];\n if (eventHandler && typeof eventHandler === 'function') {\n eventHandler.call(this, evt.data);\n }\n if (this._handleLocalEvents) {\n handleStoreEvents({\n eventData: evt,\n ...this.options\n });\n }\n }\n\n /**\n * Initializes socket connection. Should be called before any other action\n * @return {Promise}\n */\n async init() {\n if (this.connectionEstablished) {\n return true;\n }\n if (this.socket) {\n this.emit(eventTypes.CLOSE);\n }\n await this._getToken();\n await this.login(this.options.loginType)\n await this._getServers();\n return true;\n }\n\n /**\n * Sets the monitor code token\n * @param token\n */\n async setToken(token) {\n this.options.token = token\n this.disconnect()\n await this.init()\n }\n\n /**\n * Closes all existing connections\n */\n closeAllConnections() {\n allConnections.forEach(connection => {\n connection.close()\n connection.disconnect()\n })\n allConnections = []\n if (this.socket) {\n this.socket.disconnect()\n this.socket = null\n }\n }\n\n /**\n * Disconnects the socket instance from the servers\n */\n disconnect() {\n this._listenersMap = new Map();\n this.closeAllConnections()\n }\n\n /**\n * Listens for new events\n * @param {string} eventName (name of the event, * for all events)\n * @param {function} callback (callback function when even with the specified name is received)\n */\n on(eventName, callback) {\n this._listenersMap.set(eventName, callback);\n this._checkInit()\n }\n\n /**\n * Emits an event to the server\n * @param {string} eventName (name of the event)\n * @param {object} data (data for the event)\n */\n\n emit(eventName, data = {}) {\n this._checkInit();\n this.Logger.log(`EMIT -> ${eventName}`, data);\n this.socket.emit(eventName, data);\n }\n\n /**\n * Calls resync event to resync socket data\n * @param cache\n */\n reSync(cache = true) {\n this.emit(eventTypes.RESYNC, { cache })\n }\n\n async setMonitorUrl(url) {\n const oldUrl = this.options.url\n const oldStrategy = this.options.serverFetchStrategy\n try {\n if (!url) {\n return\n }\n this.options.url = url\n this.options.serverFetchStrategy = 'remote'\n await this.init()\n } catch (err) {\n this._onError(err)\n this.options.url = oldUrl\n this.options.serverFetchStrategy = oldStrategy\n await this.init()\n }\n }\n\n _getToken() {\n const { loginType } = this.options\n this.token = this.options.token;\n if (loginType === 'token') {\n if (!this.token) {\n throw new Error('Token login type expects the token option to be provided');\n }\n }\n }\n\n /**\n * Login (logs in based on the token/credentials provided)\n * @param type (login type. Can be token/user/code/account)\n * @return {Promise}\n */\n login(type = 'token') {\n // throttle login for 1 second\n const delay = 1000;\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\n return Promise.resolve()\n }\n this._lastLoginTimestamp = new Date().getTime()\n return new Promise(async (resolve, reject) => {\n try {\n let url = getExternalLoginUrl(this.options.loginUrl, type)\n const res = await externalLogin(url, {\n token: this.options.token,\n email: this.options.email,\n username: this.options.username,\n password: this.options.password\n })\n await this._onLoginResponse(res)\n resolve(res)\n } catch (err) {\n this.servers = this.argumentOptions.servers || defaultServers;\n reject(err)\n }\n });\n }\n\n}\n\nexport default EventsSDK;\n","export function loadExternalScript(url) {\n return new Promise((resolve) => {\n const script = document.createElement('script');\n script.src = url;\n script.onload = () => {\n resolve();\n };\n script.onerror = () => {\n reject();\n };\n document.body.append(script);\n });\n}\n","export function getServerWithHighestPriority(servers) {\n // Highest priority server is the one with lowest Priority value\n let chosenServer = null\n let maxPriority = Number.MAX_SAFE_INTEGER\n servers.forEach(server => {\n if (server.Priority < maxPriority) {\n maxPriority = server.Priority\n chosenServer = server\n }\n })\n return chosenServer\n}\n\nexport function isValidDate(date) {\n return !isNaN(date.getTime())\n}\n","export async function externalLogin(url, { email, password, token, username }) {\n let body = null\n if (token) {\n body = JSON.stringify({ token })\n } else if (username) {\n body = JSON.stringify({\n username,\n password\n })\n } else {\n body = JSON.stringify({\n email,\n pin: password\n })\n }\n const res = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body,\n });\n const data = await res.json();\n if (data.error) {\n throw new Error(data.error)\n }\n return data.Data.Socket;\n}\n\nexport function getExternalLoginUrl(baseUrl, loginType) {\n if (loginType === 'user') {\n return `${baseUrl}/User`\n } else if (loginType === 'token') {\n return `${baseUrl}/Token`\n } else if (loginType === 'account') {\n return `${baseUrl}/Account`\n }\n return baseUrl\n}\n\nexport async function refreshToken(url, oldRefreshToken) {\n const res = await fetch(url, {\n method: 'GET',\n\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${oldRefreshToken}`\n }\n });\n return res.json();\n}\n","const version = '__VERSION__'\nimport sdk from './sdk'\nif (typeof window !== 'undefined') {\n // Make it available on window\n window.EventsSDK = sdk\n}\n\nexport default sdk\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","value","type","global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","isOwn","call","tag","unmasked","e","result","nullTag","undefinedTag","getRawTag","objectToString","symbolTag","isObjectLike","baseGetTag","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","isSymbol","isObject","other","valueOf","replace","isBinary","test","slice","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","setTimeout","timeWaiting","remainingWait","debounced","isInvoking","arguments","leadingEdge","clearTimeout","toNumber","cancel","flush","offlineEvents","eventTypes","NEWCALL","ANSWER","HANGUP","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","name","commit","event","includes","isSocketOffline","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","index","queues","queue","queueIndex","all","QueueID","callStatuses","HOLD_STATUS","types","isCallOnHold","status","callstatus","toLowerCase","answered","namespaced","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","length","filter","push","representativeStatus","extensionCountByStatus","el","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","defaultOptions","url","fallbackServer","Domain","Priority","loginUrl","refreshTokenUrl","servers","token","loginType","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","Error","server","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","debounce","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","io","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","Promise","resolve","script","document","createElement","src","onload","onerror","reject","body","append","URL","URLList","map","Token","RefreshToken","refreshToken","_handleTokenExpiry","TokenExpiry","tokenExpiry","date","isValidDate","async","res","oldRefreshToken","fetch","method","headers","json","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","query","window","onevent","_onEvent","keepAliveInterval","clearInterval","setInterval","delta","_this2","getLastEventTimestamp","reSync","currentServerPriority","nextServerPriority","nextServer","find","chosenServer","maxPriority","maxPriorityServer","Number","MAX_SAFE_INTEGER","evt","_parsePacket","callback","eventName","eventHandler","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onDisconnect","_onError","_onConnectError","_onConnectTimeout","_onKeepAlive","_reSync","_this3","handleStoreEvents","_getToken","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","baseUrl","_this4","email","password","username","pin","Data","Socket","externalLogin","sdk"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/utils/environments.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n}\r\n","export default {\r\n BROWSER: 'browser',\r\n CHROME_EXTENSION: 'chrome-extension'\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","import environments from './environments'\n\nfunction loadBrowserScript(url) {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = url;\n script.onload = () => {\n resolve();\n };\n script.onerror = () => {\n reject();\n };\n document.body.append(script);\n });\n}\n\nasync function loadExtensionScript(url) {\n try {\n let script = await fetch(url)\n script = await script.text()\n\n eval(script)\n } catch (e) {\n return Promise.reject(e)\n }\n}\n\nexport async function loadExternalScript(url, environment, getSocketIOFunction) {\n if (typeof getSocketIOFunction === 'function') {\n self.io = getSocketIOFunction(url)\n\n return\n }\n\n switch (environment) {\n case environments.BROWSER:\n await loadBrowserScript(url)\n break\n case environments.CHROME_EXTENSION:\n await loadExtensionScript(url)\n }\n}\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\nimport environments from './utils/environments'\nimport { defaultServers } from './config';\nimport Logger from './Logger';\nimport debounce from 'lodash/debounce'\nimport handleStoreEvents from './store/handleStoreEvents'\nimport extensionsModule from './store/extensions'\nimport queuesModule from './store/queues'\nimport { getServerWithHighestPriority, isValidDate } from './utils';\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\nimport { loadExternalScript } from './utils/loadExternalScript'\nimport md5 from \"js-md5\";\n\n\nconst defaultOptions = {\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\n environment: environments.BROWSER,\n getSocketIOFunction: undefined,\n fallbackServer: {\n Domain: 'monitor5.voicenter.co.il',\n Priority: 0,\n },\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\n servers: defaultServers,\n token: null,\n loginType: 'token',\n forceNew: true,\n reconnectionDelay: 10000,\n reconnectionDelayMax: 10000,\n maxReconnectAttempts: 2,\n timeout: 10000,\n keepAliveTimeout: 60000,\n idleInterval: 60000 * 5, // 5 minutes\n protocol: 'https',\n transports: ['websocket'],\n upgrade: false,\n store: null,\n extensionsModuleName: 'sdkExtensions',\n queuesModuleName: 'sdkQueues',\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\n};\n\nlet allConnections = [];\nlet listenersMap = new Map();\n\nclass EventsSDK {\n constructor(options = {}) {\n this.options = {\n ...defaultOptions,\n ...options,\n };\n this.argumentOptions = {\n ...options\n }\n if (!this.options.loginType) {\n throw new Error('A login type should be provided');\n }\n this.Logger = new Logger(this.options);\n this.servers = [];\n this.server = null;\n this.socket = null;\n this.connected = false;\n this.connectionEstablished = false;\n this._lastEventTimestamp = new Date().getTime();\n this._initReconnectOptions();\n this._listenersMap = listenersMap;\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\n leading: true,\n trailing: false\n });\n this._lastLoginTimestamp = null;\n this._handleLocalEvents = false;\n this._registerExtensionsModule();\n this._registerQueueModule();\n }\n\n getLastEventTimestamp() {\n return this._lastEventTimestamp\n }\n _reSync () {\n this.emit(eventTypes.RESYNC, {\n cache: false\n });\n }\n _registerExtensionsModule() {\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, extensionsModule)\n this._handleLocalEvents = true\n }\n\n _registerQueueModule() {\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, queuesModule)\n this._handleLocalEvents = true\n }\n\n _validateStoreModule(moduleName) {\n const { store } = this.options\n if (!store) {\n return false\n }\n if (store.state[moduleName]) {\n store.unregisterModule(moduleName)\n }\n return true\n }\n\n _initReconnectOptions() {\n this.reconnectOptions = {\n retryCount: 1,\n maxReconnectAttempts: this.options.maxReconnectAttempts,\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\n maxReconnectionDelay: 60000 * 5 // 5 minutes\n }\n }\n\n _onConnect() {\n this._initReconnectDelays();\n this.connected = true;\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\n }\n\n _initReconnectDelays() {\n this.reconnectOptions.retryCount = 1;\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\n this.socket.io.reconnectionDelay(minReconnectDelay);\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\n }\n\n _onConnectError(data) {\n this._retryConnection('next', true);\n this.connected = false;\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\n }\n\n _onError(err) {\n this.Logger.log(eventTypes.ERROR, err);\n }\n\n _onReconnectFailed() {\n this._retryConnection('next',true);\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\n }\n\n _onConnectTimeout() {\n this._retryConnection('next',true);\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\n }\n\n _onReconnectAttempt() {\n this.connected = false;\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\n this._retryConnection('next',true);\n return;\n }\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\n this.reconnectOptions.reconnectionDelay = newDelay;\n this.socket.io.reconnectionDelay(newDelay);\n this.socket.io.reconnectionDelayMax(newDelay);\n }\n this.reconnectOptions.retryCount++;\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\n }\n\n _onDisconnect(reason) {\n this.connected = false;\n this.Logger.log(eventTypes.DISCONNECT, reason);\n this._connect('next', true)\n }\n\n _onKeepAlive(data) {\n if (typeof data === 'object' && data.errorCode !== 0) {\n this._initSocketConnection();\n return\n }\n if (data && this.connected) {\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\n this._lastEventTimestamp = new Date().getTime()\n } else {\n this._initSocketConnection();\n }\n }\n\n async _onLoginResponse(data) {\n if (data.Client) {\n await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction)\n }\n if (data.URL) {\n this.server = {\n Priority: 0,\n Domain: data.URL.replace('https://', '')\n }\n }\n if (data.URLList && Array.isArray(data.URLList)) {\n this.servers = data.URLList.map((url, index) => {\n return {\n Priority: index,\n Domain: url.replace('https://', '')\n }\n })\n }\n if (data.Token) {\n this.options.token = data.Token;\n this.token = data.Token\n await this._connect('default', true)\n }\n if (data.TokenExpiry) {\n this.options.tokenExpiry = data.TokenExpiry\n }\n if (data.RefreshToken) {\n this.options.refreshToken = data.RefreshToken\n this._handleTokenExpiry()\n }\n\n }\n\n _handleTokenExpiry() {\n const date = new Date(this.options.tokenExpiry)\n if (!isValidDate(date)) {\n return\n }\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\n setTimeout(async () => {\n let Socket = null\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\n if(res.Data){\n Socket = res.Data.Socket;\n return await this._onLoginResponse(Socket)\n }\n throw new Error(`Error on refreshToken`)\n }, timeout)\n }\n\n _parsePacket(packet) {\n if (!packet.data) {\n return {};\n }\n let name = packet.data[0];\n let data = packet.data[1];\n return {\n name,\n data\n };\n }\n\n async _connect(server = 'default', skipLogin = false) {\n let serverToConnect = null;\n if (server === 'default') {\n serverToConnect = this._findCurrentServer();\n } else if (server === 'next') {\n serverToConnect = this._findNextAvailableServer()\n } else if (server === 'prev') {\n serverToConnect = this._findMaxPriorityServer()\n } else {\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\n }\n if (!serverToConnect) {\n this.server = this._findCurrentServer();\n }\n this._initSocketConnection();\n this._initSocketEvents();\n this._initKeepAlive();\n this._initReconnectDelays();\n if (skipLogin) {\n return\n }\n await this.login(this.options.loginType)\n }\n\n _checkInit() {\n if (!this.connectionEstablished) {\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\n }\n }\n\n _initSocketConnection() {\n let domain = this.server.Domain;\n let protocol = this.options.protocol;\n let url = `${protocol}://${domain}`;\n this.Logger.log('Connecting to..', url);\n this.closeAllConnections();\n const options = {\n reconnection: false,\n perMessageDeflate: false,\n upgrade: false,\n transports: ['websocket'],\n debug: false\n }\n if (this.token) {\n options.query = {\n token: this.token\n }\n }\n this.socket = self.io(url, options)\n\n allConnections.push(this.socket);\n this.connectionEstablished = true;\n }\n _initSocketEvents() {\n this.socket\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\n .on(eventTypes.CONNECT, data => this._onConnect(data))\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\n .on(eventTypes.ERROR, data => this._onError(data))\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\n this.socket.onpacket = this._onEvent.bind(this)\n this.socket.onevent = this._onEvent.bind(this)\n }\n\n _initKeepAlive() {\n if (this.keepAliveInterval) {\n clearInterval(this.keepAliveInterval)\n }\n\n if (this.idleInterval) {\n clearInterval((this.idleInterval))\n }\n this.keepAliveInterval = setInterval(async () => {\n const now = new Date().getTime()\n const delta = this.options.keepAliveTimeout * 2\n\n if (now > this.getLastEventTimestamp() + delta) {\n await this._connect('next', true)\n return\n }\n if (!this.socket) {\n this._initSocketConnection();\n return\n }\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\n return\n }\n\n }, this.options.keepAliveTimeout);\n\n // this.idleInterval = setInterval(() => {\n // this.reSync(false)\n // }, this.options.idleInterval)\n }\n\n _findCurrentServer() {\n let server = null;\n if (this.servers.length) {\n server = this.servers[0];\n }\n this.server = server;\n if (!this.server) {\n this.server = this.options.fallbackServer\n }\n return this.server;\n }\n\n _findNextAvailableServer() {\n let currentServerPriority = this.server.Priority;\n this.Logger.log(`Failover -> Trying to find another server`);\n if (currentServerPriority === this.servers.length - 1) {\n return this._findMaxPriorityServer()\n }\n let nextServerPriority = currentServerPriority + 1\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\n if (!nextServer) {\n nextServer = this._findMaxPriorityServer();\n if (!nextServer) {\n return\n }\n }\n if (this.server.Domain !== nextServer.Domain) {\n this.server = nextServer;\n return this.server\n }\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\n return null\n }\n\n _findMaxPriorityServer() {\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\n if (!this.server) {\n this.server = maxPriorityServer;\n return this.server\n }\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\n this.server = maxPriorityServer;\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\n return this.server\n }\n return null\n }\n\n async _getServers() {\n // Ignore server fetch if we have a list of servers passed via options\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\n this.servers = this.argumentOptions.servers\n }\n }\n\n _onEvent(packet) {\n if (!packet.data) {\n return;\n }\n let evt = this._parsePacket(packet);\n this.Logger.log(`New event -> ${evt.name}`, evt);\n this._lastEventTimestamp = new Date().getTime()\n this._listenersMap.forEach((callback, eventName) => {\n if (eventName === '*') {\n callback(evt);\n } else if (evt.name === eventName) {\n callback(evt);\n }\n })\n const eventMappings = {\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\n [eventTypes.QUEUES_UPDATED]: this._reSync,\n [eventTypes.DIALERS_UPDATED]: this._reSync,\n [eventTypes.LOGIN_STATUS]: () => {\n if (!this.connected) {\n this._onConnect()\n }\n }\n };\n const eventHandler = eventMappings[evt.name];\n if (eventHandler && typeof eventHandler === 'function') {\n eventHandler.call(this, evt.data);\n }\n if (this._handleLocalEvents) {\n handleStoreEvents({\n eventData: evt,\n ...this.options\n });\n }\n }\n\n /**\n * Initializes socket connection. Should be called before any other action\n * @return {Promise}\n */\n async init() {\n if (this.connectionEstablished) {\n return true;\n }\n if (this.socket) {\n this.emit(eventTypes.CLOSE);\n }\n await this._getToken();\n await this._getTabsSession();\n await this.login(this.options.loginType)\n await this._getServers();\n return true;\n }\n\n /**\n * Sets the monitor code token\n * @param token\n */\n async setToken(token) {\n this.options.token = token\n this.disconnect()\n await this.init()\n }\n\n /**\n * Closes all existing connections\n */\n closeAllConnections() {\n allConnections.forEach(connection => {\n connection.close()\n connection.disconnect()\n })\n allConnections = []\n if (this.socket) {\n this.socket.disconnect()\n this.socket.close()\n this.socket = null\n }\n }\n\n /**\n * Disconnects the socket instance from the servers\n */\n disconnect() {\n this._listenersMap = new Map();\n this.closeAllConnections()\n }\n\n /**\n * Listens for new events\n * @param {string} eventName (name of the event, * for all events)\n * @param {function} callback (callback function when even with the specified name is received)\n */\n on(eventName, callback) {\n this._listenersMap.set(eventName, callback);\n this._checkInit()\n }\n\n /**\n * Emits an event to the server\n * @param {string} eventName (name of the event)\n * @param {object} data (data for the event)\n */\n\n emit(eventName, data = {}) {\n this._checkInit();\n this.Logger.log(`EMIT -> ${eventName}`, data);\n this.socket.emit(eventName, data);\n }\n\n /**\n * Calls resync event to resync socket data\n * @param cache\n */\n reSync(cache = true) {\n this.emit(eventTypes.RESYNC, { cache })\n }\n\n async setMonitorUrl(url) {\n const oldUrl = this.options.url\n const oldStrategy = this.options.serverFetchStrategy\n try {\n if (!url) {\n return\n }\n this.options.url = url\n this.options.serverFetchStrategy = 'remote'\n await this.init()\n } catch (err) {\n this._onError(err)\n this.options.url = oldUrl\n this.options.serverFetchStrategy = oldStrategy\n await this.init()\n }\n }\n\n _getToken() {\n const { loginType } = this.options\n this.token = this.options.token;\n if (loginType === 'token') {\n if (!this.token) {\n throw new Error('Token login type expects the token option to be provided');\n }\n }\n }\n _getTabsSession() {\n if (this.options.environment !== environments.BROWSER) {\n return Promise.resolve()\n }\n\n if (!window.sessionStorage.length) {\n // Ask other tabs for session storage\n localStorage.setItem('getSessionStorage', Date.now());\n }\n\n return new Promise((resolve) => {\n window.addEventListener('storage', (event) => {\n if (event.key === 'getSessionStorage') {\n // Some tab asked for the sessionStorage -> send it\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\n localStorage.removeItem('sessionStorage');\n } else if (event.key === 'sessionStorage' && !sessionStorage.length) {\n // sessionStorage is empty -> fill it\n const data = JSON.parse(event.newValue)\n\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n window.sessionStorage.setItem(key, data[key]);\n }\n }\n\n resolve()\n }\n })\n })\n }\n\n /**\n * Login (logs in based on the token/credentials provided)\n * @param type (login type. Can be token/user/code/account)\n * @return {Promise}\n */\n login(type = 'token') {\n // throttle login for 1 second\n let payload = {\n token: this.options.token,\n email: this.options.email,\n username: this.options.username,\n password: this.options.password\n }\n let key = md5(JSON.stringify(payload))\n const delay = 1000;\n\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\n return Promise.resolve()\n }\n\n this._lastLoginTimestamp = new Date().getTime()\n\n return new Promise(async (resolve, reject) => {\n try {\n let loginSession = window.sessionStorage.getItem(key);\n\n if (loginSession) {\n loginSession = JSON.parse(loginSession)\n this.Logger.log('got data from session', loginSession);\n await this._onLoginResponse(loginSession)\n return resolve(loginSession);\n }\n } catch (err) {\n this.Logger.log('Error on getting session', err)\n }\n\n try {\n const url = getExternalLoginUrl(this.options.loginUrl, type)\n const res = await externalLogin(url, payload)\n await this._onLoginResponse(res)\n\n if (this.options.environment === environments.BROWSER) {\n window.sessionStorage.setItem(key, JSON.stringify(res));\n }\n\n resolve(res)\n } catch (err) {\n this.servers = this.argumentOptions.servers || defaultServers;\n reject(err)\n }\n });\n }\n}\n\nexport default EventsSDK;\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","BROWSER","CHROME_EXTENSION","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadBrowserScript","Promise","resolve","reject","script","document","createElement","src","onload","onerror","append","loadExtensionScript","text","eval","loadExternalScript","environment","getSocketIOFunction","environments","io","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"2+DAAe,CACbA,aAAc,cACdC,MAAO,QACPC,WAAY,YACZC,WAAY,gBACZC,cAAe,eACfC,eAAgB,gBAChBC,YAAa,aACbC,eAAgB,gBAChBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,kBAAmB,oBACnBC,qBAAsB,sBACtBC,QAAS,UACTC,cAAe,gBACfC,gBAAiB,kBACjBC,WAAY,aACZC,KAAM,OACNC,UAAW,YACXC,kBAAmB,oBACnBC,OAAQ,SACRC,aAAc,eACdC,gBAAiB,kBACjBC,iBAAkB,mBAClBC,WAAY,YACZC,oBAAqB,oBACrBC,MAAO,UACPC,MAAO,sBC3BM,CACbC,QAAS,UACTC,iBAAkB,oBCFPC,eAAiB,CAAC,OACpB,YACG,UACD,SACD,yBACT,OACQ,WACG,UACD,SACD,4BACT,OACQ,WACG,UACD,SACD,4BACT,OACQ,YACG,UACD,SACD,0BACT,OACQ,WACG,UACD,SACD,6BCvBNC,mCACQC,yDAAU,gCACfC,MAAQD,EAAQC,+CASvB,SAAKC,EAASC,OACRC,EAAQD,YAAUD,0BAAuBG,KAAKC,UAAUH,cAAaD,GACrEK,GAAM,IAAIC,MAAOC,cACrBC,QAAQC,iBAAUJ,kBAAWH,gFAS/B,SAAOF,EAASC,OACVC,EAAQD,YAAUD,uBAAoBG,KAAKC,UAAUH,cAAaD,GAClEK,GAAM,IAAIC,MAAOC,cACrBC,QAAQE,gBAASL,eAAQH,uBAQ3B,SAAIF,EAASC,GACPU,KAAKZ,QACHC,IAAYC,OACTW,KAAKZ,QAELY,KAAKZ,EAASC,yBASzB,SAAMD,EAASC,GACTU,KAAKZ,QACHC,IAAYC,OACTY,OAAOb,QAEPa,OAAOb,EAASC,aC7B7B,SAASa,SAASC,GAChB,IAAIC,SAAcD,EAClB,OAAgB,MAATA,IAA0B,UAARC,GAA4B,YAARA,GAG/C,eAAiBF,uPC7BjB,IAAIG,WAA8B,iBAAVC,gBAAsBA,gBAAUA,eAAOC,SAAWA,QAAUD,2BAEnED,WCAbG,SAA0B,iBAARC,MAAoBA,MAAQA,KAAKF,SAAWA,QAAUE,KAGxEC,KAAOL,aAAcG,UAAYG,SAAS,cAATA,SAEpBD,KCUbjB,IAAM,WACR,OAAOiB,MAAKhB,KAAKD,aAGFA,ICrBbmB,aAAe,KAUnB,SAASC,gBAAgBC,GAGvB,IAFA,IAAIC,EAAQD,EAAOE,OAEZD,KAAWH,aAAaK,KAAKH,EAAOI,OAAOH,MAClD,OAAOA,EAGT,qBAAiBF,gBCfbM,YAAc,OASlB,SAASC,SAASN,GAChB,OAAOA,EACHA,EAAOO,MAAM,EAAGR,iBAAgBC,GAAU,GAAGQ,QAAQH,YAAa,IAClEL,EAGN,cAAiBM,SCfbG,SAASb,MAAKa,eAEDA,SCFbC,YAAcjB,OAAOkB,UAGrBC,eAAiBF,YAAYE,eAO7BC,qBAAuBH,YAAYI,SAGnCC,eAAiBN,QAASA,QAAOO,iBAAcC,EASnD,SAASC,UAAU7B,GACjB,IAAI8B,EAAQP,eAAeQ,KAAK/B,EAAO0B,gBACnCM,EAAMhC,EAAM0B,gBAEhB,IACE1B,EAAM0B,qBAAkBE,EACxB,IAAIK,GAAW,EACf,MAAOC,IAET,IAAIC,EAASX,qBAAqBO,KAAK/B,GAQvC,OAPIiC,IACEH,EACF9B,EAAM0B,gBAAkBM,SAEjBhC,EAAM0B,iBAGVS,EAGT,eAAiBN,UC5CbR,cAAcjB,OAAOkB,UAOrBE,uBAAuBH,cAAYI,SASvC,SAASW,eAAepC,GACtB,OAAOwB,uBAAqBO,KAAK/B,GAGnC,oBAAiBoC,eChBbC,QAAU,gBACVC,aAAe,qBAGfZ,iBAAiBN,QAASA,QAAOO,iBAAcC,EASnD,SAASW,WAAWvC,GAClB,OAAa,MAATA,OACe4B,IAAV5B,EAAsBsC,aAAeD,QAEtCX,kBAAkBA,oBAAkBtB,OAAOJ,GAC/C6B,WAAU7B,GACVoC,gBAAepC,GAGrB,gBAAiBuC,WCHjB,SAASC,aAAaxC,GACpB,OAAgB,MAATA,GAAiC,iBAATA,EAGjC,mBAAiBwC,aCxBbC,UAAY,kBAmBhB,SAASC,SAAS1C,GAChB,MAAuB,iBAATA,GACXwC,eAAaxC,IAAUuC,YAAWvC,IAAUyC,UAGjD,eAAiBC,SCvBbC,IAAM,IAGNC,WAAa,qBAGbC,WAAa,aAGbC,UAAY,cAGZC,aAAeC,SAyBnB,SAASC,SAASjD,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAI0C,WAAS1C,GACX,OAAO2C,IAET,GAAI5C,WAASC,GAAQ,CACnB,IAAIkD,EAAgC,mBAAjBlD,EAAMmD,QAAwBnD,EAAMmD,UAAYnD,EACnEA,EAAQD,WAASmD,GAAUA,EAAQ,GAAMA,EAE3C,GAAoB,iBAATlD,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQiB,UAASjB,GACjB,IAAIoD,EAAWP,WAAW/B,KAAKd,GAC/B,OAAQoD,GAAYN,UAAUhC,KAAKd,GAC/B+C,aAAa/C,EAAMkB,MAAM,GAAIkC,EAAW,EAAI,GAC3CR,WAAW9B,KAAKd,GAAS2C,KAAO3C,EAGvC,eAAiBiD,SC1DbI,gBAAkB,sBAGlBC,UAAYC,KAAKC,IACjBC,UAAYF,KAAKG,IAwDrB,SAASC,SAASC,EAAMC,EAAM9E,GAC5B,IAAI+E,EACAC,EACAC,EACA7B,EACA8B,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTC,GAAW,EAEf,GAAmB,mBAARV,EACT,MAAM,IAAIW,UAAUlB,iBAUtB,SAASmB,EAAWC,GAClB,IAAIC,EAAOZ,EACPa,EAAUZ,EAKd,OAHAD,EAAWC,OAAWnC,EACtBuC,EAAiBM,EACjBtC,EAASyB,EAAKgB,MAAMD,EAASD,GAI/B,SAASG,EAAYJ,GAMnB,OAJAN,EAAiBM,EAEjBR,EAAUa,WAAWC,EAAclB,GAE5BO,EAAUI,EAAWC,GAAQtC,EAatC,SAAS6C,EAAaP,GACpB,IAAIQ,EAAoBR,EAAOP,EAM/B,YAAyBtC,IAAjBsC,GAA+Be,GAAqBpB,GACzDoB,EAAoB,GAAOZ,GANJI,EAAON,GAM8BH,EAGjE,SAASe,IACP,IAAIN,EAAOnF,QACX,GAAI0F,EAAaP,GACf,OAAOS,EAAaT,GAGtBR,EAAUa,WAAWC,EA3BvB,SAAuBN,GACrB,IAEIU,EAActB,GAFMY,EAAOP,GAI/B,OAAOG,EACHZ,UAAU0B,EAAanB,GAJDS,EAAON,IAK7BgB,EAoB+BC,CAAcX,IAGnD,SAASS,EAAaT,GAKpB,OAJAR,OAAUrC,EAIN0C,GAAYR,EACPU,EAAWC,IAEpBX,EAAWC,OAAWnC,EACfO,GAeT,SAASkD,IACP,IAAIZ,EAAOnF,QACPgG,EAAaN,EAAaP,GAM9B,GAJAX,EAAWyB,UACXxB,EAAWnE,KACXsE,EAAeO,EAEXa,EAAY,CACd,QAAgB1D,IAAZqC,EACF,OAAOY,EAAYX,GAErB,GAAIG,EAIF,OAFAmB,aAAavB,GACbA,EAAUa,WAAWC,EAAclB,GAC5BW,EAAWN,GAMtB,YAHgBtC,IAAZqC,IACFA,EAAUa,WAAWC,EAAclB,IAE9B1B,EAIT,OA3GA0B,EAAOZ,WAASY,IAAS,EACrB9D,WAAShB,KACXqF,IAAYrF,EAAQqF,QAEpBJ,GADAK,EAAS,YAAatF,GACHuE,UAAUL,WAASlE,EAAQiF,UAAY,EAAGH,GAAQG,EACrEM,EAAW,aAAcvF,IAAYA,EAAQuF,SAAWA,GAoG1De,EAAUI,OApCV,gBACkB7D,IAAZqC,GACFuB,aAAavB,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,OAAUrC,GAgCjDyD,EAAUK,MA7BV,WACE,YAAmB9D,IAAZqC,EAAwB9B,EAAS+C,EAAa5F,UA6BhD+F,EAGT,eAAiB1B,SC5LJgC,gBAAkB,CAC7BC,QAAS,UACTC,OAAQ,SACRC,OAAQ,UAEJC,cAAgB,CACpBC,WAAWnI,cACXmI,WAAWlI,gBACXkI,WAAWjI,WACXiI,WAAW9H,kBACX8H,WAAW5H,aACX4H,WAAW3H,gBACX2H,WAAW1H,iBACXqH,gBAAgBlH,OAGlB,SAASwH,gBAAgBC,OACjBC,EAASD,EAATC,YACCJ,cAAcK,SAASD,GAGjB,SAASE,kBAAaC,IAAAA,UAAWC,IAAAA,MAAOC,IAAAA,qBAAsBC,IAAAA,iBACrEN,EAAeG,EAAfH,KAAMjH,EAASoH,EAATpH,YACZqH,EAAMG,iBAAUF,4BAA8CP,gBAAgBK,IACtEH,QACDH,WAAWrI,qBACd4I,EAAMI,mBAAYH,oBAAsCtH,EAAK0H,uBAE1DZ,WAAWvI,oBACVoJ,EAAY3H,EAAKA,KAErB2H,EAAS,UAAgB,CACvBC,OAAQ5H,EAAK4H,OACbC,MAAO7H,EAAK8H,iBAGVC,EADeV,EAAMW,MAAMV,GAAsBI,WACrBO,WAAU,SAAAjF,UAAKA,EAAEkF,SAAWP,EAAUO,WAC9C,IAApBH,GACFV,EAAMI,mBAAYH,sBAAwC,CACxD5F,MAAOqG,EACPJ,UAAAA,eAIDb,WAAWhJ,aACduJ,EAAMG,iBAAUF,sBAAwCtH,GACxDqH,EAAMI,mBAAYF,gBAA8BvH,EAAKmI,mBAElDrB,WAAW1I,gBACVgK,EAAQpI,EAAKA,KAEbqI,GADchB,EAAMW,MAAMT,GAAkBe,KAAO,IAC5BL,WAAU,SAAAjF,UAAKA,EAAEuF,UAAYH,EAAMG,YAC1C,IAAhBF,GACFhB,EAAMI,mBAAYF,kBAAgC,CAChD7F,MAAO2G,EACPD,MAAAA,SCvDGI,aAAe,CAC1BC,QAAS,IACTC,KAAM,gBCFFC,uBAAyB,MACzBC,OAAS,IACTC,cAAgB,EAEhBC,YAAc,OAEdC,MAAQ,CACVC,eAAgB,iBAChBC,kBAAmB,oBACnBC,gBAAiB,kBACjBC,sBAAuB,yBAErBnB,MAAQ,CACVN,WAAY,GACZ0B,WAAY,KACZC,YAAa,EACbC,aAAc,EACdvC,iBAAiB,EACjBwC,uBAAwB,MAGtBC,oDACDT,MAAMC,gBAAiB,SAAChB,EAAOlH,GAC5BkH,EAAMN,WAAa5G,gCAEtBiI,MAAME,mBAAoB,SAACjB,SAAQtG,IAAAA,MAAOiG,IAAAA,UACvCK,EAAMN,WAAW+B,OAAO/H,EAAO,EAAGiG,iCAErCoB,MAAMG,iBAAkB,SAAClB,EAAOlH,GAC7BkH,EAAMsB,aAAwC,GAAzBxI,EAAM4I,iBAAwB,KAAQf,uBAC3DX,EAAMoB,WAAgC,IAAnBtI,EAAM6I,WAAoB3B,EAAMsB,aACnDtB,EAAMqB,aAAc,IAAIhJ,MAAOuJ,UAAY5B,EAAMoB,yCAEpDL,MAAMI,uBAAwB,SAACnB,EAAOlH,GACnCkH,EAAMjB,gBAAkBjG,EAEpBkH,EAAMuB,uBADNzI,GAC+B,IAAIT,MAAOuJ,UAEX,oBAKrCC,QAAU,CACNC,+BAAwBhJ,IAC1B0G,IADiBA,QACVuB,MAAMC,eAAgBlI,IAE3BiJ,iCAA0BjJ,IAC5B0G,IADmBA,QACZuB,MAAME,kBAAmBnI,KAIxC,SAASkJ,mBAAanH,yDAAO,GACvBoH,EAASpH,EAAKqH,YAAc,UAChCD,EAASA,EAAOE,cACTtH,EAAKuH,UAAYH,IAAWnB,YAGrC,IAAMuB,QAAU,CACdtD,gBAAiB,SAAAiB,OACVA,EAAMuB,wBAA0Be,MAAMtC,EAAMuB,+BACxC,MAEHnJ,GAAM,IAAIC,MAAOuJ,iBAEhB5B,EAAMjB,iBAAmB3G,EAAM4H,EAAMuB,uBAAyBX,QAEvE2B,oBAAqB,SAAAvC,UAAS,SAAAwC,OACxBC,EAAoB,UAExBzC,EAAMN,WAAWgD,SAAQ,SAAC/C,GAEpBA,EAAUgD,MAAMhJ,OAAS,IACvBgG,EAAUgD,MAAMC,OAAOZ,cAAcrI,OACvCgG,EAAS,qBAA2Ba,aAAaE,KAEjDf,EAAS,qBAA2Ba,aAAaC,SAGrDgC,EAAkBI,KAAKlD,MAGrB6C,EACKC,EAAkBG,QAAO,SAAA5H,UAAKA,EAAE8H,uBAAyBjC,iBAE3D4B,IAETM,uBAAwB,SAAC/C,EAAOqC,UAAY,SAAAJ,UACnCI,EAAQE,oBAAoBK,QAAO,SAAAI,UAAMA,EAAGF,uBAAyBb,KAAQtI,QAAU,sBAInF,CACXsJ,YAAY,EACZjD,MAAAA,MACAwB,UAAAA,UACAK,QAAAA,QACAQ,QAAAA,sBCnGEtB,QAAQ,CACVmC,WAAY,aACZC,cAAe,iBAEbnD,QAAQ,CACVM,IAAK,IAGHkB,0DACDT,QAAMmC,YAAa,SAAClD,EAAOlH,GACxBkH,EAAMM,IAAMxH,kCAEfiI,QAAMoC,eAAgB,SAACnD,SAAQtG,IAAAA,MAAO0G,IAAAA,MACnCJ,EAAMM,IAAImB,OAAO/H,EAAO,EAAG0G,oBAI7ByB,UAAU,CACNuB,2BAAoBtK,IACtB0G,IADaA,QACNuB,QAAMmC,WAAYpK,IAEvBuK,6BAAsBvK,IACxB0G,IADeA,QACRuB,QAAMoC,cAAerK,KAI9BuJ,UAAU,CACdiB,qBAAsB,SAACtD,UACdA,EAAMM,IAAIsC,QAAO,SAACI,UAAOA,EAAGO,MAAM5J,WAE3C6J,cAAe,SAACxD,EAAOqC,OACfoB,EAAW,UACjBpB,EAAQiB,qBAAqBZ,SAAQ,SAACtC,OAC9BuC,EAAQvC,EAAMmD,OAAS,GAC7BE,EAASZ,WAATY,qBAAiBd,OAEZc,GAETC,kBAAmB,SAAC1D,UAAU,SAAA2D,UACvBA,GAAaC,MAAMC,QAAQF,GAGzB3D,EAAMM,IAAIsC,QAAO,SAAA5H,UAAK2I,EAASzE,SAASlE,EAAEuF,YAFxCP,EAAMM,oBAKJ,CACX2C,YAAY,EACZjD,MAAAA,QACAwB,UAAAA,YACAK,QAAAA,UACAQ,QAAAA,WClDG,SAASyB,6BAA6BC,OAEvCC,EAAe,KACfC,EAAcC,OAAOC,wBACzBJ,EAAQrB,SAAQ,SAAA0B,GACVA,EAAOC,SAAWJ,IACpBA,EAAcG,EAAOC,SACrBL,EAAeI,MAGZJ,EAGF,SAASM,YAAYC,UAClBjC,MAAMiC,EAAK3C,WCdd4C,eAAeC,cAAcC,SAAOC,IAAAA,MAAOC,IAAAA,SAAUC,IAAAA,MAAOC,IAAAA,SAC7DC,EAAO,KAETA,EADEF,EACK3M,KAAKC,UAAU,CAAE0M,MAAAA,IACfC,EACF5M,KAAKC,UAAU,CACpB2M,SAAAA,EACAF,SAAAA,IAGK1M,KAAKC,UAAU,CACpBwM,MAAAA,EACAK,IAAKJ,QAGHK,QAAYC,MAAMR,EAAK,CAC3BS,OAAQ,OACRC,QAAS,gBACS,oBAElBL,KAAAA,IAEI/M,QAAaiN,EAAII,UACnBrN,EAAKS,YACD,IAAI6M,MAAMtN,EAAKS,cAEhBT,EAAKuN,KAAKC,OAGZ,SAASC,oBAAoBC,EAASC,SACzB,SAAdA,YACQD,WACa,UAAdC,YACCD,YACa,YAAdC,YACCD,cAELA,EAGFlB,eAAeoB,aAAalB,EAAKmB,gBACpBX,MAAMR,EAAK,CAC3BS,OAAQ,MAERC,QAAS,gBACS,kDACWS,OAGpBR,OC/Cb,SAASS,kBAAkBpB,UAClB,IAAIqB,SAAQ,SAACC,EAASC,OACrBC,EAASC,SAASC,cAAc,UACtCF,EAAOG,IAAM3B,EACbwB,EAAOI,OAAS,WACdN,KAEFE,EAAOK,QAAU,WACfN,KAEFE,SAASpB,KAAKyB,OAAON,MAIzB1B,eAAeiC,oBAAoB/B,aAE3BwB,aAAehB,MAAMR,KACzBwB,aAAeA,OAAOQ,OAEtBC,KAAKT,QACL,MAAOlL,UACA+K,QAAQE,OAAOjL,IAInBwJ,eAAeoC,mBAAmBlC,EAAKmC,EAAaC,MACtB,mBAAxBA,SAMHD,QACDE,aAAatP,cACVqO,kBAAkBpB,cAErBqC,aAAarP,uBACV+O,oBAAoB/B,QAV5BtL,KAAK4N,GAAKF,EAAoBpC;;;;;;;;;;CCpBlC,WAGE,IAAIlN,MAAQ,wBACRyP,OAA2B,iBAAXC,OAChB7N,KAAO4N,OAASC,OAAS,GACzB7N,KAAK8N,mBACPF,QAAS,GAEX,IAAIG,YAAcH,QAA0B,iBAAT7N,KAC/BiO,SAAWhO,KAAKiO,mBAAwC,iBAAZC,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,KACzGJ,QACFhO,KAAOJ,eACEmO,aACT/N,KAAOD,MAET,IAAIsO,WAAarO,KAAKsO,qBAAqDC,OAAOC,QAE9EC,cAAgBzO,KAAK0O,wBAAiD,oBAAhBC,YACtDC,UAAY,mBAAmBC,MAAM,IACrCC,MAAQ,CAAC,IAAK,MAAO,SAAU,YAC/BC,MAAQ,CAAC,EAAG,EAAG,GAAI,IACnBC,aAAe,CAAC,MAAO,QAAS,SAAU,SAAU,cAAe,UACnEC,mBAAqB,mEAAmEJ,MAAM,IAE9FK,OAAS,GAAIC,QACjB,GAAIV,aAAc,CAChB,IAAIW,OAAS,IAAIT,YAAY,IAC7BQ,QAAU,IAAIE,WAAWD,QACzBF,OAAS,IAAII,YAAYF,SAGvBpP,KAAKiO,mBAAsB1D,MAAMC,UACnCD,MAAMC,QAAU,SAAU+E,GACxB,MAA+C,mBAAxC1P,OAAOkB,UAAUG,SAASM,KAAK+N,MAItCd,eAAiBzO,KAAKwP,gCAAmCb,YAAYc,SACvEd,YAAYc,OAAS,SAAUF,GAC7B,MAAsB,iBAARA,GAAoBA,EAAIH,QAAUG,EAAIH,OAAOM,cAAgBf,cA6D/E,IAAIgB,mBAAqB,SAAUC,GACjC,OAAO,SAAUlR,GACf,OAAO,IAAImR,KAAI,GAAMC,OAAOpR,GAASkR,OAwBrCG,aAAe,WACjB,IAAIjE,EAAS6D,mBAAmB,OAC5B3B,UACFlC,EAASkE,SAASlE,IAEpBA,EAAOmE,OAAS,WACd,OAAO,IAAIJ,KAEb/D,EAAOgE,OAAS,SAAUpR,GACxB,OAAOoN,EAAOmE,SAASH,OAAOpR,IAEhC,IAAK,IAAIwR,EAAI,EAAGA,EAAIlB,aAAa1O,SAAU4P,EAAG,CAC5C,IAAIxQ,EAAOsP,aAAakB,GACxBpE,EAAOpM,GAAQiQ,mBAAmBjQ,GAEpC,OAAOoM,GAGLkE,SAAW,SAAUlE,QACvB,IAAIqE,OAAS7C,KAAK,qBACd8C,OAAS9C,KAAK,4BACd+C,WAAa,SAAU3R,GACzB,GAAuB,iBAAZA,EACT,OAAOyR,OAAOG,WAAW,OAAOR,OAAOpR,EAAS,QAAQ6R,OAAO,OAE/D,GAAI7R,MAAAA,EACF,MAAMP,MAKV,OAJaO,EAAQgR,cAAgBf,cACjCjQ,EAAU,IAAI2Q,WAAW3Q,IAGzB6L,MAAMC,QAAQ9L,IAAYiQ,YAAYc,OAAO/Q,IAC/CA,EAAQgR,cAAgBU,OACjBD,OAAOG,WAAW,OAAOR,OAAO,IAAIM,OAAO1R,IAAU6R,OAAO,OAE5DzE,OAAOpN,IAGlB,OAAO2R,YAST,SAASR,IAAIW,GACX,GAAIA,EACFtB,OAAO,GAAKA,OAAO,IAAMA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GACxDA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GAC3CA,OAAO,GAAKA,OAAO,GAAKA,OAAO,IAAMA,OAAO,IAC5CA,OAAO,IAAMA,OAAO,IAAMA,OAAO,IAAMA,OAAO,IAAM,EACpD7P,KAAK6P,OAASA,OACd7P,KAAK8P,QAAUA,aAEf,GAAIV,aAAc,CAChB,IAAIW,EAAS,IAAIT,YAAY,IAC7BtP,KAAK8P,QAAU,IAAIE,WAAWD,GAC9B/P,KAAK6P,OAAS,IAAII,YAAYF,QAE9B/P,KAAK6P,OAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGnE7P,KAAKoR,GAAKpR,KAAKqR,GAAKrR,KAAKsR,GAAKtR,KAAKuR,GAAKvR,KAAKwR,MAAQxR,KAAKyR,MAAQzR,KAAK0R,OAAS,EAChF1R,KAAK2R,UAAY3R,KAAK4R,QAAS,EAC/B5R,KAAK6R,OAAQ,EAYfrB,IAAI9O,UAAU+O,OAAS,SAAUpR,GAC/B,IAAIW,KAAK2R,UAAT,CAIA,IAAIG,EAAWzR,SAAchB,EAC7B,GAAa,WAATgB,EAAmB,CACrB,GAAa,WAATA,EAWF,MAAMvB,MAVN,GAAgB,OAAZO,EACF,MAAMP,MACD,GAAIsQ,cAAgB/P,EAAQgR,cAAgBf,YACjDjQ,EAAU,IAAI2Q,WAAW3Q,QACpB,KAAK6L,MAAMC,QAAQ9L,IACnB+P,cAAiBE,YAAYc,OAAO/Q,IACvC,MAAMP,MAMZgT,GAAY,EAKd,IAHA,IAAIC,EAAiBlB,EAAX7P,EAAQ,EAAMC,EAAS5B,EAAQ4B,OAAQ4O,EAAS7P,KAAK6P,OAC3DC,EAAU9P,KAAK8P,QAEZ9O,EAAQC,GAAQ,CAUrB,GATIjB,KAAK4R,SACP5R,KAAK4R,QAAS,EACd/B,EAAO,GAAKA,EAAO,IACnBA,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC5CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC3CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAMA,EAAO,IAC5CA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAM,GAGlDiC,EACF,GAAI1C,aACF,IAAKyB,EAAI7Q,KAAKwR,MAAOxQ,EAAQC,GAAU4P,EAAI,KAAM7P,EAC/C8O,EAAQe,KAAOxR,EAAQ2B,QAGzB,IAAK6P,EAAI7Q,KAAKwR,MAAOxQ,EAAQC,GAAU4P,EAAI,KAAM7P,EAC/C6O,EAAOgB,GAAK,IAAMxR,EAAQ2B,IAAU0O,MAAY,EAANmB,UAI9C,GAAIzB,aACF,IAAKyB,EAAI7Q,KAAKwR,MAAOxQ,EAAQC,GAAU4P,EAAI,KAAM7P,GAC/C+Q,EAAO1S,EAAQ2S,WAAWhR,IACf,IACT8O,EAAQe,KAAOkB,EACNA,EAAO,MAChBjC,EAAQe,KAAO,IAAQkB,GAAQ,EAC/BjC,EAAQe,KAAO,IAAe,GAAPkB,GACdA,EAAO,OAAUA,GAAQ,OAClCjC,EAAQe,KAAO,IAAQkB,GAAQ,GAC/BjC,EAAQe,KAAO,IAASkB,GAAQ,EAAK,GACrCjC,EAAQe,KAAO,IAAe,GAAPkB,IAEvBA,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9B1S,EAAQ2S,aAAahR,IACjE8O,EAAQe,KAAO,IAAQkB,GAAQ,GAC/BjC,EAAQe,KAAO,IAASkB,GAAQ,GAAM,GACtCjC,EAAQe,KAAO,IAASkB,GAAQ,EAAK,GACrCjC,EAAQe,KAAO,IAAe,GAAPkB,QAI3B,IAAKlB,EAAI7Q,KAAKwR,MAAOxQ,EAAQC,GAAU4P,EAAI,KAAM7P,GAC/C+Q,EAAO1S,EAAQ2S,WAAWhR,IACf,IACT6O,EAAOgB,GAAK,IAAMkB,GAAQrC,MAAY,EAANmB,KACvBkB,EAAO,MAChBlC,EAAOgB,GAAK,KAAO,IAAQkB,GAAQ,IAAOrC,MAAY,EAANmB,KAChDhB,EAAOgB,GAAK,KAAO,IAAe,GAAPkB,IAAiBrC,MAAY,EAANmB,MACzCkB,EAAO,OAAUA,GAAQ,OAClClC,EAAOgB,GAAK,KAAO,IAAQkB,GAAQ,KAAQrC,MAAY,EAANmB,KACjDhB,EAAOgB,GAAK,KAAO,IAASkB,GAAQ,EAAK,KAAUrC,MAAY,EAANmB,KACzDhB,EAAOgB,GAAK,KAAO,IAAe,GAAPkB,IAAiBrC,MAAY,EAANmB,OAElDkB,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9B1S,EAAQ2S,aAAahR,IACjE6O,EAAOgB,GAAK,KAAO,IAAQkB,GAAQ,KAAQrC,MAAY,EAANmB,KACjDhB,EAAOgB,GAAK,KAAO,IAASkB,GAAQ,GAAM,KAAUrC,MAAY,EAANmB,KAC1DhB,EAAOgB,GAAK,KAAO,IAASkB,GAAQ,EAAK,KAAUrC,MAAY,EAANmB,KACzDhB,EAAOgB,GAAK,KAAO,IAAe,GAAPkB,IAAiBrC,MAAY,EAANmB,MAK1D7Q,KAAKiS,cAAgBpB,EACrB7Q,KAAKyR,OAASZ,EAAI7Q,KAAKwR,MACnBX,GAAK,IACP7Q,KAAKwR,MAAQX,EAAI,GACjB7Q,KAAKkS,OACLlS,KAAK4R,QAAS,GAEd5R,KAAKwR,MAAQX,EAOjB,OAJI7Q,KAAKyR,MAAQ,aACfzR,KAAK0R,QAAU1R,KAAKyR,MAAQ,YAAc,EAC1CzR,KAAKyR,MAAQzR,KAAKyR,MAAQ,YAErBzR,OAGTwQ,IAAI9O,UAAUyQ,SAAW,WACvB,IAAInS,KAAK2R,UAAT,CAGA3R,KAAK2R,WAAY,EACjB,IAAI9B,EAAS7P,KAAK6P,OAAQgB,EAAI7Q,KAAKiS,cACnCpC,EAAOgB,GAAK,IAAMpB,MAAU,EAAJoB,GACpBA,GAAK,KACF7Q,KAAK4R,QACR5R,KAAKkS,OAEPrC,EAAO,GAAKA,EAAO,IACnBA,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC5CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC3CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAMA,EAAO,IAC5CA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAM,GAEtDA,EAAO,IAAM7P,KAAKyR,OAAS,EAC3B5B,EAAO,IAAM7P,KAAK0R,QAAU,EAAI1R,KAAKyR,QAAU,GAC/CzR,KAAKkS,SAGP1B,IAAI9O,UAAUwQ,KAAO,WACnB,IAAIE,EAAGC,EAAGC,EAAGC,EAAGC,EAAIC,EAAI5C,EAAS7P,KAAK6P,OAElC7P,KAAK6R,MAQPQ,IADAA,IALAD,IADAA,EAAIvC,EAAO,GAAK,YACN,EAAIuC,IAAM,IAAM,WAAa,IAIvCE,IADAA,IAAM,WADNC,IADAA,IAAM,WAAiB,WAAJH,GAAkBvC,EAAO,GAAK,YACvC,GAAK0C,IAAM,IAAMH,GAAK,KACH,UAALA,IAAoBvC,EAAO,GAAK,aAC9C,GAAKyC,IAAM,IAAMC,GAAK,IACjBA,EAAIH,IAAOvC,EAAO,GAAK,aAC5B,GAAKwC,IAAM,IAAMC,GAAK,GAEhCF,EAAIpS,KAAKoR,GACTiB,EAAIrS,KAAKqR,GACTiB,EAAItS,KAAKsR,GASTe,IADAA,KALAD,IADAA,KADAG,EAAIvS,KAAKuR,IACEc,GAAKC,EAAIC,IAAO1C,EAAO,GAAK,YAC7B,EAAIuC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAOzC,EAAO,GAAK,YAC7B,GAAK0C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOxC,EAAO,GAAK,YAC7B,GAAKyC,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOvC,EAAO,GAAK,aAC7B,GAAKwC,IAAM,IAAMC,GAAK,GAUlCD,IADAA,KALAD,IADAA,IAAMG,EAAKF,GAAKC,EAAIC,IAAO1C,EAAO,GAAK,YAC7B,EAAIuC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAOzC,EAAO,GAAK,aAC7B,GAAK0C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOxC,EAAO,GAAK,aAC7B,GAAKyC,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOvC,EAAO,GAAK,WAC7B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KALAD,IADAA,IAAMG,EAAKF,GAAKC,EAAIC,IAAO1C,EAAO,GAAK,aAC7B,EAAIuC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAOzC,EAAO,GAAK,aAC7B,GAAK0C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOxC,EAAO,IAAM,QAC9B,GAAKyC,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOvC,EAAO,IAAM,aAC9B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KALAD,IADAA,IAAMG,EAAKF,GAAKC,EAAIC,IAAO1C,EAAO,IAAM,aAC9B,EAAIuC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAOzC,EAAO,IAAM,WAC9B,GAAK0C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOxC,EAAO,IAAM,aAC9B,GAAKyC,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOvC,EAAO,IAAM,aAC9B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAOzC,EAAO,GAAK,YAC7B,EAAIuC,IAAM,IAAMC,GAAK,GACXA,IAAOxC,EAAO,GAAK,aAC7B,EAAI0C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOvC,EAAO,IAAM,YAC9B,GAAKyC,IAAM,IAAMC,GAAK,GACZA,IAAO1C,EAAO,GAAK,YAC7B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAOzC,EAAO,GAAK,YAC7B,EAAIuC,IAAM,IAAMC,GAAK,GACXA,IAAOxC,EAAO,IAAM,WAC9B,EAAI0C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOvC,EAAO,IAAM,YAC9B,GAAKyC,IAAM,IAAMC,GAAK,GACZA,IAAO1C,EAAO,GAAK,YAC7B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAOzC,EAAO,GAAK,YAC7B,EAAIuC,IAAM,IAAMC,GAAK,GACXA,IAAOxC,EAAO,IAAM,aAC9B,EAAI0C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOvC,EAAO,GAAK,YAC7B,GAAKyC,IAAM,IAAMC,GAAK,GACZA,IAAO1C,EAAO,GAAK,aAC7B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAOzC,EAAO,IAAM,aAC9B,EAAIuC,IAAM,IAAMC,GAAK,GACXA,IAAOxC,EAAO,GAAK,WAC7B,EAAI0C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOvC,EAAO,GAAK,aAC7B,GAAKyC,IAAM,IAAMC,GAAK,GACZA,IAAO1C,EAAO,IAAM,aAC9B,GAAKwC,IAAM,IAAMC,GAAK,EAUhCD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK1C,EAAO,GAAK,SAClB,EAAIuC,IAAM,IAAMC,GAAK,IACfxC,EAAO,GAAK,aAClB,GAAK0C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKxC,EAAO,IAAM,aACnB,GAAKyC,IAAM,IAAMC,GAAK,IAChB1C,EAAO,IAAM,WACnB,GAAKwC,IAAM,GAAKC,GAAK,EAU/BD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK1C,EAAO,GAAK,aAClB,EAAIuC,IAAM,IAAMC,GAAK,IACfxC,EAAO,GAAK,aAClB,GAAK0C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKxC,EAAO,GAAK,YAClB,GAAKyC,IAAM,IAAMC,GAAK,IAChB1C,EAAO,IAAM,aACnB,GAAKwC,IAAM,GAAKC,GAAK,EAU/BD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK1C,EAAO,IAAM,YACnB,EAAIuC,IAAM,IAAMC,GAAK,IACfxC,EAAO,GAAK,YAClB,GAAK0C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKxC,EAAO,GAAK,YAClB,GAAKyC,IAAM,IAAMC,GAAK,IAChB1C,EAAO,GAAK,WAClB,GAAKwC,IAAM,GAAKC,GAAK,EAU/BD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK1C,EAAO,GAAK,YAClB,EAAIuC,IAAM,IAAMC,GAAK,IACfxC,EAAO,IAAM,YACnB,GAAK0C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKxC,EAAO,IAAM,YACnB,GAAKyC,IAAM,IAAMC,GAAK,IAChB1C,EAAO,GAAK,YAClB,GAAKwC,IAAM,GAAKC,GAAK,EAQ/BD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM1C,EAAO,GAAK,YACxB,EAAIuC,IAAM,IAAMC,GAAK,IACfC,IAAMzC,EAAO,GAAK,aACxB,GAAK0C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMxC,EAAO,IAAM,aACzB,GAAKyC,IAAM,IAAMC,GAAK,IAChBH,IAAMvC,EAAO,GAAK,WACxB,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM1C,EAAO,IAAM,aACzB,EAAIuC,IAAM,IAAMC,GAAK,IACfC,IAAMzC,EAAO,GAAK,aACxB,GAAK0C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMxC,EAAO,IAAM,UACzB,GAAKyC,IAAM,IAAMC,GAAK,IAChBH,IAAMvC,EAAO,GAAK,aACxB,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM1C,EAAO,GAAK,aACxB,EAAIuC,IAAM,IAAMC,GAAK,IACfC,IAAMzC,EAAO,IAAM,WACzB,GAAK0C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMxC,EAAO,GAAK,aACxB,GAAKyC,IAAM,IAAMC,GAAK,IAChBH,IAAMvC,EAAO,IAAM,aACzB,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM1C,EAAO,GAAK,YACxB,EAAIuC,IAAM,IAAMC,GAAK,IACfC,IAAMzC,EAAO,IAAM,aACzB,GAAK0C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMxC,EAAO,GAAK,YACxB,GAAKyC,IAAM,IAAMC,GAAK,IAChBH,IAAMvC,EAAO,GAAK,YACxB,GAAKwC,IAAM,IAAMC,GAAK,EAE5BtS,KAAK6R,OACP7R,KAAKoR,GAAKgB,EAAI,YAAc,EAC5BpS,KAAKqR,GAAKgB,EAAI,WAAa,EAC3BrS,KAAKsR,GAAKgB,EAAI,YAAc,EAC5BtS,KAAKuR,GAAKgB,EAAI,WAAa,EAC3BvS,KAAK6R,OAAQ,IAEb7R,KAAKoR,GAAKpR,KAAKoR,GAAKgB,GAAK,EACzBpS,KAAKqR,GAAKrR,KAAKqR,GAAKgB,GAAK,EACzBrS,KAAKsR,GAAKtR,KAAKsR,GAAKgB,GAAK,EACzBtS,KAAKuR,GAAKvR,KAAKuR,GAAKgB,GAAK,IAc7B/B,IAAI9O,UAAUgR,IAAM,WAClB1S,KAAKmS,WAEL,IAAIf,EAAKpR,KAAKoR,GAAIC,EAAKrR,KAAKqR,GAAIC,EAAKtR,KAAKsR,GAAIC,EAAKvR,KAAKuR,GAExD,OAAOhC,UAAW6B,GAAM,EAAK,IAAQ7B,UAAe,GAAL6B,GAC7C7B,UAAW6B,GAAM,GAAM,IAAQ7B,UAAW6B,GAAM,EAAK,IACrD7B,UAAW6B,GAAM,GAAM,IAAQ7B,UAAW6B,GAAM,GAAM,IACtD7B,UAAW6B,GAAM,GAAM,IAAQ7B,UAAW6B,GAAM,GAAM,IACtD7B,UAAW8B,GAAM,EAAK,IAAQ9B,UAAe,GAAL8B,GACxC9B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,EAAK,IACrD9B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,GAAM,IACtD9B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,GAAM,IACtD9B,UAAW+B,GAAM,EAAK,IAAQ/B,UAAe,GAAL+B,GACxC/B,UAAW+B,GAAM,GAAM,IAAQ/B,UAAW+B,GAAM,EAAK,IACrD/B,UAAW+B,GAAM,GAAM,IAAQ/B,UAAW+B,GAAM,GAAM,IACtD/B,UAAW+B,GAAM,GAAM,IAAQ/B,UAAW+B,GAAM,GAAM,IACtD/B,UAAWgC,GAAM,EAAK,IAAQhC,UAAe,GAALgC,GACxChC,UAAWgC,GAAM,GAAM,IAAQhC,UAAWgC,GAAM,EAAK,IACrDhC,UAAWgC,GAAM,GAAM,IAAQhC,UAAWgC,GAAM,GAAM,IACtDhC,UAAWgC,GAAM,GAAM,IAAQhC,UAAWgC,GAAM,GAAM,KAa1Df,IAAI9O,UAAUG,SAAW2O,IAAI9O,UAAUgR,IAYvClC,IAAI9O,UAAUwP,OAAS,WACrBlR,KAAKmS,WAEL,IAAIf,EAAKpR,KAAKoR,GAAIC,EAAKrR,KAAKqR,GAAIC,EAAKtR,KAAKsR,GAAIC,EAAKvR,KAAKuR,GACxD,MAAO,CACA,IAALH,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,IACxD,IAALC,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,IACxD,IAALC,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,IACxD,IAALC,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,MAcjEf,IAAI9O,UAAUiR,MAAQnC,IAAI9O,UAAUwP,OAYpCV,IAAI9O,UAAUkR,YAAc,WAC1B5S,KAAKmS,WAEL,IAAIpC,EAAS,IAAIT,YAAY,IACzBO,EAAS,IAAII,YAAYF,GAK7B,OAJAF,EAAO,GAAK7P,KAAKoR,GACjBvB,EAAO,GAAK7P,KAAKqR,GACjBxB,EAAO,GAAK7P,KAAKsR,GACjBzB,EAAO,GAAK7P,KAAKuR,GACVxB,GAcTS,IAAI9O,UAAUqO,OAASS,IAAI9O,UAAUkR,YAYrCpC,IAAI9O,UAAUmR,OAAS,WAErB,IADA,IAAIC,EAAIC,EAAIC,EAAIC,EAAY,GAAIxB,EAAQzR,KAAK2S,QACpC9B,EAAI,EAAGA,EAAI,IAClBiC,EAAKrB,EAAMZ,KACXkC,EAAKtB,EAAMZ,KACXmC,EAAKvB,EAAMZ,KACXoC,GAAarD,mBAAmBkD,IAAO,GACrClD,mBAA0C,IAAtBkD,GAAM,EAAIC,IAAO,IACrCnD,mBAA0C,IAAtBmD,GAAM,EAAIC,IAAO,IACrCpD,mBAAwB,GAALoD,GAMvB,OAJAF,EAAKrB,EAAMZ,GACXoC,GAAarD,mBAAmBkD,IAAO,GACrClD,mBAAoBkD,GAAM,EAAK,IAC/B,MAIJ,IAAI3D,QAAUuB,eAEV1B,UACFE,eAAiBC,QAmBjBxO,KAAKuS,IAAM/D,QA1pBf,MCKMgE,eAAiB,CACrBnH,mEACAmC,YAAaE,aAAatP,QAC1BqP,yBAAqBpM,EACrBoR,eAAgB,CACdC,OAAQ,2BACR1H,SAAU,GAEZ2H,SAAU,oDACVC,gBAAiB,mEACjBlI,QAASpM,eACTkN,MAAO,KACPc,UAAW,QACXuG,UAAU,EACVC,kBAAmB,IACnBC,qBAAsB,IACtBC,qBAAsB,EACtBC,QAAS,IACTC,iBAAkB,IAClBC,aAAc,IACdC,SAAU,QACVC,WAAY,CAAC,aACbC,SAAS,EACTtN,MAAO,KACPC,qBAAsB,gBACtBC,iBAAkB,YAClBqN,oBAAqB,SACrBC,WAAY,MAGVC,eAAiB,GACjBC,aAAe,IAAIC,IAEjBC,sCACQpV,yDAAU,mCACfA,yBACAgU,eACAhU,QAEAqV,iCACArV,IAEAa,KAAKb,QAAQ8N,gBACV,IAAIL,MAAM,wCAEb1N,OAAS,IAAIA,OAAOc,KAAKb,cACzBkM,QAAU,QACVK,OAAS,UACT+I,OAAS,UACTC,WAAY,OACZC,uBAAwB,OACxBC,qBAAsB,IAAIjV,MAAOuJ,eACjC2L,6BACAC,cAAgBT,kBAChBU,iBAAmBhR,WAAS/D,KAAKgV,SAASC,KAAKjV,MAAOA,KAAKkV,iBAAiBzB,kBAAmB,CAClGjP,SAAS,EACTE,UAAU,SAEPyQ,oBAAsB,UACtBC,oBAAqB,OACrBC,iCACAC,iFAGP,kBACStV,KAAK4U,2CAEd,gBACOW,KAAKnP,WAAW7H,OAAQ,CAC3BiX,OAAO,6CAGX,eACQC,EAAazV,KAAKb,QAAQyH,sBAAwB,gBACnD5G,KAAK0V,qBAAqBD,UAG1BtW,QAAQwH,MAAMgP,eAAeF,EAAYG,uBACzCR,oBAAqB,uCAG5B,eACQK,EAAazV,KAAKb,QAAQ0H,kBAAoB,YAC/C7G,KAAK0V,qBAAqBD,UAG1BtW,QAAQwH,MAAMgP,eAAeF,EAAYI,mBACzCT,oBAAqB,uCAG5B,SAAqBK,OACX9O,EAAU3G,KAAKb,QAAfwH,cACHA,IAGDA,EAAMW,MAAMmO,IACd9O,EAAMmP,iBAAiBL,IAElB,wCAGT,gBACOP,iBAAmB,CACtBa,WAAY,EACZpC,qBAAsB3T,KAAKb,QAAQwU,qBACnCF,kBAAmBzT,KAAKb,QAAQsU,kBAChCuC,qBAAsBhW,KAAKb,QAAQsU,kBACnCwC,qBAAsB,+BAI1B,gBACOC,4BACAxB,WAAY,OACZxV,OAAOY,IAAIsG,WAAWpI,QAASgC,KAAKkV,sDAG3C,gBACOA,iBAAiBa,WAAa,MAC/BI,EAAoBnW,KAAKkV,iBAAiBc,0BACzCd,iBAAiBzB,kBAAoB0C,OACrC1B,OAAOnG,GAAGmF,kBAAkB0C,QAC5B1B,OAAOnG,GAAGoF,qBAAqByC,kCAGtC,SAAgB7W,QACTyV,iBAAiB,QAAQ,QACzBL,WAAY,OACZxV,OAAOY,IAAIsG,WAAWnI,cAAeqB,2BAG5C,SAAS8W,QACFlX,OAAOY,IAAIsG,WAAWtH,MAAOsX,qCAGpC,gBACOrB,iBAAiB,QAAO,QACxB7V,OAAOY,IAAIsG,WAAW1H,iBAAkBsB,KAAKkV,mDAGpD,gBACOH,iBAAiB,QAAO,QACxB7V,OAAOY,IAAIsG,WAAWlI,gBAAiB8B,KAAKkV,qDAGnD,mBACOR,WAAY,EACb1U,KAAKkV,iBAAiBa,YAAc/V,KAAKkV,iBAAiBvB,0BACvDoB,iBAAiB,QAAO,WAG3B/U,KAAKkV,iBAAiBzB,kBAAoBzT,KAAKkV,iBAAiBe,qBAAsB,KACpFI,EAAWrW,KAAKkV,iBAAiBc,qBAAuBhW,KAAKkV,iBAAiBa,gBAC7Eb,iBAAiBzB,kBAAoB4C,OACrC5B,OAAOnG,GAAGmF,kBAAkB4C,QAC5B5B,OAAOnG,GAAGoF,qBAAqB2C,QAEjCnB,iBAAiBa,kBACjB7W,OAAOY,IAAIsG,WAAW9H,kBAAmB0B,KAAKkV,gDAGrD,SAAchO,QACPwN,WAAY,OACZxV,OAAOY,IAAIsG,WAAWjI,WAAY+I,QAClC8N,SAAS,QAAQ,+BAGxB,SAAa1V,IACS,WAAhBgX,QAAOhX,IAAwC,IAAnBA,EAAKiX,YAIjCjX,GAAQU,KAAK0U,gBACVxV,OAAOY,IAAIsG,WAAWxH,0BACtBgW,qBAAsB,IAAIjV,MAAOuJ,gBALjCsN,wDAWT1K,eAAuBxM,GACjBA,EAAKmX,cACDvI,mBAAmB5O,EAAKmX,OAAQzW,KAAKb,QAAQgP,YAAanO,KAAKb,QAAQiP,qBAE3E9O,EAAKoX,WACFhL,OAAS,CACZC,SAAU,EACV0H,OAAQ/T,EAAKoX,IAAInV,QAAQ,WAAY,MAGrCjC,EAAKqX,SAAWzL,MAAMC,QAAQ7L,EAAKqX,gBAChCtL,QAAU/L,EAAKqX,QAAQC,KAAI,SAAC5K,EAAKhL,SAC7B,CACL2K,SAAU3K,EACVqS,OAAQrH,EAAIzK,QAAQ,WAAY,SAIlCjC,EAAKuX,aACF1X,QAAQgN,MAAQ7M,EAAKuX,WACrB1K,MAAQ7M,EAAKuX,YACZ7W,KAAKgV,SAAS,WAAW,IAE7B1V,EAAKwX,mBACF3X,QAAQ4X,YAAczX,EAAKwX,aAE9BxX,EAAK0X,oBACF7X,QAAQ+N,aAAe5N,EAAK0X,kBAC5BC,wDAKT,sBACQpL,EAAO,IAAIlM,KAAKK,KAAKb,QAAQ4X,gBAC9BnL,YAAYC,QAGX+H,EAAU/H,EAAK3C,WAAY,IAAIvJ,MAAOuJ,UAAY,IACxDhE,YAAW4G,qBACLgB,EAAS,KACPP,QAAYW,aAAagK,EAAK/X,QAAQoU,gBAAiB2D,EAAK/X,QAAQ+N,iBACvEX,EAAIM,YACLC,EAASP,EAAIM,KAAKC,aACLoK,EAAKC,iBAAiBrK,SAE/B,IAAIF,iCACTgH,gCAGL,SAAawD,UACNA,EAAO9X,KAKL,CACLiH,KAHS6Q,EAAO9X,KAAK,GAIrBA,KAHS8X,EAAO9X,KAAK,IAHd,2BAUXwM,qBAAeJ,yDAAS,UAAW2L,0DAC7BC,EAAkB,QACP,YAAX5L,EACF4L,EAAkBtX,KAAKuX,0BAClB,GAAe,SAAX7L,EACT4L,EAAkBtX,KAAKwX,+BAClB,CAAA,GAAe,SAAX9L,QAGH,IAAIkB,wEAAiElB,sCAF3E4L,EAAkBtX,KAAKyX,yBAIpBH,SACE5L,OAAS1L,KAAKuX,2BAEhBf,6BACAkB,yBACAC,sBACAzB,uBACDmB,SAGErX,KAAK4X,MAAM5X,KAAKb,QAAQ8N,qCAGhC,eACOjN,KAAK2U,4BACF,IAAI/H,MAAM,uGAIpB,eACMiL,EAAS7X,KAAK0L,OAAO2H,OACrBU,EAAW/T,KAAKb,QAAQ4U,SACxB/H,YAAS+H,gBAAc8D,QACtB3Y,OAAOY,IAAI,kBAAmBkM,QAC9B8L,0BACC3Y,EAAU,CACd4Y,cAAc,EACdC,mBAAmB,EACnB/D,SAAS,EACTD,WAAY,CAAC,aACb5U,OAAO,GAELY,KAAKmM,QACPhN,EAAQ8Y,MAAQ,CACd9L,MAAOnM,KAAKmM,aAGXsI,OAAS/T,KAAK4N,GAAGtC,EAAK7M,GAE3BiV,eAAejK,KAAKnK,KAAKyU,aACpBE,uBAAwB,mCAE/B,2BACOF,OACJyD,GAAG9R,WAAW9H,mBAAmB,SAAAgB,UAAQ6Y,EAAKC,oBAAoB9Y,MAClE4Y,GAAG9R,WAAW1H,kBAAkB,SAAAY,UAAQ6Y,EAAKE,mBAAmB/Y,MAChE4Y,GAAG9R,WAAWpI,SAAS,SAAAsB,UAAQ6Y,EAAKG,WAAWhZ,MAC/C4Y,GAAG9R,WAAWlI,iBAAkB,SAAAoB,UAAQ6Y,EAAKI,kBAAkBjZ,MAC/D4Y,GAAG9R,WAAWnI,eAAe,SAAAqB,UAAQ6Y,EAAKK,gBAAgBlZ,MAC1D4Y,GAAG9R,WAAW3H,iBAAiB,SAAAa,UAAQ6Y,EAAKC,oBAAoB9Y,MAChE4Y,GAAG9R,WAAWtH,OAAO,SAAAQ,UAAQ6Y,EAAKM,SAASnZ,MAC3C4Y,GAAG9R,WAAWjI,YAAY,SAAAmB,UAAQ6Y,EAAKO,cAAcpZ,WACjDmV,OAAOkE,SAAW3Y,KAAK4Y,SAAS3D,KAAKjV,WACrCyU,OAAOoE,QAAU7Y,KAAK4Y,SAAS3D,KAAKjV,oCAG3C,sBACMA,KAAK8Y,mBACPC,cAAc/Y,KAAK8Y,mBAGjB9Y,KAAK8T,cACPiF,cAAe/Y,KAAK8T,mBAEjBgF,kBAAoBE,aAAYlN,qBAC7BpM,GAAM,IAAIC,MAAOuJ,UACjB+P,EAAwC,EAAhCC,EAAK/Z,QAAQ0U,iBAEvBnU,EAAMwZ,EAAKC,wBAA0BF,QACjCC,EAAKlE,SAAS,QAAQ,GAGzBkE,EAAKzE,OAIN/U,EAAMwZ,EAAKC,wBAA0BD,EAAK/Z,QAAQ0U,kBACpDqF,EAAK3D,KAAKnP,WAAWzH,WAAYua,EAAK/Z,QAAQgN,OAJ9C+M,EAAK1C,0BAQNxW,KAAKb,QAAQ0U,oDAOlB,eACMnI,EAAS,YACT1L,KAAKqL,QAAQpK,SACfyK,EAAS1L,KAAKqL,QAAQ,SAEnBK,OAASA,EACT1L,KAAK0L,cACHA,OAAS1L,KAAKb,QAAQiU,gBAEtBpT,KAAK0L,+CAGd,eACM0N,EAAwBpZ,KAAK0L,OAAOC,iBACnCzM,OAAOY,iDACRsZ,IAA0BpZ,KAAKqL,QAAQpK,OAAS,SAC3CjB,KAAKyX,6BAEV4B,EAAqBD,EAAwB,EAC7CE,EAAatZ,KAAKqL,QAAQkO,MAAK,SAAA7N,UAAUA,EAAOC,WAAa0N,YAC5DC,IACHA,EAAatZ,KAAKyX,0BAKhBzX,KAAK0L,OAAO2H,SAAWiG,EAAWjG,aAC/B3H,OAAS4N,EACPtZ,KAAK0L,cAETxM,OAAOY,wDAAyDE,KAAK0L,QACnE,mDAGT,gBACOxM,OAAOY,iDAAkD,8BAC1D0Z,EAAoBpO,6BAA6BpL,KAAKqL,gBACrDrL,KAAK0L,OAIN1L,KAAK0L,QAAU8N,EAAkBnG,SAAWrT,KAAK0L,OAAO2H,aACrD3H,OAAS8N,OACTta,OAAOY,iDAAkDE,KAAK0L,QAC5D1L,KAAK0L,QAEP,WARAA,OAAS8N,EACPxZ,KAAK0L,mCAUhBI,iBAE2C,WAArC9L,KAAKb,QAAQ+U,qBAAoClU,KAAKwU,gBAAgBnJ,SAAWH,MAAMC,QAAQnL,KAAKwU,gBAAgBnJ,UAAYrL,KAAKwU,gBAAgBnJ,QAAQpK,OAAS,SACnKoK,QAAUrL,KAAKwU,gBAAgBnJ,iCAIxC,SAAS+L,mBACFA,EAAO9X,UAGRma,EAAMzZ,KAAK0Z,aAAatC,QACvBlY,OAAOY,2BAAoB2Z,EAAIlT,MAAQkT,QACvC7E,qBAAsB,IAAIjV,MAAOuJ,eACjC4L,cAAc9K,SAAQ,SAAC2P,EAAUC,IAClB,MAAdA,GAEOH,EAAIlT,OAASqT,IADtBD,EAASF,UAiBPI,wBAXHzT,WAAWxH,oBAAsBoB,KAAK8Z,gCACtC1T,WAAW3I,eAAiBuC,KAAKmX,oCACjC/Q,WAAWtI,kBAAoBkC,KAAK+Z,2BACpC3T,WAAWzI,eAAiBqC,KAAK+Z,2BACjC3T,WAAWxI,gBAAkBoC,KAAK+Z,2BAClC3T,WAAWhJ,cAAe,WACpB4c,EAAKtF,WACRsF,EAAK1B,mBAIwBmB,EAAIlT,MACnCsT,GAAwC,mBAAjBA,GACzBA,EAAa1X,KAAKnC,KAAMyZ,EAAIna,MAE1BU,KAAKoV,oBACP6E,0BACEvT,UAAW+S,GACRzZ,KAAKb,+BASd2M,wBACM9L,KAAK2U,wBAGL3U,KAAKyU,aACFc,KAAKnP,WAAWvH,aAEjBmB,KAAKka,kBACLla,KAAKma,wBACLna,KAAK4X,MAAM5X,KAAKb,QAAQ8N,iBACxBjN,KAAKoa,gBARF,0BAgBXtO,eAAeK,QACRhN,QAAQgN,MAAQA,OAChBkO,mBACCra,KAAKsa,0CAMb,WACElG,eAAepK,SAAQ,SAAAuQ,GACrBA,EAAWC,QACXD,EAAWF,gBAEbjG,eAAiB,GACbpU,KAAKyU,cACFA,OAAO4F,kBACP5F,OAAO+F,aACP/F,OAAS,gCAOlB,gBACOK,cAAgB,IAAIR,SACpBwD,wCAQP,SAAG8B,EAAWD,QACP7E,cAAc2F,IAAIb,EAAWD,QAC7Be,iCASP,SAAKd,OAAWta,yDAAO,QAChBob,kBACAxb,OAAOY,sBAAe8Z,GAAata,QACnCmV,OAAOc,KAAKqE,EAAWta,yBAO9B,eAAOkW,kEACAD,KAAKnP,WAAW7H,OAAQ,CAAEiX,MAAAA,iCAGjC1J,eAAoBE,OACZ2O,EAAS3a,KAAKb,QAAQ6M,IACtB4O,EAAc5a,KAAKb,QAAQ+U,4BAE1BlI,cAGA7M,QAAQ6M,IAAMA,OACd7M,QAAQ+U,oBAAsB,eAC7BlU,KAAKsa,OACX,MAAOlE,QACFqC,SAASrC,QACTjX,QAAQ6M,IAAM2O,OACdxb,QAAQ+U,oBAAsB0G,QAC7B5a,KAAKsa,iCAIf,eACUrN,EAAcjN,KAAKb,QAAnB8N,kBACHd,MAAQnM,KAAKb,QAAQgN,MACR,UAAdc,IACGjN,KAAKmM,YACF,IAAIS,MAAM,2FAItB,kBACM5M,KAAKb,QAAQgP,cAAgBE,aAAatP,QACrCsO,QAAQC,WAGZkB,OAAOqM,eAAe5Z,QAEzB6Z,aAAaC,QAAQ,oBAAqBpb,KAAKD,OAG1C,IAAI2N,SAAQ,SAACC,GAClBkB,OAAOwM,iBAAiB,WAAW,SAAC1U,MAChB,sBAAdA,EAAM2U,IAERH,aAAaC,QAAQ,iBAAkBvb,KAAKC,UAAU+O,OAAOqM,iBAC7DC,aAAaI,WAAW,uBACnB,GAAkB,mBAAd5U,EAAM2U,MAA6BJ,eAAe5Z,OAAQ,KAE7D3B,EAAOE,KAAK2b,MAAM7U,EAAM8U,cAEzB,IAAIH,KAAO3b,EACVA,EAAKqC,eAAesZ,IACtBzM,OAAOqM,eAAeE,QAAQE,EAAK3b,EAAK2b,IAI5C3N,iCAWR,sBAAMjN,yDAAO,QAEPgb,EAAU,CACZlP,MAAOnM,KAAKb,QAAQgN,MACpBF,MAAOjM,KAAKb,QAAQ8M,MACpBG,SAAUpM,KAAKb,QAAQiN,SACvBF,SAAUlM,KAAKb,QAAQ+M,UAErB+O,EAAM/H,IAAI1T,KAAKC,UAAU4b,IACvBC,EAAQ,WAEVtb,KAAKmV,oBAAsBmG,GAAQ,IAAI3b,MAAOuJ,UACzCmE,QAAQC,gBAGZ6H,qBAAsB,IAAIxV,MAAOuJ,UAE/B,IAAImE,SAAQvB,eAAOwB,EAASC,WAE3BgO,EAAe/M,OAAOqM,eAAeW,QAAQP,MAE7CM,SACFA,EAAe/b,KAAK2b,MAAMI,GAC1BE,EAAKvc,OAAOY,IAAI,wBAAyByb,SACnCE,EAAKtE,iBAAiBoE,GACrBjO,EAAQiO,GAEjB,MAAOnF,GACPqF,EAAKvc,OAAOY,IAAI,2BAA4BsW,WAItCpK,EAAMe,oBAAoB0O,EAAKtc,QAAQmU,SAAUjT,GACjDkM,QAAYR,cAAcC,EAAKqP,SAC/BI,EAAKtE,iBAAiB5K,GAExBkP,EAAKtc,QAAQgP,cAAgBE,aAAatP,SAC5CyP,OAAOqM,eAAeE,QAAQE,EAAKzb,KAAKC,UAAU8M,IAGpDe,EAAQf,GACR,MAAO6J,GACPqF,EAAKpQ,QAAUoQ,EAAKjH,gBAAgBnJ,SAAWpM,eAC/CsO,EAAO6I,uBC5nBO,oBAAX5H,SAETA,OAAO+F,UAAYmH"} \ No newline at end of file diff --git a/src/sdk.js b/src/sdk.js index 7a687cda..a96d6c1c 100644 --- a/src/sdk.js +++ b/src/sdk.js @@ -15,6 +15,7 @@ import md5 from "js-md5"; const defaultOptions = { url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`, environment: environments.BROWSER, + getSocketIOFunction: undefined, fallbackServer: { Domain: 'monitor5.voicenter.co.il', Priority: 0, @@ -193,7 +194,7 @@ class EventsSDK { async _onLoginResponse(data) { if (data.Client) { - await loadExternalScript(data.Client, this.options.environment) + await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction) } if (data.URL) { this.server = { diff --git a/src/utils/loadExternalScript.js b/src/utils/loadExternalScript.js index 7e797034..07dd787e 100644 --- a/src/utils/loadExternalScript.js +++ b/src/utils/loadExternalScript.js @@ -25,7 +25,13 @@ async function loadExtensionScript(url) { } } -export async function loadExternalScript(url, environment) { +export async function loadExternalScript(url, environment, getSocketIOFunction) { + if (typeof getSocketIOFunction === 'function') { + self.io = getSocketIOFunction(url) + + return + } + switch (environment) { case environments.BROWSER: await loadBrowserScript(url) From 80fae24a7f076227eeeed6b8f55c17440baf579d Mon Sep 17 00:00:00 2001 From: Bohdan Date: Fri, 1 Apr 2022 18:40:55 +0300 Subject: [PATCH 10/27] Fix: get tabs session logic --- dist/voicenter-events-sdk.cjs.js | 33 ++++++++++++++-------------- dist/voicenter-events-sdk.esm.js | 33 ++++++++++++++-------------- dist/voicenter-events-sdk.umd.js | 2 +- dist/voicenter-events-sdk.umd.js.map | 2 +- src/sdk.js | 32 +++++++++++++-------------- 5 files changed, 49 insertions(+), 53 deletions(-) diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js index ead95178..a7e3a7ce 100644 --- a/dist/voicenter-events-sdk.cjs.js +++ b/dist/voicenter-events-sdk.cjs.js @@ -1358,25 +1358,24 @@ var EventsSDK = /*#__PURE__*/function () { localStorage.setItem('getSessionStorage', Date.now()); } - return new Promise(function (resolve) { - window.addEventListener('storage', function (event) { - if (event.key === 'getSessionStorage') { - // Some tab asked for the sessionStorage -> send it - localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); - localStorage.removeItem('sessionStorage'); - } else if (event.key === 'sessionStorage' && !sessionStorage.length) { - // sessionStorage is empty -> fill it - var data = JSON.parse(event.newValue); - - for (var key in data) { - if (data.hasOwnProperty(key)) { - window.sessionStorage.setItem(key, data[key]); - } + window.addEventListener('storage', function (event) { + if (event.key === 'getSessionStorage') { + // Some tab asked for the sessionStorage -> send it + localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); + localStorage.removeItem('sessionStorage'); + } else if (event.key === 'sessionStorage' && !sessionStorage.length) { + // sessionStorage is empty -> fill it + var data = JSON.parse(event.newValue); + + for (var key in data) { + if (data.hasOwnProperty(key)) { + window.sessionStorage.setItem(key, data[key]); } - - resolve(); } - }); + } + }); + return new Promise(function (resolve) { + return setTimeout(resolve, 200); }); } /** diff --git a/dist/voicenter-events-sdk.esm.js b/dist/voicenter-events-sdk.esm.js index a9bdfd20..b0ad2d38 100644 --- a/dist/voicenter-events-sdk.esm.js +++ b/dist/voicenter-events-sdk.esm.js @@ -1354,25 +1354,24 @@ var EventsSDK = /*#__PURE__*/function () { localStorage.setItem('getSessionStorage', Date.now()); } - return new Promise(function (resolve) { - window.addEventListener('storage', function (event) { - if (event.key === 'getSessionStorage') { - // Some tab asked for the sessionStorage -> send it - localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); - localStorage.removeItem('sessionStorage'); - } else if (event.key === 'sessionStorage' && !sessionStorage.length) { - // sessionStorage is empty -> fill it - var data = JSON.parse(event.newValue); - - for (var key in data) { - if (data.hasOwnProperty(key)) { - window.sessionStorage.setItem(key, data[key]); - } + window.addEventListener('storage', function (event) { + if (event.key === 'getSessionStorage') { + // Some tab asked for the sessionStorage -> send it + localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); + localStorage.removeItem('sessionStorage'); + } else if (event.key === 'sessionStorage' && !sessionStorage.length) { + // sessionStorage is empty -> fill it + var data = JSON.parse(event.newValue); + + for (var key in data) { + if (data.hasOwnProperty(key)) { + window.sessionStorage.setItem(key, data[key]); } - - resolve(); } - }); + } + }); + return new Promise(function (resolve) { + return setTimeout(resolve, 200); }); } /** diff --git a/dist/voicenter-events-sdk.umd.js b/dist/voicenter-events-sdk.umd.js index 10a95894..94463b3a 100644 --- a/dist/voicenter-events-sdk.umd.js +++ b/dist/voicenter-events-sdk.umd.js @@ -8,5 +8,5 @@ * @copyright Chen, Yi-Cyuan 2014-2017 * @license MIT */ -!function(){var ERROR="input is invalid type",WINDOW="object"==typeof window,root=WINDOW?window:{};root.JS_MD5_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&"object"==typeof self,NODE_JS=!root.JS_MD5_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS?root=commonjsGlobal:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_MD5_NO_COMMON_JS&&module.exports,ARRAY_BUFFER=!root.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[128,32768,8388608,-2147483648],SHIFT=[0,8,16,24],OUTPUT_TYPES=["hex","array","digest","buffer","arrayBuffer","base64"],BASE64_ENCODE_CHAR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),blocks=[],buffer8;if(ARRAY_BUFFER){var buffer=new ArrayBuffer(68);buffer8=new Uint8Array(buffer),blocks=new Uint32Array(buffer)}!root.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!ARRAY_BUFFER||!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e){return function(t){return new Md5(!0).update(t)[e]()}},createMethod=function(){var e=createOutputMethod("hex");NODE_JS&&(e=nodeWrap(e)),e.create=function(){return new Md5},e.update=function(t){return e.create().update(t)};for(var t=0;t>2]|=e[r]<>6,c[i++]=128|63&o):o<55296||o>=57344?(c[i++]=224|o>>12,c[i++]=128|o>>6&63,c[i++]=128|63&o):(o=65536+((1023&o)<<10|1023&e.charCodeAt(++r)),c[i++]=240|o>>18,c[i++]=128|o>>12&63,c[i++]=128|o>>6&63,c[i++]=128|63&o);else for(i=this.start;r>2]|=o<>2]|=(192|o>>6)<>2]|=(128|63&o)<=57344?(a[i>>2]|=(224|o>>12)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<>2]|=(240|o>>18)<>2]|=(128|o>>12&63)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<=64?(this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,o,i,r,s=this.blocks;this.first?t=((t=((e=((e=s[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(o=((o=(-1732584194^2004318071&e)+s[1]-117830708)<<12|o>>>20)+e<<0)&(-271733879^e))+s[2]-1126478375)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((o=this.h3)^t&(n^o))+s[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[1]-389564586)<<12|o>>>20)+e<<0)&(e^t))+s[2]+606105819)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(o^t&(n^o))+s[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[5]+1200080426)<<12|o>>>20)+e<<0)&(e^t))+s[6]-1473231341)<<17|n>>>15)+o<<0)&(o^e))+s[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[9]-1958414417)<<12|o>>>20)+e<<0)&(e^t))+s[10]-42063)<<17|n>>>15)+o<<0)&(o^e))+s[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[13]-40341101)<<12|o>>>20)+e<<0)&(e^t))+s[14]-1502002290)<<17|n>>>15)+o<<0)&(o^e))+s[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[1]-165796510)<<5|e>>>27)+t<<0)^t))+s[6]-1069501632)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[11]+643717713)<<14|n>>>18)+o<<0)^o))+s[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[5]-701558691)<<5|e>>>27)+t<<0)^t))+s[10]+38016083)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[15]-660478335)<<14|n>>>18)+o<<0)^o))+s[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[9]+568446438)<<5|e>>>27)+t<<0)^t))+s[14]-1019803690)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[3]-187363961)<<14|n>>>18)+o<<0)^o))+s[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[13]-1444681467)<<5|e>>>27)+t<<0)^t))+s[2]-51403784)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[7]+1735328473)<<14|n>>>18)+o<<0)^o))+s[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[5]-378558)<<4|e>>>28)+t<<0))+s[8]-2022574463)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[11]+1839030562)<<16|n>>>16)+o<<0))+s[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[1]-1530992060)<<4|e>>>28)+t<<0))+s[4]+1272893353)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[7]-155497632)<<16|n>>>16)+o<<0))+s[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[13]+681279174)<<4|e>>>28)+t<<0))+s[0]-358537222)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[3]-722521979)<<16|n>>>16)+o<<0))+s[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[9]-640364487)<<4|e>>>28)+t<<0))+s[12]-421815835)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[15]+530742520)<<16|n>>>16)+o<<0))+s[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[0]-198630844)<<6|e>>>26)+t<<0)|~n))+s[7]+1126891415)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[14]-1416354905)<<15|n>>>17)+o<<0)|~e))+s[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+s[3]-1894986606)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[10]-1051523)<<15|n>>>17)+o<<0)|~e))+s[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+s[15]-30611744)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[6]-1560198380)<<15|n>>>17)+o<<0)|~e))+s[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[4]-145523070)<<6|e>>>26)+t<<0)|~n))+s[11]-1120210379)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[2]+718787259)<<15|n>>>17)+o<<0)|~e))+s[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=o+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+o<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[15&o]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return[255&e,e>>8&255,e>>16&255,e>>24&255,255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,o="",i=this.array(),r=0;r<15;)e=i[r++],t=i[r++],n=i[r++],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=i[r],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:root.md5=exports}()})),defaultOptions={url:"https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls",environment:environments.BROWSER,getSocketIOFunction:void 0,fallbackServer:{Domain:"monitor5.voicenter.co.il",Priority:0},loginUrl:"https://loginapi.voicenter.co.il/monitorAPI/Login",refreshTokenUrl:"https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken",servers:defaultServers,token:null,loginType:"token",forceNew:!0,reconnectionDelay:1e4,reconnectionDelayMax:1e4,maxReconnectAttempts:2,timeout:1e4,keepAliveTimeout:6e4,idleInterval:3e5,protocol:"https",transports:["websocket"],upgrade:!1,store:null,extensionsModuleName:"sdkExtensions",queuesModuleName:"sdkQueues",dialersModuleName:"sdkDialers",serverFetchStrategy:"remote",serverType:null},allConnections=[],listenersMap=new Map,EventsSDK=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(_classCallCheck(this,e),this.options=Object.assign({},defaultOptions,t),this.argumentOptions=Object.assign({},t),!this.options.loginType)throw new Error("A login type should be provided");this.Logger=new Logger(this.options),this.servers=[],this.server=null,this.socket=null,this.connected=!1,this.connectionEstablished=!1,this._lastEventTimestamp=(new Date).getTime(),this._initReconnectOptions(),this._listenersMap=listenersMap,this._retryConnection=debounce_1(this._connect.bind(this),this.reconnectOptions.reconnectionDelay,{leading:!0,trailing:!1}),this._lastLoginTimestamp=null,this._handleLocalEvents=!1,this._registerExtensionsModule(),this._registerQueueModule(),this._registerDialerModule()}return _createClass(e,[{key:"getLastEventTimestamp",value:function(){return this._lastEventTimestamp}},{key:"_reSync",value:function(){this.emit(eventTypes.RESYNC,{cache:!1})}},{key:"_registerExtensionsModule",value:function(){var e=this.options.extensionsModuleName||"sdkExtensions";this._validateStoreModule(e)&&(this.options.store.registerModule(e,extensionsModule),this._handleLocalEvents=!0)}},{key:"_registerQueueModule",value:function(){var e=this.options.queuesModuleName||"sdkQueues";this._validateStoreModule(e)&&(this.options.store.registerModule(e,queuesModule),this._handleLocalEvents=!0)}},{key:"_registerDialerModule",value:function(){var e=this.options.dialersModuleName||"sdkDialers";this._validateStoreModule(e)&&(this.options.store.registerModule(e,dialersModule),this._handleLocalEvents=!0)}},{key:"_validateStoreModule",value:function(e){var t=this.options.store;return!!t&&(t.state[e]&&t.unregisterModule(e),!0)}},{key:"_initReconnectOptions",value:function(){this.reconnectOptions={retryCount:1,maxReconnectAttempts:this.options.maxReconnectAttempts,reconnectionDelay:this.options.reconnectionDelay,minReconnectionDelay:this.options.reconnectionDelay,maxReconnectionDelay:3e5}}},{key:"_onConnect",value:function(){this._initReconnectDelays(),this.connected=!0,this.Logger.log(eventTypes.CONNECT,this.reconnectOptions)}},{key:"_initReconnectDelays",value:function(){this.reconnectOptions.retryCount=1;var e=this.reconnectOptions.minReconnectionDelay;this.reconnectOptions.reconnectionDelay=e,this.socket.io.reconnectionDelay(e),this.socket.io.reconnectionDelayMax(e)}},{key:"_onConnectError",value:function(e){this._retryConnection("next",!0),this.connected=!1,this.Logger.log(eventTypes.CONNECT_ERROR,e)}},{key:"_onError",value:function(e){this.Logger.log(eventTypes.ERROR,e)}},{key:"_onReconnectFailed",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.RECONNECT_FAILED,this.reconnectOptions)}},{key:"_onConnectTimeout",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.CONNECT_TIMEOUT,this.reconnectOptions)}},{key:"_onReconnectAttempt",value:function(){if(this.connected=!1,this.reconnectOptions.retryCount>=this.reconnectOptions.maxReconnectAttempts)this._retryConnection("next",!0);else{if(this.reconnectOptions.reconnectionDelay0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=null;if("default"===e)n=this._findCurrentServer();else if("next"===e)n=this._findNextAvailableServer();else{if("prev"!==e)throw new Error("Incorrect 'server' parameter passed to connect function ".concat(e,". Should be 'default' or 'next'"));n=this._findMaxPriorityServer()}n||(this.server=this._findCurrentServer()),this._initSocketConnection(),this._initSocketEvents(),this._initKeepAlive(),this._initReconnectDelays(),t||await this.login(this.options.loginType)}},{key:"_checkInit",value:function(){if(!this.connectionEstablished)throw new Error('Make sure you call "sdk.init()" before doing other operations.')}},{key:"_initSocketConnection",value:function(){var e=this.server.Domain,t=this.options.protocol,n="".concat(t,"://").concat(e);this.Logger.log("Connecting to..",n),this.closeAllConnections();var o={reconnection:!1,perMessageDeflate:!1,upgrade:!1,transports:["websocket"],debug:!1};this.token&&(o.query={token:this.token}),this.socket=self.io(n,o),allConnections.push(this.socket),this.connectionEstablished=!0}},{key:"_initSocketEvents",value:function(){var e=this;this.socket.on(eventTypes.RECONNECT_ATTEMPT,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.RECONNECT_FAILED,(function(t){return e._onReconnectFailed(t)})).on(eventTypes.CONNECT,(function(t){return e._onConnect(t)})).on(eventTypes.CONNECT_TIMEOUT,(function(t){return e._onConnectTimeout(t)})).on(eventTypes.CONNECT_ERROR,(function(t){return e._onConnectError(t)})).on(eventTypes.RECONNECT_ERROR,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.ERROR,(function(t){return e._onError(t)})).on(eventTypes.DISCONNECT,(function(t){return e._onDisconnect(t)})),this.socket.onpacket=this._onEvent.bind(this),this.socket.onevent=this._onEvent.bind(this)}},{key:"_initKeepAlive",value:function(){var e=this;this.keepAliveInterval&&clearInterval(this.keepAliveInterval),this.idleInterval&&clearInterval(this.idleInterval),this.keepAliveInterval=setInterval((async function(){var t=(new Date).getTime(),n=2*e.options.keepAliveTimeout;t>e.getLastEventTimestamp()+n?await e._connect("next",!0):e.socket?t>e.getLastEventTimestamp()+e.options.keepAliveTimeout&&e.emit(eventTypes.KEEP_ALIVE,e.options.token):e._initSocketConnection()}),this.options.keepAliveTimeout)}},{key:"_findCurrentServer",value:function(){var e=null;return this.servers.length&&(e=this.servers[0]),this.server=e,this.server||(this.server=this.options.fallbackServer),this.server}},{key:"_findNextAvailableServer",value:function(){var e=this.server.Priority;if(this.Logger.log("Failover -> Trying to find another server"),e===this.servers.length-1)return this._findMaxPriorityServer();var t=e+1,n=this.servers.find((function(e){return e.Priority===t}));return n||(n=this._findMaxPriorityServer())?this.server.Domain!==n.Domain?(this.server=n,this.server):(this.Logger.log("Failover -> Found new server. Connecting to it...",this.server),null):void 0}},{key:"_findMaxPriorityServer",value:function(){this.Logger.log("Fallback -> Trying to find previous server","_findMaxPriorityServer");var e=getServerWithHighestPriority(this.servers);return this.server?this.server&&e.Domain!==this.server.Domain?(this.server=e,this.Logger.log("Fallback -> Trying to find previous server",this.server),this.server):null:(this.server=e,this.server)}},{key:"_getServers",value:async function(){"static"===this.options.serverFetchStrategy&&this.argumentOptions.servers&&Array.isArray(this.argumentOptions.servers)&&this.argumentOptions.servers.length>1&&(this.servers=this.argumentOptions.servers)}},{key:"_onEvent",value:function(e){var t,n=this;if(e.data){var o=this._parsePacket(e);this.Logger.log("New event -> ".concat(o.name),o),this._lastEventTimestamp=(new Date).getTime(),this._listenersMap.forEach((function(e,t){("*"===t||o.name===t)&&e(o)}));var i=(_defineProperty(t={},eventTypes.KEEP_ALIVE_RESPONSE,this._onKeepAlive),_defineProperty(t,eventTypes.LOGIN_RESPONSE,this._onLoginResponse),_defineProperty(t,eventTypes.EXTENSION_UPDATED,this._reSync),_defineProperty(t,eventTypes.QUEUES_UPDATED,this._reSync),_defineProperty(t,eventTypes.DIALERS_UPDATED,this._reSync),_defineProperty(t,eventTypes.LOGIN_STATUS,(function(){n.connected||n._onConnect()})),t)[o.name];i&&"function"==typeof i&&i.call(this,o.data),this._handleLocalEvents&&onNewEvent(Object.assign({eventData:o},this.options))}}},{key:"init",value:async function(){return this.connectionEstablished||(this.socket&&this.emit(eventTypes.CLOSE),await this._getToken(),await this._getTabsSession(),await this.login(this.options.loginType),await this._getServers()),!0}},{key:"setToken",value:async function(e){this.options.token=e,this.disconnect(),await this.init()}},{key:"closeAllConnections",value:function(){allConnections.forEach((function(e){e.close(),e.disconnect()})),allConnections=[],this.socket&&(this.socket.disconnect(),this.socket.close(),this.socket=null)}},{key:"disconnect",value:function(){this._listenersMap=new Map,this.closeAllConnections()}},{key:"on",value:function(e,t){this._listenersMap.set(e,t),this._checkInit()}},{key:"emit",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._checkInit(),this.Logger.log("EMIT -> ".concat(e),t),this.socket.emit(e,t)}},{key:"reSync",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.emit(eventTypes.RESYNC,{cache:e})}},{key:"setMonitorUrl",value:async function(e){var t=this.options.url,n=this.options.serverFetchStrategy;try{if(!e)return;this.options.url=e,this.options.serverFetchStrategy="remote",await this.init()}catch(e){this._onError(e),this.options.url=t,this.options.serverFetchStrategy=n,await this.init()}}},{key:"_getToken",value:function(){var e=this.options.loginType;if(this.token=this.options.token,"token"===e&&!this.token)throw new Error("Token login type expects the token option to be provided")}},{key:"_getTabsSession",value:function(){return this.options.environment!==environments.BROWSER?Promise.resolve():(window.sessionStorage.length||localStorage.setItem("getSessionStorage",Date.now()),new Promise((function(e){window.addEventListener("storage",(function(t){if("getSessionStorage"===t.key)localStorage.setItem("sessionStorage",JSON.stringify(window.sessionStorage)),localStorage.removeItem("sessionStorage");else if("sessionStorage"===t.key&&!sessionStorage.length){var n=JSON.parse(t.newValue);for(var o in n)n.hasOwnProperty(o)&&window.sessionStorage.setItem(o,n[o]);e()}}))})))}},{key:"login",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"token",n={token:this.options.token,email:this.options.email,username:this.options.username,password:this.options.password},o=md5(JSON.stringify(n)),i=1e3;return this._lastLoginTimestamp+i>(new Date).getTime()?Promise.resolve():(this._lastLoginTimestamp=(new Date).getTime(),new Promise((async function(i,r){try{var s=window.sessionStorage.getItem(o);if(s)return s=JSON.parse(s),e.Logger.log("got data from session",s),await e._onLoginResponse(s),i(s)}catch(t){e.Logger.log("Error on getting session",t)}try{var a=getExternalLoginUrl(e.options.loginUrl,t),c=await externalLogin(a,n);await e._onLoginResponse(c),e.options.environment===environments.BROWSER&&window.sessionStorage.setItem(o,JSON.stringify(c)),i(c)}catch(t){e.servers=e.argumentOptions.servers||defaultServers,r(t)}})))}}]),e}();return"undefined"!=typeof window&&(window.EventsSDK=EventsSDK),EventsSDK})); +!function(){var ERROR="input is invalid type",WINDOW="object"==typeof window,root=WINDOW?window:{};root.JS_MD5_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&"object"==typeof self,NODE_JS=!root.JS_MD5_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS?root=commonjsGlobal:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_MD5_NO_COMMON_JS&&module.exports,ARRAY_BUFFER=!root.JS_MD5_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[128,32768,8388608,-2147483648],SHIFT=[0,8,16,24],OUTPUT_TYPES=["hex","array","digest","buffer","arrayBuffer","base64"],BASE64_ENCODE_CHAR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),blocks=[],buffer8;if(ARRAY_BUFFER){var buffer=new ArrayBuffer(68);buffer8=new Uint8Array(buffer),blocks=new Uint32Array(buffer)}!root.JS_MD5_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!ARRAY_BUFFER||!root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e){return function(t){return new Md5(!0).update(t)[e]()}},createMethod=function(){var e=createOutputMethod("hex");NODE_JS&&(e=nodeWrap(e)),e.create=function(){return new Md5},e.update=function(t){return e.create().update(t)};for(var t=0;t>2]|=e[r]<>6,c[i++]=128|63&o):o<55296||o>=57344?(c[i++]=224|o>>12,c[i++]=128|o>>6&63,c[i++]=128|63&o):(o=65536+((1023&o)<<10|1023&e.charCodeAt(++r)),c[i++]=240|o>>18,c[i++]=128|o>>12&63,c[i++]=128|o>>6&63,c[i++]=128|63&o);else for(i=this.start;r>2]|=o<>2]|=(192|o>>6)<>2]|=(128|63&o)<=57344?(a[i>>2]|=(224|o>>12)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<>2]|=(240|o>>18)<>2]|=(128|o>>12&63)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<=64?(this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,o,i,r,s=this.blocks;this.first?t=((t=((e=((e=s[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(o=((o=(-1732584194^2004318071&e)+s[1]-117830708)<<12|o>>>20)+e<<0)&(-271733879^e))+s[2]-1126478375)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((o=this.h3)^t&(n^o))+s[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[1]-389564586)<<12|o>>>20)+e<<0)&(e^t))+s[2]+606105819)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(o^t&(n^o))+s[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[5]+1200080426)<<12|o>>>20)+e<<0)&(e^t))+s[6]-1473231341)<<17|n>>>15)+o<<0)&(o^e))+s[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[9]-1958414417)<<12|o>>>20)+e<<0)&(e^t))+s[10]-42063)<<17|n>>>15)+o<<0)&(o^e))+s[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[13]-40341101)<<12|o>>>20)+e<<0)&(e^t))+s[14]-1502002290)<<17|n>>>15)+o<<0)&(o^e))+s[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[1]-165796510)<<5|e>>>27)+t<<0)^t))+s[6]-1069501632)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[11]+643717713)<<14|n>>>18)+o<<0)^o))+s[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[5]-701558691)<<5|e>>>27)+t<<0)^t))+s[10]+38016083)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[15]-660478335)<<14|n>>>18)+o<<0)^o))+s[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[9]+568446438)<<5|e>>>27)+t<<0)^t))+s[14]-1019803690)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[3]-187363961)<<14|n>>>18)+o<<0)^o))+s[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[13]-1444681467)<<5|e>>>27)+t<<0)^t))+s[2]-51403784)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[7]+1735328473)<<14|n>>>18)+o<<0)^o))+s[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[5]-378558)<<4|e>>>28)+t<<0))+s[8]-2022574463)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[11]+1839030562)<<16|n>>>16)+o<<0))+s[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[1]-1530992060)<<4|e>>>28)+t<<0))+s[4]+1272893353)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[7]-155497632)<<16|n>>>16)+o<<0))+s[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[13]+681279174)<<4|e>>>28)+t<<0))+s[0]-358537222)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[3]-722521979)<<16|n>>>16)+o<<0))+s[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[9]-640364487)<<4|e>>>28)+t<<0))+s[12]-421815835)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[15]+530742520)<<16|n>>>16)+o<<0))+s[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[0]-198630844)<<6|e>>>26)+t<<0)|~n))+s[7]+1126891415)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[14]-1416354905)<<15|n>>>17)+o<<0)|~e))+s[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+s[3]-1894986606)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[10]-1051523)<<15|n>>>17)+o<<0)|~e))+s[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+s[15]-30611744)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[6]-1560198380)<<15|n>>>17)+o<<0)|~e))+s[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[4]-145523070)<<6|e>>>26)+t<<0)|~n))+s[11]-1120210379)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[2]+718787259)<<15|n>>>17)+o<<0)|~e))+s[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=o+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+o<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[15&o]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return[255&e,e>>8&255,e>>16&255,e>>24&255,255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,o="",i=this.array(),r=0;r<15;)e=i[r++],t=i[r++],n=i[r++],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=i[r],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:root.md5=exports}()})),defaultOptions={url:"https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls",environment:environments.BROWSER,getSocketIOFunction:void 0,fallbackServer:{Domain:"monitor5.voicenter.co.il",Priority:0},loginUrl:"https://loginapi.voicenter.co.il/monitorAPI/Login",refreshTokenUrl:"https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken",servers:defaultServers,token:null,loginType:"token",forceNew:!0,reconnectionDelay:1e4,reconnectionDelayMax:1e4,maxReconnectAttempts:2,timeout:1e4,keepAliveTimeout:6e4,idleInterval:3e5,protocol:"https",transports:["websocket"],upgrade:!1,store:null,extensionsModuleName:"sdkExtensions",queuesModuleName:"sdkQueues",dialersModuleName:"sdkDialers",serverFetchStrategy:"remote",serverType:null},allConnections=[],listenersMap=new Map,EventsSDK=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(_classCallCheck(this,e),this.options=Object.assign({},defaultOptions,t),this.argumentOptions=Object.assign({},t),!this.options.loginType)throw new Error("A login type should be provided");this.Logger=new Logger(this.options),this.servers=[],this.server=null,this.socket=null,this.connected=!1,this.connectionEstablished=!1,this._lastEventTimestamp=(new Date).getTime(),this._initReconnectOptions(),this._listenersMap=listenersMap,this._retryConnection=debounce_1(this._connect.bind(this),this.reconnectOptions.reconnectionDelay,{leading:!0,trailing:!1}),this._lastLoginTimestamp=null,this._handleLocalEvents=!1,this._registerExtensionsModule(),this._registerQueueModule(),this._registerDialerModule()}return _createClass(e,[{key:"getLastEventTimestamp",value:function(){return this._lastEventTimestamp}},{key:"_reSync",value:function(){this.emit(eventTypes.RESYNC,{cache:!1})}},{key:"_registerExtensionsModule",value:function(){var e=this.options.extensionsModuleName||"sdkExtensions";this._validateStoreModule(e)&&(this.options.store.registerModule(e,extensionsModule),this._handleLocalEvents=!0)}},{key:"_registerQueueModule",value:function(){var e=this.options.queuesModuleName||"sdkQueues";this._validateStoreModule(e)&&(this.options.store.registerModule(e,queuesModule),this._handleLocalEvents=!0)}},{key:"_registerDialerModule",value:function(){var e=this.options.dialersModuleName||"sdkDialers";this._validateStoreModule(e)&&(this.options.store.registerModule(e,dialersModule),this._handleLocalEvents=!0)}},{key:"_validateStoreModule",value:function(e){var t=this.options.store;return!!t&&(t.state[e]&&t.unregisterModule(e),!0)}},{key:"_initReconnectOptions",value:function(){this.reconnectOptions={retryCount:1,maxReconnectAttempts:this.options.maxReconnectAttempts,reconnectionDelay:this.options.reconnectionDelay,minReconnectionDelay:this.options.reconnectionDelay,maxReconnectionDelay:3e5}}},{key:"_onConnect",value:function(){this._initReconnectDelays(),this.connected=!0,this.Logger.log(eventTypes.CONNECT,this.reconnectOptions)}},{key:"_initReconnectDelays",value:function(){this.reconnectOptions.retryCount=1;var e=this.reconnectOptions.minReconnectionDelay;this.reconnectOptions.reconnectionDelay=e,this.socket.io.reconnectionDelay(e),this.socket.io.reconnectionDelayMax(e)}},{key:"_onConnectError",value:function(e){this._retryConnection("next",!0),this.connected=!1,this.Logger.log(eventTypes.CONNECT_ERROR,e)}},{key:"_onError",value:function(e){this.Logger.log(eventTypes.ERROR,e)}},{key:"_onReconnectFailed",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.RECONNECT_FAILED,this.reconnectOptions)}},{key:"_onConnectTimeout",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.CONNECT_TIMEOUT,this.reconnectOptions)}},{key:"_onReconnectAttempt",value:function(){if(this.connected=!1,this.reconnectOptions.retryCount>=this.reconnectOptions.maxReconnectAttempts)this._retryConnection("next",!0);else{if(this.reconnectOptions.reconnectionDelay0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=null;if("default"===e)n=this._findCurrentServer();else if("next"===e)n=this._findNextAvailableServer();else{if("prev"!==e)throw new Error("Incorrect 'server' parameter passed to connect function ".concat(e,". Should be 'default' or 'next'"));n=this._findMaxPriorityServer()}n||(this.server=this._findCurrentServer()),this._initSocketConnection(),this._initSocketEvents(),this._initKeepAlive(),this._initReconnectDelays(),t||await this.login(this.options.loginType)}},{key:"_checkInit",value:function(){if(!this.connectionEstablished)throw new Error('Make sure you call "sdk.init()" before doing other operations.')}},{key:"_initSocketConnection",value:function(){var e=this.server.Domain,t=this.options.protocol,n="".concat(t,"://").concat(e);this.Logger.log("Connecting to..",n),this.closeAllConnections();var o={reconnection:!1,perMessageDeflate:!1,upgrade:!1,transports:["websocket"],debug:!1};this.token&&(o.query={token:this.token}),this.socket=self.io(n,o),allConnections.push(this.socket),this.connectionEstablished=!0}},{key:"_initSocketEvents",value:function(){var e=this;this.socket.on(eventTypes.RECONNECT_ATTEMPT,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.RECONNECT_FAILED,(function(t){return e._onReconnectFailed(t)})).on(eventTypes.CONNECT,(function(t){return e._onConnect(t)})).on(eventTypes.CONNECT_TIMEOUT,(function(t){return e._onConnectTimeout(t)})).on(eventTypes.CONNECT_ERROR,(function(t){return e._onConnectError(t)})).on(eventTypes.RECONNECT_ERROR,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.ERROR,(function(t){return e._onError(t)})).on(eventTypes.DISCONNECT,(function(t){return e._onDisconnect(t)})),this.socket.onpacket=this._onEvent.bind(this),this.socket.onevent=this._onEvent.bind(this)}},{key:"_initKeepAlive",value:function(){var e=this;this.keepAliveInterval&&clearInterval(this.keepAliveInterval),this.idleInterval&&clearInterval(this.idleInterval),this.keepAliveInterval=setInterval((async function(){var t=(new Date).getTime(),n=2*e.options.keepAliveTimeout;t>e.getLastEventTimestamp()+n?await e._connect("next",!0):e.socket?t>e.getLastEventTimestamp()+e.options.keepAliveTimeout&&e.emit(eventTypes.KEEP_ALIVE,e.options.token):e._initSocketConnection()}),this.options.keepAliveTimeout)}},{key:"_findCurrentServer",value:function(){var e=null;return this.servers.length&&(e=this.servers[0]),this.server=e,this.server||(this.server=this.options.fallbackServer),this.server}},{key:"_findNextAvailableServer",value:function(){var e=this.server.Priority;if(this.Logger.log("Failover -> Trying to find another server"),e===this.servers.length-1)return this._findMaxPriorityServer();var t=e+1,n=this.servers.find((function(e){return e.Priority===t}));return n||(n=this._findMaxPriorityServer())?this.server.Domain!==n.Domain?(this.server=n,this.server):(this.Logger.log("Failover -> Found new server. Connecting to it...",this.server),null):void 0}},{key:"_findMaxPriorityServer",value:function(){this.Logger.log("Fallback -> Trying to find previous server","_findMaxPriorityServer");var e=getServerWithHighestPriority(this.servers);return this.server?this.server&&e.Domain!==this.server.Domain?(this.server=e,this.Logger.log("Fallback -> Trying to find previous server",this.server),this.server):null:(this.server=e,this.server)}},{key:"_getServers",value:async function(){"static"===this.options.serverFetchStrategy&&this.argumentOptions.servers&&Array.isArray(this.argumentOptions.servers)&&this.argumentOptions.servers.length>1&&(this.servers=this.argumentOptions.servers)}},{key:"_onEvent",value:function(e){var t,n=this;if(e.data){var o=this._parsePacket(e);this.Logger.log("New event -> ".concat(o.name),o),this._lastEventTimestamp=(new Date).getTime(),this._listenersMap.forEach((function(e,t){("*"===t||o.name===t)&&e(o)}));var i=(_defineProperty(t={},eventTypes.KEEP_ALIVE_RESPONSE,this._onKeepAlive),_defineProperty(t,eventTypes.LOGIN_RESPONSE,this._onLoginResponse),_defineProperty(t,eventTypes.EXTENSION_UPDATED,this._reSync),_defineProperty(t,eventTypes.QUEUES_UPDATED,this._reSync),_defineProperty(t,eventTypes.DIALERS_UPDATED,this._reSync),_defineProperty(t,eventTypes.LOGIN_STATUS,(function(){n.connected||n._onConnect()})),t)[o.name];i&&"function"==typeof i&&i.call(this,o.data),this._handleLocalEvents&&onNewEvent(Object.assign({eventData:o},this.options))}}},{key:"init",value:async function(){return this.connectionEstablished||(this.socket&&this.emit(eventTypes.CLOSE),await this._getToken(),await this._getTabsSession(),await this.login(this.options.loginType),await this._getServers()),!0}},{key:"setToken",value:async function(e){this.options.token=e,this.disconnect(),await this.init()}},{key:"closeAllConnections",value:function(){allConnections.forEach((function(e){e.close(),e.disconnect()})),allConnections=[],this.socket&&(this.socket.disconnect(),this.socket.close(),this.socket=null)}},{key:"disconnect",value:function(){this._listenersMap=new Map,this.closeAllConnections()}},{key:"on",value:function(e,t){this._listenersMap.set(e,t),this._checkInit()}},{key:"emit",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._checkInit(),this.Logger.log("EMIT -> ".concat(e),t),this.socket.emit(e,t)}},{key:"reSync",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.emit(eventTypes.RESYNC,{cache:e})}},{key:"setMonitorUrl",value:async function(e){var t=this.options.url,n=this.options.serverFetchStrategy;try{if(!e)return;this.options.url=e,this.options.serverFetchStrategy="remote",await this.init()}catch(e){this._onError(e),this.options.url=t,this.options.serverFetchStrategy=n,await this.init()}}},{key:"_getToken",value:function(){var e=this.options.loginType;if(this.token=this.options.token,"token"===e&&!this.token)throw new Error("Token login type expects the token option to be provided")}},{key:"_getTabsSession",value:function(){return this.options.environment!==environments.BROWSER?Promise.resolve():(window.sessionStorage.length||localStorage.setItem("getSessionStorage",Date.now()),window.addEventListener("storage",(function(e){if("getSessionStorage"===e.key)localStorage.setItem("sessionStorage",JSON.stringify(window.sessionStorage)),localStorage.removeItem("sessionStorage");else if("sessionStorage"===e.key&&!sessionStorage.length){var t=JSON.parse(e.newValue);for(var n in t)t.hasOwnProperty(n)&&window.sessionStorage.setItem(n,t[n])}})),new Promise((function(e){return setTimeout(e,200)})))}},{key:"login",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"token",n={token:this.options.token,email:this.options.email,username:this.options.username,password:this.options.password},o=md5(JSON.stringify(n)),i=1e3;return this._lastLoginTimestamp+i>(new Date).getTime()?Promise.resolve():(this._lastLoginTimestamp=(new Date).getTime(),new Promise((async function(i,r){try{var s=window.sessionStorage.getItem(o);if(s)return s=JSON.parse(s),e.Logger.log("got data from session",s),await e._onLoginResponse(s),i(s)}catch(t){e.Logger.log("Error on getting session",t)}try{var a=getExternalLoginUrl(e.options.loginUrl,t),c=await externalLogin(a,n);await e._onLoginResponse(c),e.options.environment===environments.BROWSER&&window.sessionStorage.setItem(o,JSON.stringify(c)),i(c)}catch(t){e.servers=e.argumentOptions.servers||defaultServers,r(t)}})))}}]),e}();return"undefined"!=typeof window&&(window.EventsSDK=EventsSDK),EventsSDK})); //# sourceMappingURL=voicenter-events-sdk.umd.js.map diff --git a/dist/voicenter-events-sdk.umd.js.map b/dist/voicenter-events-sdk.umd.js.map index 56721141..f9cfbce4 100644 --- a/dist/voicenter-events-sdk.umd.js.map +++ b/dist/voicenter-events-sdk.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/utils/environments.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n ALL_DIALERS_STATUS: 'AllDialersStatus',\r\n DIALER_EVENT: 'DialerEvent'\r\n}\r\n","export default {\r\n BROWSER: 'browser',\r\n CHROME_EXTENSION: 'chrome-extension'\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n case eventTypes.DIALER_EVENT:\r\n store.dispatch(`${dialersModuleName}/updateDialers`, data.dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","import environments from './environments'\r\n\r\nfunction loadBrowserScript(url) {\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n\r\nasync function loadExtensionScript(url) {\r\n try {\r\n let script = await fetch(url)\r\n script = await script.text()\r\n\r\n eval(script)\r\n } catch (e) {\r\n return Promise.reject(e)\r\n }\r\n}\r\n\r\nexport async function loadExternalScript(url, environment, getSocketIOFunction) {\r\n if (typeof getSocketIOFunction === 'function') {\r\n self.io = getSocketIOFunction(url)\r\n\r\n return\r\n }\r\n\r\n switch (environment) {\r\n case environments.BROWSER:\r\n await loadBrowserScript(url)\r\n break\r\n case environments.CHROME_EXTENSION:\r\n await loadExtensionScript(url)\r\n }\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport environments from './utils/environments'\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n environment: environments.BROWSER,\r\n getSocketIOFunction: undefined,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction)\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = self.io(url, options)\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) {\r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession() {\r\n if (this.options.environment !== environments.BROWSER) {\r\n return Promise.resolve()\r\n }\r\n\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n }\r\n\r\n return new Promise((resolve) => {\r\n window.addEventListener('storage', (event) => {\r\n if (event.key === 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key === 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n const data = JSON.parse(event.newValue)\r\n\r\n for (let key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n\r\n resolve()\r\n }\r\n })\r\n })\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n\r\n this._lastLoginTimestamp = new Date().getTime()\r\n\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n let loginSession = window.sessionStorage.getItem(key);\r\n\r\n if (loginSession) {\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n } catch (err) {\r\n this.Logger.log('Error on getting session', err)\r\n }\r\n\r\n try {\r\n const url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url, payload)\r\n await this._onLoginResponse(res)\r\n\r\n if (this.options.environment === environments.BROWSER) {\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n }\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","DIALER_EVENT","BROWSER","CHROME_EXTENSION","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadBrowserScript","Promise","resolve","reject","script","document","createElement","src","onload","onerror","append","loadExtensionScript","text","eval","loadExternalScript","environment","getSocketIOFunction","environments","io","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/utils/environments.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n ALL_DIALERS_STATUS: 'AllDialersStatus',\r\n DIALER_EVENT: 'DialerEvent'\r\n}\r\n","export default {\r\n BROWSER: 'browser',\r\n CHROME_EXTENSION: 'chrome-extension'\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n case eventTypes.DIALER_EVENT:\r\n store.dispatch(`${dialersModuleName}/updateDialers`, data.dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","import environments from './environments'\n\nfunction loadBrowserScript(url) {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = url;\n script.onload = () => {\n resolve();\n };\n script.onerror = () => {\n reject();\n };\n document.body.append(script);\n });\n}\n\nasync function loadExtensionScript(url) {\n try {\n let script = await fetch(url)\n script = await script.text()\n\n eval(script)\n } catch (e) {\n return Promise.reject(e)\n }\n}\n\nexport async function loadExternalScript(url, environment, getSocketIOFunction) {\n if (typeof getSocketIOFunction === 'function') {\n self.io = getSocketIOFunction(url)\n\n return\n }\n\n switch (environment) {\n case environments.BROWSER:\n await loadBrowserScript(url)\n break\n case environments.CHROME_EXTENSION:\n await loadExtensionScript(url)\n }\n}\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\nimport environments from './utils/environments'\nimport { defaultServers } from './config';\nimport Logger from './Logger';\nimport debounce from 'lodash/debounce'\nimport handleStoreEvents from './store/handleStoreEvents'\nimport extensionsModule from './store/extensions'\nimport queuesModule from './store/queues'\nimport dialersModule from './store/dialers'\nimport { getServerWithHighestPriority, isValidDate } from './utils';\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\nimport { loadExternalScript } from './utils/loadExternalScript'\nimport md5 from \"js-md5\";\n\n\nconst defaultOptions = {\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\n environment: environments.BROWSER,\n getSocketIOFunction: undefined,\n fallbackServer: {\n Domain: 'monitor5.voicenter.co.il',\n Priority: 0,\n },\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\n servers: defaultServers,\n token: null,\n loginType: 'token',\n forceNew: true,\n reconnectionDelay: 10000,\n reconnectionDelayMax: 10000,\n maxReconnectAttempts: 2,\n timeout: 10000,\n keepAliveTimeout: 60000,\n idleInterval: 60000 * 5, // 5 minutes\n protocol: 'https',\n transports: ['websocket'],\n upgrade: false,\n store: null,\n extensionsModuleName: 'sdkExtensions',\n queuesModuleName: 'sdkQueues',\n dialersModuleName: 'sdkDialers',\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\n};\n\nlet allConnections = [];\nlet listenersMap = new Map();\n\nclass EventsSDK {\n constructor(options = {}) {\n this.options = {\n ...defaultOptions,\n ...options,\n };\n this.argumentOptions = {\n ...options\n }\n if (!this.options.loginType) {\n throw new Error('A login type should be provided');\n }\n this.Logger = new Logger(this.options);\n this.servers = [];\n this.server = null;\n this.socket = null;\n this.connected = false;\n this.connectionEstablished = false;\n this._lastEventTimestamp = new Date().getTime();\n this._initReconnectOptions();\n this._listenersMap = listenersMap;\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\n leading: true,\n trailing: false\n });\n this._lastLoginTimestamp = null;\n this._handleLocalEvents = false;\n this._registerExtensionsModule();\n this._registerQueueModule();\n this._registerDialerModule();\n }\n\n getLastEventTimestamp() {\n return this._lastEventTimestamp\n }\n _reSync () {\n this.emit(eventTypes.RESYNC, {\n cache: false\n });\n }\n _registerExtensionsModule() {\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, extensionsModule)\n this._handleLocalEvents = true\n }\n\n _registerQueueModule() {\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, queuesModule)\n this._handleLocalEvents = true\n }\n\n _registerDialerModule() {\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, dialersModule)\n this._handleLocalEvents = true\n }\n\n _validateStoreModule(moduleName) {\n const { store } = this.options\n if (!store) {\n return false\n }\n if (store.state[moduleName]) {\n store.unregisterModule(moduleName)\n }\n return true\n }\n\n _initReconnectOptions() {\n this.reconnectOptions = {\n retryCount: 1,\n maxReconnectAttempts: this.options.maxReconnectAttempts,\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\n maxReconnectionDelay: 60000 * 5 // 5 minutes\n }\n }\n\n _onConnect() {\n this._initReconnectDelays();\n this.connected = true;\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\n }\n\n _initReconnectDelays() {\n this.reconnectOptions.retryCount = 1;\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\n this.socket.io.reconnectionDelay(minReconnectDelay);\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\n }\n\n _onConnectError(data) {\n this._retryConnection('next', true);\n this.connected = false;\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\n }\n\n _onError(err) {\n this.Logger.log(eventTypes.ERROR, err);\n }\n\n _onReconnectFailed() {\n this._retryConnection('next',true);\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\n }\n\n _onConnectTimeout() {\n this._retryConnection('next',true);\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\n }\n\n _onReconnectAttempt() {\n this.connected = false;\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\n this._retryConnection('next',true);\n return;\n }\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\n this.reconnectOptions.reconnectionDelay = newDelay;\n this.socket.io.reconnectionDelay(newDelay);\n this.socket.io.reconnectionDelayMax(newDelay);\n }\n this.reconnectOptions.retryCount++;\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\n }\n\n _onDisconnect(reason) {\n this.connected = false;\n this.Logger.log(eventTypes.DISCONNECT, reason);\n this._connect('next', true)\n }\n\n _onKeepAlive(data) {\n if (typeof data === 'object' && data.errorCode !== 0) {\n this._initSocketConnection();\n return\n }\n if (data && this.connected) {\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\n this._lastEventTimestamp = new Date().getTime()\n } else {\n this._initSocketConnection();\n }\n }\n\n async _onLoginResponse(data) {\n if (data.Client) {\n await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction)\n }\n if (data.URL) {\n this.server = {\n Priority: 0,\n Domain: data.URL.replace('https://', '')\n }\n }\n if (data.URLList && Array.isArray(data.URLList)) {\n this.servers = data.URLList.map((url, index) => {\n return {\n Priority: index,\n Domain: url.replace('https://', '')\n }\n })\n }\n if (data.Token) {\n this.options.token = data.Token;\n this.token = data.Token\n await this._connect('default', true)\n }\n if (data.TokenExpiry) {\n this.options.tokenExpiry = data.TokenExpiry\n }\n if (data.RefreshToken) {\n this.options.refreshToken = data.RefreshToken\n this._handleTokenExpiry()\n }\n\n }\n\n _handleTokenExpiry() {\n const date = new Date(this.options.tokenExpiry)\n if (!isValidDate(date)) {\n return\n }\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\n setTimeout(async () => {\n let Socket = null\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\n if(res.Data){\n Socket = res.Data.Socket;\n return await this._onLoginResponse(Socket)\n }\n throw new Error(`Error on refreshToken`)\n }, timeout)\n }\n\n _parsePacket(packet) {\n if (!packet.data) {\n return {};\n }\n let name = packet.data[0];\n let data = packet.data[1];\n return {\n name,\n data\n };\n }\n\n async _connect(server = 'default', skipLogin = false) {\n let serverToConnect = null;\n if (server === 'default') {\n serverToConnect = this._findCurrentServer();\n } else if (server === 'next') {\n serverToConnect = this._findNextAvailableServer()\n } else if (server === 'prev') {\n serverToConnect = this._findMaxPriorityServer()\n } else {\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\n }\n if (!serverToConnect) {\n this.server = this._findCurrentServer();\n }\n this._initSocketConnection();\n this._initSocketEvents();\n this._initKeepAlive();\n this._initReconnectDelays();\n if (skipLogin) {\n return\n }\n await this.login(this.options.loginType)\n }\n\n _checkInit() {\n if (!this.connectionEstablished) {\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\n }\n }\n\n _initSocketConnection() {\n let domain = this.server.Domain;\n let protocol = this.options.protocol;\n let url = `${protocol}://${domain}`;\n this.Logger.log('Connecting to..', url);\n this.closeAllConnections();\n const options = {\n reconnection: false,\n perMessageDeflate: false,\n upgrade: false,\n transports: ['websocket'],\n debug: false\n }\n if (this.token) {\n options.query = {\n token: this.token\n }\n }\n this.socket = self.io(url, options)\n\n allConnections.push(this.socket);\n this.connectionEstablished = true;\n }\n _initSocketEvents() {\n this.socket\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\n .on(eventTypes.CONNECT, data => this._onConnect(data))\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\n .on(eventTypes.ERROR, data => this._onError(data))\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\n this.socket.onpacket = this._onEvent.bind(this)\n this.socket.onevent = this._onEvent.bind(this)\n }\n\n _initKeepAlive() {\n if (this.keepAliveInterval) {\n clearInterval(this.keepAliveInterval)\n }\n\n if (this.idleInterval) {\n clearInterval((this.idleInterval))\n }\n this.keepAliveInterval = setInterval(async () => {\n const now = new Date().getTime()\n const delta = this.options.keepAliveTimeout * 2\n\n if (now > this.getLastEventTimestamp() + delta) {\n await this._connect('next', true)\n return\n }\n if (!this.socket) {\n this._initSocketConnection();\n return\n }\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\n return\n }\n\n }, this.options.keepAliveTimeout);\n\n // this.idleInterval = setInterval(() => {\n // this.reSync(false)\n // }, this.options.idleInterval)\n }\n\n _findCurrentServer() {\n let server = null;\n if (this.servers.length) {\n server = this.servers[0];\n }\n this.server = server;\n if (!this.server) {\n this.server = this.options.fallbackServer\n }\n return this.server;\n }\n\n _findNextAvailableServer() {\n let currentServerPriority = this.server.Priority;\n this.Logger.log(`Failover -> Trying to find another server`);\n if (currentServerPriority === this.servers.length - 1) {\n return this._findMaxPriorityServer()\n }\n let nextServerPriority = currentServerPriority + 1\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\n if (!nextServer) {\n nextServer = this._findMaxPriorityServer();\n if (!nextServer) {\n return\n }\n }\n if (this.server.Domain !== nextServer.Domain) {\n this.server = nextServer;\n return this.server\n }\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\n return null\n }\n\n _findMaxPriorityServer() {\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\n if (!this.server) {\n this.server = maxPriorityServer;\n return this.server\n }\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\n this.server = maxPriorityServer;\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\n return this.server\n }\n return null\n }\n\n async _getServers() {\n // Ignore server fetch if we have a list of servers passed via options\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\n this.servers = this.argumentOptions.servers\n }\n }\n\n _onEvent(packet) {\n if (!packet.data) {\n return;\n }\n let evt = this._parsePacket(packet);\n this.Logger.log(`New event -> ${evt.name}`, evt);\n this._lastEventTimestamp = new Date().getTime()\n this._listenersMap.forEach((callback, eventName) => {\n if (eventName === '*') {\n callback(evt);\n } else if (evt.name === eventName) {\n callback(evt);\n }\n })\n const eventMappings = {\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\n [eventTypes.QUEUES_UPDATED]: this._reSync,\n [eventTypes.DIALERS_UPDATED]: this._reSync,\n [eventTypes.LOGIN_STATUS]: () => {\n if (!this.connected) {\n this._onConnect()\n }\n }\n };\n const eventHandler = eventMappings[evt.name];\n if (eventHandler && typeof eventHandler === 'function') {\n eventHandler.call(this, evt.data);\n }\n if (this._handleLocalEvents) {\n handleStoreEvents({\n eventData: evt,\n ...this.options\n });\n }\n }\n\n /**\n * Initializes socket connection. Should be called before any other action\n * @return {Promise}\n */\n async init() {\n if (this.connectionEstablished) {\n return true;\n }\n if (this.socket) {\n this.emit(eventTypes.CLOSE);\n }\n await this._getToken();\n await this._getTabsSession();\n await this.login(this.options.loginType)\n await this._getServers();\n return true;\n }\n\n /**\n * Sets the monitor code token\n * @param token\n */\n async setToken(token) {\n this.options.token = token\n this.disconnect()\n await this.init()\n }\n\n /**\n * Closes all existing connections\n */\n closeAllConnections() {\n allConnections.forEach(connection => {\n connection.close()\n connection.disconnect()\n })\n allConnections = []\n if (this.socket) {\n this.socket.disconnect()\n this.socket.close()\n this.socket = null\n }\n }\n\n /**\n * Disconnects the socket instance from the servers\n */\n disconnect() {\n this._listenersMap = new Map();\n this.closeAllConnections()\n }\n\n /**\n * Listens for new events\n * @param {string} eventName (name of the event, * for all events)\n * @param {function} callback (callback function when even with the specified name is received)\n */\n on(eventName, callback) {\n this._listenersMap.set(eventName, callback);\n this._checkInit()\n }\n\n /**\n * Emits an event to the server\n * @param {string} eventName (name of the event)\n * @param {object} data (data for the event)\n */\n\n emit(eventName, data = {}) {\n this._checkInit();\n this.Logger.log(`EMIT -> ${eventName}`, data);\n this.socket.emit(eventName, data);\n }\n\n /**\n * Calls resync event to resync socket data\n * @param cache\n */\n reSync(cache = true) {\n this.emit(eventTypes.RESYNC, { cache })\n }\n\n async setMonitorUrl(url) {\n const oldUrl = this.options.url\n const oldStrategy = this.options.serverFetchStrategy\n try {\n if (!url) {\n return\n }\n this.options.url = url\n this.options.serverFetchStrategy = 'remote'\n await this.init()\n } catch (err) {\n this._onError(err)\n this.options.url = oldUrl\n this.options.serverFetchStrategy = oldStrategy\n await this.init()\n }\n }\n\n _getToken() {\n const { loginType } = this.options\n this.token = this.options.token;\n if (loginType === 'token') {\n if (!this.token) {\n throw new Error('Token login type expects the token option to be provided');\n }\n }\n }\n _getTabsSession() {\n if (this.options.environment !== environments.BROWSER) {\n return Promise.resolve()\n }\n\n if (!window.sessionStorage.length) {\n // Ask other tabs for session storage\n localStorage.setItem('getSessionStorage', Date.now());\n }\n\n window.addEventListener('storage', (event) => {\n if (event.key === 'getSessionStorage') {\n // Some tab asked for the sessionStorage -> send it\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\n localStorage.removeItem('sessionStorage');\n } else if (event.key === 'sessionStorage' && !sessionStorage.length) {\n // sessionStorage is empty -> fill it\n const data = JSON.parse(event.newValue)\n\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n window.sessionStorage.setItem(key, data[key]);\n }\n }\n }\n })\n\n return new Promise(resolve => setTimeout((resolve), 200))\n }\n\n /**\n * Login (logs in based on the token/credentials provided)\n * @param type (login type. Can be token/user/code/account)\n * @return {Promise}\n */\n login(type = 'token') {\n // throttle login for 1 second\n let payload = {\n token: this.options.token,\n email: this.options.email,\n username: this.options.username,\n password: this.options.password\n }\n let key = md5(JSON.stringify(payload))\n const delay = 1000;\n\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\n return Promise.resolve()\n }\n\n this._lastLoginTimestamp = new Date().getTime()\n\n return new Promise(async (resolve, reject) => {\n try {\n let loginSession = window.sessionStorage.getItem(key);\n\n if (loginSession) {\n loginSession = JSON.parse(loginSession)\n this.Logger.log('got data from session', loginSession);\n await this._onLoginResponse(loginSession)\n return resolve(loginSession);\n }\n } catch (err) {\n this.Logger.log('Error on getting session', err)\n }\n\n try {\n const url = getExternalLoginUrl(this.options.loginUrl, type)\n const res = await externalLogin(url, payload)\n await this._onLoginResponse(res)\n\n if (this.options.environment === environments.BROWSER) {\n window.sessionStorage.setItem(key, JSON.stringify(res));\n }\n\n resolve(res)\n } catch (err) {\n this.servers = this.argumentOptions.servers || defaultServers;\n reject(err)\n }\n });\n }\n}\n\nexport default EventsSDK;\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","DIALER_EVENT","BROWSER","CHROME_EXTENSION","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadBrowserScript","Promise","resolve","reject","script","document","createElement","src","onload","onerror","append","loadExtensionScript","text","eval","loadExternalScript","environment","getSocketIOFunction","environments","io","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file diff --git a/src/sdk.js b/src/sdk.js index 618ba84c..a05fd162 100644 --- a/src/sdk.js +++ b/src/sdk.js @@ -578,26 +578,24 @@ class EventsSDK { localStorage.setItem('getSessionStorage', Date.now()); } - return new Promise((resolve) => { - window.addEventListener('storage', (event) => { - if (event.key === 'getSessionStorage') { - // Some tab asked for the sessionStorage -> send it - localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); - localStorage.removeItem('sessionStorage'); - } else if (event.key === 'sessionStorage' && !sessionStorage.length) { - // sessionStorage is empty -> fill it - const data = JSON.parse(event.newValue) - - for (let key in data) { - if (data.hasOwnProperty(key)) { - window.sessionStorage.setItem(key, data[key]); - } + window.addEventListener('storage', (event) => { + if (event.key === 'getSessionStorage') { + // Some tab asked for the sessionStorage -> send it + localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); + localStorage.removeItem('sessionStorage'); + } else if (event.key === 'sessionStorage' && !sessionStorage.length) { + // sessionStorage is empty -> fill it + const data = JSON.parse(event.newValue) + + for (let key in data) { + if (data.hasOwnProperty(key)) { + window.sessionStorage.setItem(key, data[key]); } - - resolve() } - }) + } }) + + return new Promise(resolve => setTimeout((resolve), 200)) } /** From d74609b8ccfe06efaf9fc2e1cab6f21bc2bbf61b Mon Sep 17 00:00:00 2001 From: Bohdan Date: Fri, 1 Apr 2022 18:41:32 +0300 Subject: [PATCH 11/27] Update: version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a720c65b..0b4e05db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "voicenter-events-sdk", - "version": "0.8.6", + "version": "0.8.7", "scripts": { "serve": "npm run docs", "build": "bili", From be62a2ee4b7823a9eefe6fc14bd0c4262133b132 Mon Sep 17 00:00:00 2001 From: OrtZz Date: Sun, 3 Apr 2022 14:49:38 +0300 Subject: [PATCH 12/27] updated: updating dialers logic in handlerStoreEvents --- src/store/handleStoreEvents.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/store/handleStoreEvents.js b/src/store/handleStoreEvents.js index ac517faa..3df41346 100644 --- a/src/store/handleStoreEvents.js +++ b/src/store/handleStoreEvents.js @@ -63,7 +63,8 @@ export default function onNewEvent({ eventData, store, extensionsModuleName, que store.dispatch(`${dialersModuleName}/setDialers`, data.dialers) break; case eventTypes.DIALER_EVENT: - store.dispatch(`${dialersModuleName}/updateDialers`, data.dialers) + let dialers = [data.data]; + store.dispatch(`${dialersModuleName}/updateDialers`, dialers) break; default: break; From 2ed24b8289b155718da14fcfc61ed78a49a52925 Mon Sep 17 00:00:00 2001 From: OrtZz Date: Mon, 4 Apr 2022 09:55:29 +0300 Subject: [PATCH 13/27] updated: dialer store --- dist/voicenter-events-sdk.cjs.js | 3 ++- dist/voicenter-events-sdk.esm.js | 3 ++- dist/voicenter-events-sdk.umd.js | 2 +- dist/voicenter-events-sdk.umd.js.map | 2 +- src/store/handleStoreEvents.js | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js index a7e3a7ce..d5e58c9b 100644 --- a/dist/voicenter-events-sdk.cjs.js +++ b/dist/voicenter-events-sdk.cjs.js @@ -302,7 +302,8 @@ function onNewEvent(_ref) { break; case eventTypes.DIALER_EVENT: - store.dispatch("".concat(dialersModuleName, "/updateDialers"), data.dialers); + var dialers = [data.data]; + store.dispatch("".concat(dialersModuleName, "/updateDialers"), dialers); break; } } diff --git a/dist/voicenter-events-sdk.esm.js b/dist/voicenter-events-sdk.esm.js index b0ad2d38..85c98dd6 100644 --- a/dist/voicenter-events-sdk.esm.js +++ b/dist/voicenter-events-sdk.esm.js @@ -298,7 +298,8 @@ function onNewEvent(_ref) { break; case eventTypes.DIALER_EVENT: - store.dispatch("".concat(dialersModuleName, "/updateDialers"), data.dialers); + var dialers = [data.data]; + store.dispatch("".concat(dialersModuleName, "/updateDialers"), dialers); break; } } diff --git a/dist/voicenter-events-sdk.umd.js b/dist/voicenter-events-sdk.umd.js index 94463b3a..808bec20 100644 --- a/dist/voicenter-events-sdk.umd.js +++ b/dist/voicenter-events-sdk.umd.js @@ -1,4 +1,4 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).VoicenterEventsSDK=t()}(this,(function(){"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers);break;case eventTypes.DIALER_EVENT:n.dispatch("".concat(r,"/updateDialers"),a.dialers)}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){e.all=t})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all},getAllDialersWithTypeIVR:function(e){return e.all.filter((function(e){return"IVR"===e.type}))},getAllDialersWithTypeAUTOMATIC:function(e){return e.all.filter((function(e){return"Automatic"===e.type}))}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Prioritye.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers);break;case eventTypes.DIALER_EVENT:var f=[a.data];n.dispatch("".concat(r,"/updateDialers"),f)}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){e.all=t})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all},getAllDialersWithTypeIVR:function(e){return e.all.filter((function(e){return"IVR"===e.type}))},getAllDialersWithTypeAUTOMATIC:function(e){return e.all.filter((function(e){return"Automatic"===e.type}))}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Priority ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n case eventTypes.DIALER_EVENT:\r\n store.dispatch(`${dialersModuleName}/updateDialers`, data.dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","import environments from './environments'\n\nfunction loadBrowserScript(url) {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = url;\n script.onload = () => {\n resolve();\n };\n script.onerror = () => {\n reject();\n };\n document.body.append(script);\n });\n}\n\nasync function loadExtensionScript(url) {\n try {\n let script = await fetch(url)\n script = await script.text()\n\n eval(script)\n } catch (e) {\n return Promise.reject(e)\n }\n}\n\nexport async function loadExternalScript(url, environment, getSocketIOFunction) {\n if (typeof getSocketIOFunction === 'function') {\n self.io = getSocketIOFunction(url)\n\n return\n }\n\n switch (environment) {\n case environments.BROWSER:\n await loadBrowserScript(url)\n break\n case environments.CHROME_EXTENSION:\n await loadExtensionScript(url)\n }\n}\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\nimport environments from './utils/environments'\nimport { defaultServers } from './config';\nimport Logger from './Logger';\nimport debounce from 'lodash/debounce'\nimport handleStoreEvents from './store/handleStoreEvents'\nimport extensionsModule from './store/extensions'\nimport queuesModule from './store/queues'\nimport dialersModule from './store/dialers'\nimport { getServerWithHighestPriority, isValidDate } from './utils';\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\nimport { loadExternalScript } from './utils/loadExternalScript'\nimport md5 from \"js-md5\";\n\n\nconst defaultOptions = {\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\n environment: environments.BROWSER,\n getSocketIOFunction: undefined,\n fallbackServer: {\n Domain: 'monitor5.voicenter.co.il',\n Priority: 0,\n },\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\n servers: defaultServers,\n token: null,\n loginType: 'token',\n forceNew: true,\n reconnectionDelay: 10000,\n reconnectionDelayMax: 10000,\n maxReconnectAttempts: 2,\n timeout: 10000,\n keepAliveTimeout: 60000,\n idleInterval: 60000 * 5, // 5 minutes\n protocol: 'https',\n transports: ['websocket'],\n upgrade: false,\n store: null,\n extensionsModuleName: 'sdkExtensions',\n queuesModuleName: 'sdkQueues',\n dialersModuleName: 'sdkDialers',\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\n};\n\nlet allConnections = [];\nlet listenersMap = new Map();\n\nclass EventsSDK {\n constructor(options = {}) {\n this.options = {\n ...defaultOptions,\n ...options,\n };\n this.argumentOptions = {\n ...options\n }\n if (!this.options.loginType) {\n throw new Error('A login type should be provided');\n }\n this.Logger = new Logger(this.options);\n this.servers = [];\n this.server = null;\n this.socket = null;\n this.connected = false;\n this.connectionEstablished = false;\n this._lastEventTimestamp = new Date().getTime();\n this._initReconnectOptions();\n this._listenersMap = listenersMap;\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\n leading: true,\n trailing: false\n });\n this._lastLoginTimestamp = null;\n this._handleLocalEvents = false;\n this._registerExtensionsModule();\n this._registerQueueModule();\n this._registerDialerModule();\n }\n\n getLastEventTimestamp() {\n return this._lastEventTimestamp\n }\n _reSync () {\n this.emit(eventTypes.RESYNC, {\n cache: false\n });\n }\n _registerExtensionsModule() {\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, extensionsModule)\n this._handleLocalEvents = true\n }\n\n _registerQueueModule() {\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, queuesModule)\n this._handleLocalEvents = true\n }\n\n _registerDialerModule() {\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\n if (!this._validateStoreModule(moduleName)) {\n return\n }\n this.options.store.registerModule(moduleName, dialersModule)\n this._handleLocalEvents = true\n }\n\n _validateStoreModule(moduleName) {\n const { store } = this.options\n if (!store) {\n return false\n }\n if (store.state[moduleName]) {\n store.unregisterModule(moduleName)\n }\n return true\n }\n\n _initReconnectOptions() {\n this.reconnectOptions = {\n retryCount: 1,\n maxReconnectAttempts: this.options.maxReconnectAttempts,\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\n maxReconnectionDelay: 60000 * 5 // 5 minutes\n }\n }\n\n _onConnect() {\n this._initReconnectDelays();\n this.connected = true;\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\n }\n\n _initReconnectDelays() {\n this.reconnectOptions.retryCount = 1;\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\n this.socket.io.reconnectionDelay(minReconnectDelay);\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\n }\n\n _onConnectError(data) {\n this._retryConnection('next', true);\n this.connected = false;\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\n }\n\n _onError(err) {\n this.Logger.log(eventTypes.ERROR, err);\n }\n\n _onReconnectFailed() {\n this._retryConnection('next',true);\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\n }\n\n _onConnectTimeout() {\n this._retryConnection('next',true);\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\n }\n\n _onReconnectAttempt() {\n this.connected = false;\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\n this._retryConnection('next',true);\n return;\n }\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\n this.reconnectOptions.reconnectionDelay = newDelay;\n this.socket.io.reconnectionDelay(newDelay);\n this.socket.io.reconnectionDelayMax(newDelay);\n }\n this.reconnectOptions.retryCount++;\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\n }\n\n _onDisconnect(reason) {\n this.connected = false;\n this.Logger.log(eventTypes.DISCONNECT, reason);\n this._connect('next', true)\n }\n\n _onKeepAlive(data) {\n if (typeof data === 'object' && data.errorCode !== 0) {\n this._initSocketConnection();\n return\n }\n if (data && this.connected) {\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\n this._lastEventTimestamp = new Date().getTime()\n } else {\n this._initSocketConnection();\n }\n }\n\n async _onLoginResponse(data) {\n if (data.Client) {\n await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction)\n }\n if (data.URL) {\n this.server = {\n Priority: 0,\n Domain: data.URL.replace('https://', '')\n }\n }\n if (data.URLList && Array.isArray(data.URLList)) {\n this.servers = data.URLList.map((url, index) => {\n return {\n Priority: index,\n Domain: url.replace('https://', '')\n }\n })\n }\n if (data.Token) {\n this.options.token = data.Token;\n this.token = data.Token\n await this._connect('default', true)\n }\n if (data.TokenExpiry) {\n this.options.tokenExpiry = data.TokenExpiry\n }\n if (data.RefreshToken) {\n this.options.refreshToken = data.RefreshToken\n this._handleTokenExpiry()\n }\n\n }\n\n _handleTokenExpiry() {\n const date = new Date(this.options.tokenExpiry)\n if (!isValidDate(date)) {\n return\n }\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\n setTimeout(async () => {\n let Socket = null\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\n if(res.Data){\n Socket = res.Data.Socket;\n return await this._onLoginResponse(Socket)\n }\n throw new Error(`Error on refreshToken`)\n }, timeout)\n }\n\n _parsePacket(packet) {\n if (!packet.data) {\n return {};\n }\n let name = packet.data[0];\n let data = packet.data[1];\n return {\n name,\n data\n };\n }\n\n async _connect(server = 'default', skipLogin = false) {\n let serverToConnect = null;\n if (server === 'default') {\n serverToConnect = this._findCurrentServer();\n } else if (server === 'next') {\n serverToConnect = this._findNextAvailableServer()\n } else if (server === 'prev') {\n serverToConnect = this._findMaxPriorityServer()\n } else {\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\n }\n if (!serverToConnect) {\n this.server = this._findCurrentServer();\n }\n this._initSocketConnection();\n this._initSocketEvents();\n this._initKeepAlive();\n this._initReconnectDelays();\n if (skipLogin) {\n return\n }\n await this.login(this.options.loginType)\n }\n\n _checkInit() {\n if (!this.connectionEstablished) {\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\n }\n }\n\n _initSocketConnection() {\n let domain = this.server.Domain;\n let protocol = this.options.protocol;\n let url = `${protocol}://${domain}`;\n this.Logger.log('Connecting to..', url);\n this.closeAllConnections();\n const options = {\n reconnection: false,\n perMessageDeflate: false,\n upgrade: false,\n transports: ['websocket'],\n debug: false\n }\n if (this.token) {\n options.query = {\n token: this.token\n }\n }\n this.socket = self.io(url, options)\n\n allConnections.push(this.socket);\n this.connectionEstablished = true;\n }\n _initSocketEvents() {\n this.socket\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\n .on(eventTypes.CONNECT, data => this._onConnect(data))\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\n .on(eventTypes.ERROR, data => this._onError(data))\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\n this.socket.onpacket = this._onEvent.bind(this)\n this.socket.onevent = this._onEvent.bind(this)\n }\n\n _initKeepAlive() {\n if (this.keepAliveInterval) {\n clearInterval(this.keepAliveInterval)\n }\n\n if (this.idleInterval) {\n clearInterval((this.idleInterval))\n }\n this.keepAliveInterval = setInterval(async () => {\n const now = new Date().getTime()\n const delta = this.options.keepAliveTimeout * 2\n\n if (now > this.getLastEventTimestamp() + delta) {\n await this._connect('next', true)\n return\n }\n if (!this.socket) {\n this._initSocketConnection();\n return\n }\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\n return\n }\n\n }, this.options.keepAliveTimeout);\n\n // this.idleInterval = setInterval(() => {\n // this.reSync(false)\n // }, this.options.idleInterval)\n }\n\n _findCurrentServer() {\n let server = null;\n if (this.servers.length) {\n server = this.servers[0];\n }\n this.server = server;\n if (!this.server) {\n this.server = this.options.fallbackServer\n }\n return this.server;\n }\n\n _findNextAvailableServer() {\n let currentServerPriority = this.server.Priority;\n this.Logger.log(`Failover -> Trying to find another server`);\n if (currentServerPriority === this.servers.length - 1) {\n return this._findMaxPriorityServer()\n }\n let nextServerPriority = currentServerPriority + 1\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\n if (!nextServer) {\n nextServer = this._findMaxPriorityServer();\n if (!nextServer) {\n return\n }\n }\n if (this.server.Domain !== nextServer.Domain) {\n this.server = nextServer;\n return this.server\n }\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\n return null\n }\n\n _findMaxPriorityServer() {\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\n if (!this.server) {\n this.server = maxPriorityServer;\n return this.server\n }\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\n this.server = maxPriorityServer;\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\n return this.server\n }\n return null\n }\n\n async _getServers() {\n // Ignore server fetch if we have a list of servers passed via options\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\n this.servers = this.argumentOptions.servers\n }\n }\n\n _onEvent(packet) {\n if (!packet.data) {\n return;\n }\n let evt = this._parsePacket(packet);\n this.Logger.log(`New event -> ${evt.name}`, evt);\n this._lastEventTimestamp = new Date().getTime()\n this._listenersMap.forEach((callback, eventName) => {\n if (eventName === '*') {\n callback(evt);\n } else if (evt.name === eventName) {\n callback(evt);\n }\n })\n const eventMappings = {\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\n [eventTypes.QUEUES_UPDATED]: this._reSync,\n [eventTypes.DIALERS_UPDATED]: this._reSync,\n [eventTypes.LOGIN_STATUS]: () => {\n if (!this.connected) {\n this._onConnect()\n }\n }\n };\n const eventHandler = eventMappings[evt.name];\n if (eventHandler && typeof eventHandler === 'function') {\n eventHandler.call(this, evt.data);\n }\n if (this._handleLocalEvents) {\n handleStoreEvents({\n eventData: evt,\n ...this.options\n });\n }\n }\n\n /**\n * Initializes socket connection. Should be called before any other action\n * @return {Promise}\n */\n async init() {\n if (this.connectionEstablished) {\n return true;\n }\n if (this.socket) {\n this.emit(eventTypes.CLOSE);\n }\n await this._getToken();\n await this._getTabsSession();\n await this.login(this.options.loginType)\n await this._getServers();\n return true;\n }\n\n /**\n * Sets the monitor code token\n * @param token\n */\n async setToken(token) {\n this.options.token = token\n this.disconnect()\n await this.init()\n }\n\n /**\n * Closes all existing connections\n */\n closeAllConnections() {\n allConnections.forEach(connection => {\n connection.close()\n connection.disconnect()\n })\n allConnections = []\n if (this.socket) {\n this.socket.disconnect()\n this.socket.close()\n this.socket = null\n }\n }\n\n /**\n * Disconnects the socket instance from the servers\n */\n disconnect() {\n this._listenersMap = new Map();\n this.closeAllConnections()\n }\n\n /**\n * Listens for new events\n * @param {string} eventName (name of the event, * for all events)\n * @param {function} callback (callback function when even with the specified name is received)\n */\n on(eventName, callback) {\n this._listenersMap.set(eventName, callback);\n this._checkInit()\n }\n\n /**\n * Emits an event to the server\n * @param {string} eventName (name of the event)\n * @param {object} data (data for the event)\n */\n\n emit(eventName, data = {}) {\n this._checkInit();\n this.Logger.log(`EMIT -> ${eventName}`, data);\n this.socket.emit(eventName, data);\n }\n\n /**\n * Calls resync event to resync socket data\n * @param cache\n */\n reSync(cache = true) {\n this.emit(eventTypes.RESYNC, { cache })\n }\n\n async setMonitorUrl(url) {\n const oldUrl = this.options.url\n const oldStrategy = this.options.serverFetchStrategy\n try {\n if (!url) {\n return\n }\n this.options.url = url\n this.options.serverFetchStrategy = 'remote'\n await this.init()\n } catch (err) {\n this._onError(err)\n this.options.url = oldUrl\n this.options.serverFetchStrategy = oldStrategy\n await this.init()\n }\n }\n\n _getToken() {\n const { loginType } = this.options\n this.token = this.options.token;\n if (loginType === 'token') {\n if (!this.token) {\n throw new Error('Token login type expects the token option to be provided');\n }\n }\n }\n _getTabsSession() {\n if (this.options.environment !== environments.BROWSER) {\n return Promise.resolve()\n }\n\n if (!window.sessionStorage.length) {\n // Ask other tabs for session storage\n localStorage.setItem('getSessionStorage', Date.now());\n }\n\n window.addEventListener('storage', (event) => {\n if (event.key === 'getSessionStorage') {\n // Some tab asked for the sessionStorage -> send it\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\n localStorage.removeItem('sessionStorage');\n } else if (event.key === 'sessionStorage' && !sessionStorage.length) {\n // sessionStorage is empty -> fill it\n const data = JSON.parse(event.newValue)\n\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n window.sessionStorage.setItem(key, data[key]);\n }\n }\n }\n })\n\n return new Promise(resolve => setTimeout((resolve), 200))\n }\n\n /**\n * Login (logs in based on the token/credentials provided)\n * @param type (login type. Can be token/user/code/account)\n * @return {Promise}\n */\n login(type = 'token') {\n // throttle login for 1 second\n let payload = {\n token: this.options.token,\n email: this.options.email,\n username: this.options.username,\n password: this.options.password\n }\n let key = md5(JSON.stringify(payload))\n const delay = 1000;\n\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\n return Promise.resolve()\n }\n\n this._lastLoginTimestamp = new Date().getTime()\n\n return new Promise(async (resolve, reject) => {\n try {\n let loginSession = window.sessionStorage.getItem(key);\n\n if (loginSession) {\n loginSession = JSON.parse(loginSession)\n this.Logger.log('got data from session', loginSession);\n await this._onLoginResponse(loginSession)\n return resolve(loginSession);\n }\n } catch (err) {\n this.Logger.log('Error on getting session', err)\n }\n\n try {\n const url = getExternalLoginUrl(this.options.loginUrl, type)\n const res = await externalLogin(url, payload)\n await this._onLoginResponse(res)\n\n if (this.options.environment === environments.BROWSER) {\n window.sessionStorage.setItem(key, JSON.stringify(res));\n }\n\n resolve(res)\n } catch (err) {\n this.servers = this.argumentOptions.servers || defaultServers;\n reject(err)\n }\n });\n }\n}\n\nexport default EventsSDK;\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","DIALER_EVENT","BROWSER","CHROME_EXTENSION","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadBrowserScript","Promise","resolve","reject","script","document","createElement","src","onload","onerror","append","loadExtensionScript","text","eval","loadExternalScript","environment","getSocketIOFunction","environments","io","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/utils/environments.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n ALL_DIALERS_STATUS: 'AllDialersStatus',\r\n DIALER_EVENT: 'DialerEvent'\r\n}\r\n","export default {\r\n BROWSER: 'browser',\r\n CHROME_EXTENSION: 'chrome-extension'\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n case eventTypes.DIALER_EVENT:\r\n const dialers = [data.data];\r\n store.dispatch(`${dialersModuleName}/updateDialers`, dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","import environments from './environments'\r\n\r\nfunction loadBrowserScript(url) {\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n\r\nasync function loadExtensionScript(url) {\r\n try {\r\n let script = await fetch(url)\r\n script = await script.text()\r\n\r\n eval(script)\r\n } catch (e) {\r\n return Promise.reject(e)\r\n }\r\n}\r\n\r\nexport async function loadExternalScript(url, environment, getSocketIOFunction) {\r\n if (typeof getSocketIOFunction === 'function') {\r\n self.io = getSocketIOFunction(url)\r\n\r\n return\r\n }\r\n\r\n switch (environment) {\r\n case environments.BROWSER:\r\n await loadBrowserScript(url)\r\n break\r\n case environments.CHROME_EXTENSION:\r\n await loadExtensionScript(url)\r\n }\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport environments from './utils/environments'\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n environment: environments.BROWSER,\r\n getSocketIOFunction: undefined,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction)\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = self.io(url, options)\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) {\r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession() {\r\n if (this.options.environment !== environments.BROWSER) {\r\n return Promise.resolve()\r\n }\r\n\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n }\r\n\r\n window.addEventListener('storage', (event) => {\r\n if (event.key === 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key === 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n const data = JSON.parse(event.newValue)\r\n\r\n for (let key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n }\r\n })\r\n\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n\r\n this._lastLoginTimestamp = new Date().getTime()\r\n\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n let loginSession = window.sessionStorage.getItem(key);\r\n\r\n if (loginSession) {\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n } catch (err) {\r\n this.Logger.log('Error on getting session', err)\r\n }\r\n\r\n try {\r\n const url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url, payload)\r\n await this._onLoginResponse(res)\r\n\r\n if (this.options.environment === environments.BROWSER) {\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n }\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","DIALER_EVENT","BROWSER","CHROME_EXTENSION","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadBrowserScript","Promise","resolve","reject","script","document","createElement","src","onload","onerror","append","loadExtensionScript","text","eval","loadExternalScript","environment","getSocketIOFunction","environments","io","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file diff --git a/src/store/handleStoreEvents.js b/src/store/handleStoreEvents.js index 3df41346..d68b0ec1 100644 --- a/src/store/handleStoreEvents.js +++ b/src/store/handleStoreEvents.js @@ -63,7 +63,7 @@ export default function onNewEvent({ eventData, store, extensionsModuleName, que store.dispatch(`${dialersModuleName}/setDialers`, data.dialers) break; case eventTypes.DIALER_EVENT: - let dialers = [data.data]; + const dialers = [data.data]; store.dispatch(`${dialersModuleName}/updateDialers`, dialers) break; default: From 984a0d7293bee2ef31e664f16d1174bd9a174a21 Mon Sep 17 00:00:00 2001 From: OrtZz Date: Tue, 5 Apr 2022 17:16:18 +0300 Subject: [PATCH 14/27] updated: logic of updating dialers --- dist/voicenter-events-sdk.cjs.js | 28 +++++++++++++++++++++------- dist/voicenter-events-sdk.esm.js | 28 +++++++++++++++++++++------- dist/voicenter-events-sdk.umd.js | 2 +- dist/voicenter-events-sdk.umd.js.map | 2 +- src/store/dialers.js | 9 +++++---- src/store/handleStoreEvents.js | 10 +++++++++- 6 files changed, 58 insertions(+), 21 deletions(-) diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js index d5e58c9b..e16df307 100644 --- a/dist/voicenter-events-sdk.cjs.js +++ b/dist/voicenter-events-sdk.cjs.js @@ -302,7 +302,19 @@ function onNewEvent(_ref) { break; case eventTypes.DIALER_EVENT: - var dialers = [data.data]; + var dialer = data.data; + var allDialers = store.state[dialersModuleName].all || []; + var dialerIndex = allDialers.findIndex(function (e) { + return e.campaignID === dialer.campaignID; + }); + + if (dialerIndex !== -1) { + store.dispatch("".concat(dialersModuleName, "/updateDialers"), { + index: dialerIndex, + dialer: dialer + }); + } + store.dispatch("".concat(dialersModuleName, "/updateDialers"), dialers); break; } @@ -490,16 +502,18 @@ var state$2 = { }; var mutations$2 = (_mutations$2 = {}, _defineProperty(_mutations$2, types$2.SET_DIALERS, function (state, value) { state.all = value; -}), _defineProperty(_mutations$2, types$2.UPDATE_DIALERS, function (state, data) { - state.all = data; +}), _defineProperty(_mutations$2, types$2.UPDATE_DIALERS, function (state, _ref) { + var index = _ref.index, + dialer = _ref.dialer; + state.all.splice(index, 1, dialer); }), _mutations$2); var actions$2 = { - setDialers: async function setDialers(_ref, value) { - var commit = _ref.commit; + setDialers: async function setDialers(_ref2, value) { + var commit = _ref2.commit; commit(types$2.SET_DIALERS, value); }, - updateDialers: async function updateDialers(_ref2, value) { - var commit = _ref2.commit; + updateDialers: async function updateDialers(_ref3, value) { + var commit = _ref3.commit; commit(types$2.UPDATE_DIALERS, value); } }; diff --git a/dist/voicenter-events-sdk.esm.js b/dist/voicenter-events-sdk.esm.js index 85c98dd6..23663c23 100644 --- a/dist/voicenter-events-sdk.esm.js +++ b/dist/voicenter-events-sdk.esm.js @@ -298,7 +298,19 @@ function onNewEvent(_ref) { break; case eventTypes.DIALER_EVENT: - var dialers = [data.data]; + var dialer = data.data; + var allDialers = store.state[dialersModuleName].all || []; + var dialerIndex = allDialers.findIndex(function (e) { + return e.campaignID === dialer.campaignID; + }); + + if (dialerIndex !== -1) { + store.dispatch("".concat(dialersModuleName, "/updateDialers"), { + index: dialerIndex, + dialer: dialer + }); + } + store.dispatch("".concat(dialersModuleName, "/updateDialers"), dialers); break; } @@ -486,16 +498,18 @@ var state$2 = { }; var mutations$2 = (_mutations$2 = {}, _defineProperty(_mutations$2, types$2.SET_DIALERS, function (state, value) { state.all = value; -}), _defineProperty(_mutations$2, types$2.UPDATE_DIALERS, function (state, data) { - state.all = data; +}), _defineProperty(_mutations$2, types$2.UPDATE_DIALERS, function (state, _ref) { + var index = _ref.index, + dialer = _ref.dialer; + state.all.splice(index, 1, dialer); }), _mutations$2); var actions$2 = { - setDialers: async function setDialers(_ref, value) { - var commit = _ref.commit; + setDialers: async function setDialers(_ref2, value) { + var commit = _ref2.commit; commit(types$2.SET_DIALERS, value); }, - updateDialers: async function updateDialers(_ref2, value) { - var commit = _ref2.commit; + updateDialers: async function updateDialers(_ref3, value) { + var commit = _ref3.commit; commit(types$2.UPDATE_DIALERS, value); } }; diff --git a/dist/voicenter-events-sdk.umd.js b/dist/voicenter-events-sdk.umd.js index 808bec20..ffa94962 100644 --- a/dist/voicenter-events-sdk.umd.js +++ b/dist/voicenter-events-sdk.umd.js @@ -1,4 +1,4 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).VoicenterEventsSDK=t()}(this,(function(){"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers);break;case eventTypes.DIALER_EVENT:var f=[a.data];n.dispatch("".concat(r,"/updateDialers"),f)}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){e.all=t})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all},getAllDialersWithTypeIVR:function(e){return e.all.filter((function(e){return"IVR"===e.type}))},getAllDialersWithTypeAUTOMATIC:function(e){return e.all.filter((function(e){return"Automatic"===e.type}))}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Prioritye.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers);break;case eventTypes.DIALER_EVENT:var f=a.data,p=(n.state[r].all||[]).findIndex((function(e){return e.campaignID===f.campaignID}));-1!==p&&n.dispatch("".concat(r,"/updateDialers"),{index:p,dialer:f}),n.dispatch("".concat(r,"/updateDialers"),dialers)}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){var n=t.index,o=t.dialer;e.all.splice(n,1,o)})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all},getAllDialersWithTypeIVR:function(e){return e.all.filter((function(e){return"IVR"===e.type}))},getAllDialersWithTypeAUTOMATIC:function(e){return e.all.filter((function(e){return"Automatic"===e.type}))}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Priority ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n case eventTypes.DIALER_EVENT:\r\n const dialers = [data.data];\r\n store.dispatch(`${dialersModuleName}/updateDialers`, dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, data) => {\r\n state.all = data\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","import environments from './environments'\r\n\r\nfunction loadBrowserScript(url) {\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n\r\nasync function loadExtensionScript(url) {\r\n try {\r\n let script = await fetch(url)\r\n script = await script.text()\r\n\r\n eval(script)\r\n } catch (e) {\r\n return Promise.reject(e)\r\n }\r\n}\r\n\r\nexport async function loadExternalScript(url, environment, getSocketIOFunction) {\r\n if (typeof getSocketIOFunction === 'function') {\r\n self.io = getSocketIOFunction(url)\r\n\r\n return\r\n }\r\n\r\n switch (environment) {\r\n case environments.BROWSER:\r\n await loadBrowserScript(url)\r\n break\r\n case environments.CHROME_EXTENSION:\r\n await loadExtensionScript(url)\r\n }\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport environments from './utils/environments'\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n environment: environments.BROWSER,\r\n getSocketIOFunction: undefined,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction)\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = self.io(url, options)\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) {\r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession() {\r\n if (this.options.environment !== environments.BROWSER) {\r\n return Promise.resolve()\r\n }\r\n\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n }\r\n\r\n window.addEventListener('storage', (event) => {\r\n if (event.key === 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key === 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n const data = JSON.parse(event.newValue)\r\n\r\n for (let key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n }\r\n })\r\n\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n\r\n this._lastLoginTimestamp = new Date().getTime()\r\n\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n let loginSession = window.sessionStorage.getItem(key);\r\n\r\n if (loginSession) {\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n } catch (err) {\r\n this.Logger.log('Error on getting session', err)\r\n }\r\n\r\n try {\r\n const url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url, payload)\r\n await this._onLoginResponse(res)\r\n\r\n if (this.options.environment === environments.BROWSER) {\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n }\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","DIALER_EVENT","BROWSER","CHROME_EXTENSION","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadBrowserScript","Promise","resolve","reject","script","document","createElement","src","onload","onerror","append","loadExtensionScript","text","eval","loadExternalScript","environment","getSocketIOFunction","environments","io","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/utils/environments.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n ALL_DIALERS_STATUS: 'AllDialersStatus',\r\n DIALER_EVENT: 'DialerEvent'\r\n}\r\n","export default {\r\n BROWSER: 'browser',\r\n CHROME_EXTENSION: 'chrome-extension'\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n case eventTypes.DIALER_EVENT:\r\n const dialer = data.data;\r\n const allDialers = store.state[dialersModuleName].all || []\r\n let dialerIndex = allDialers.findIndex(e => e.campaignID === dialer.campaignID)\r\n if (dialerIndex !== -1) {\r\n store.dispatch(`${dialersModuleName}/updateDialers`, {\r\n index: dialerIndex,\r\n dialer\r\n })\r\n }\r\n store.dispatch(`${dialersModuleName}/updateDialers`, dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS'\r\n}\r\n\r\nconst state = {\r\n all: []\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, { index, dialer }) => {\r\n state.all.splice(index, 1, dialer)\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","import environments from './environments'\r\n\r\nfunction loadBrowserScript(url) {\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n\r\nasync function loadExtensionScript(url) {\r\n try {\r\n let script = await fetch(url)\r\n script = await script.text()\r\n\r\n eval(script)\r\n } catch (e) {\r\n return Promise.reject(e)\r\n }\r\n}\r\n\r\nexport async function loadExternalScript(url, environment, getSocketIOFunction) {\r\n if (typeof getSocketIOFunction === 'function') {\r\n self.io = getSocketIOFunction(url)\r\n\r\n return\r\n }\r\n\r\n switch (environment) {\r\n case environments.BROWSER:\r\n await loadBrowserScript(url)\r\n break\r\n case environments.CHROME_EXTENSION:\r\n await loadExtensionScript(url)\r\n }\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport environments from './utils/environments'\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n environment: environments.BROWSER,\r\n getSocketIOFunction: undefined,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction)\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = self.io(url, options)\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) {\r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession() {\r\n if (this.options.environment !== environments.BROWSER) {\r\n return Promise.resolve()\r\n }\r\n\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n }\r\n\r\n window.addEventListener('storage', (event) => {\r\n if (event.key === 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key === 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n const data = JSON.parse(event.newValue)\r\n\r\n for (let key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n }\r\n })\r\n\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n\r\n this._lastLoginTimestamp = new Date().getTime()\r\n\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n let loginSession = window.sessionStorage.getItem(key);\r\n\r\n if (loginSession) {\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n } catch (err) {\r\n this.Logger.log('Error on getting session', err)\r\n }\r\n\r\n try {\r\n const url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url, payload)\r\n await this._onLoginResponse(res)\r\n\r\n if (this.options.environment === environments.BROWSER) {\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n }\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","DIALER_EVENT","BROWSER","CHROME_EXTENSION","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","dialer","dialerIndex","campaignID","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadBrowserScript","Promise","resolve","reject","script","document","createElement","src","onload","onerror","append","loadExtensionScript","text","eval","loadExternalScript","environment","getSocketIOFunction","environments","io","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"2+DAAe,CACbA,aAAc,cACdC,MAAO,QACPC,WAAY,YACZC,WAAY,gBACZC,cAAe,eACfC,eAAgB,gBAChBC,YAAa,aACbC,eAAgB,gBAChBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,kBAAmB,oBACnBC,qBAAsB,sBACtBC,QAAS,UACTC,cAAe,gBACfC,gBAAiB,kBACjBC,WAAY,aACZC,KAAM,OACNC,UAAW,YACXC,kBAAmB,oBACnBC,OAAQ,SACRC,aAAc,eACdC,gBAAiB,kBACjBC,iBAAkB,mBAClBC,WAAY,YACZC,oBAAqB,oBACrBC,MAAO,UACPC,MAAO,QACPC,mBAAoB,mBACpBC,aAAc,4BC7BD,CACbC,QAAS,UACTC,iBAAkB,oBCFPC,eAAiB,CAAC,OACpB,YACG,UACD,SACD,yBACT,OACQ,WACG,UACD,SACD,4BACT,OACQ,WACG,UACD,SACD,4BACT,OACQ,YACG,UACD,SACD,0BACT,OACQ,WACG,UACD,SACD,6BCvBNC,mCACQC,yDAAU,gCACfC,MAAQD,EAAQC,+CASvB,SAAKC,EAASC,OACRC,EAAQD,YAAUD,0BAAuBG,KAAKC,UAAUH,cAAaD,GACrEK,GAAM,IAAIC,MAAOC,cACrBC,QAAQC,iBAAUJ,kBAAWH,gFAS/B,SAAOF,EAASC,OACVC,EAAQD,YAAUD,uBAAoBG,KAAKC,UAAUH,cAAaD,GAClEK,GAAM,IAAIC,MAAOC,cACrBC,QAAQE,gBAASL,eAAQH,uBAQ3B,SAAIF,EAASC,GACPU,KAAKZ,QACHC,IAAYC,OACTW,KAAKZ,QAELY,KAAKZ,EAASC,yBASzB,SAAMD,EAASC,GACTU,KAAKZ,QACHC,IAAYC,OACTY,OAAOb,QAEPa,OAAOb,EAASC,aC7B7B,SAASa,SAASC,GAChB,IAAIC,SAAcD,EAClB,OAAgB,MAATA,IAA0B,UAARC,GAA4B,YAARA,GAG/C,eAAiBF,uPC7BjB,IAAIG,WAA8B,iBAAVC,gBAAsBA,gBAAUA,eAAOC,SAAWA,QAAUD,2BAEnED,WCAbG,SAA0B,iBAARC,MAAoBA,MAAQA,KAAKF,SAAWA,QAAUE,KAGxEC,KAAOL,aAAcG,UAAYG,SAAS,cAATA,SAEpBD,KCUbjB,IAAM,WACR,OAAOiB,MAAKhB,KAAKD,aAGFA,ICrBbmB,aAAe,KAUnB,SAASC,gBAAgBC,GAGvB,IAFA,IAAIC,EAAQD,EAAOE,OAEZD,KAAWH,aAAaK,KAAKH,EAAOI,OAAOH,MAClD,OAAOA,EAGT,qBAAiBF,gBCfbM,YAAc,OASlB,SAASC,SAASN,GAChB,OAAOA,EACHA,EAAOO,MAAM,EAAGR,iBAAgBC,GAAU,GAAGQ,QAAQH,YAAa,IAClEL,EAGN,cAAiBM,SCfbG,SAASb,MAAKa,eAEDA,SCFbC,YAAcjB,OAAOkB,UAGrBC,eAAiBF,YAAYE,eAO7BC,qBAAuBH,YAAYI,SAGnCC,eAAiBN,QAASA,QAAOO,iBAAcC,EASnD,SAASC,UAAU7B,GACjB,IAAI8B,EAAQP,eAAeQ,KAAK/B,EAAO0B,gBACnCM,EAAMhC,EAAM0B,gBAEhB,IACE1B,EAAM0B,qBAAkBE,EACxB,IAAIK,GAAW,EACf,MAAOC,IAET,IAAIC,EAASX,qBAAqBO,KAAK/B,GAQvC,OAPIiC,IACEH,EACF9B,EAAM0B,gBAAkBM,SAEjBhC,EAAM0B,iBAGVS,EAGT,eAAiBN,UC5CbR,cAAcjB,OAAOkB,UAOrBE,uBAAuBH,cAAYI,SASvC,SAASW,eAAepC,GACtB,OAAOwB,uBAAqBO,KAAK/B,GAGnC,oBAAiBoC,eChBbC,QAAU,gBACVC,aAAe,qBAGfZ,iBAAiBN,QAASA,QAAOO,iBAAcC,EASnD,SAASW,WAAWvC,GAClB,OAAa,MAATA,OACe4B,IAAV5B,EAAsBsC,aAAeD,QAEtCX,kBAAkBA,oBAAkBtB,OAAOJ,GAC/C6B,WAAU7B,GACVoC,gBAAepC,GAGrB,gBAAiBuC,WCHjB,SAASC,aAAaxC,GACpB,OAAgB,MAATA,GAAiC,iBAATA,EAGjC,mBAAiBwC,aCxBbC,UAAY,kBAmBhB,SAASC,SAAS1C,GAChB,MAAuB,iBAATA,GACXwC,eAAaxC,IAAUuC,YAAWvC,IAAUyC,UAGjD,eAAiBC,SCvBbC,IAAM,IAGNC,WAAa,qBAGbC,WAAa,aAGbC,UAAY,cAGZC,aAAeC,SAyBnB,SAASC,SAASjD,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAI0C,WAAS1C,GACX,OAAO2C,IAET,GAAI5C,WAASC,GAAQ,CACnB,IAAIkD,EAAgC,mBAAjBlD,EAAMmD,QAAwBnD,EAAMmD,UAAYnD,EACnEA,EAAQD,WAASmD,GAAUA,EAAQ,GAAMA,EAE3C,GAAoB,iBAATlD,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQiB,UAASjB,GACjB,IAAIoD,EAAWP,WAAW/B,KAAKd,GAC/B,OAAQoD,GAAYN,UAAUhC,KAAKd,GAC/B+C,aAAa/C,EAAMkB,MAAM,GAAIkC,EAAW,EAAI,GAC3CR,WAAW9B,KAAKd,GAAS2C,KAAO3C,EAGvC,eAAiBiD,SC1DbI,gBAAkB,sBAGlBC,UAAYC,KAAKC,IACjBC,UAAYF,KAAKG,IAwDrB,SAASC,SAASC,EAAMC,EAAM9E,GAC5B,IAAI+E,EACAC,EACAC,EACA7B,EACA8B,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTC,GAAW,EAEf,GAAmB,mBAARV,EACT,MAAM,IAAIW,UAAUlB,iBAUtB,SAASmB,EAAWC,GAClB,IAAIC,EAAOZ,EACPa,EAAUZ,EAKd,OAHAD,EAAWC,OAAWnC,EACtBuC,EAAiBM,EACjBtC,EAASyB,EAAKgB,MAAMD,EAASD,GAI/B,SAASG,EAAYJ,GAMnB,OAJAN,EAAiBM,EAEjBR,EAAUa,WAAWC,EAAclB,GAE5BO,EAAUI,EAAWC,GAAQtC,EAatC,SAAS6C,EAAaP,GACpB,IAAIQ,EAAoBR,EAAOP,EAM/B,YAAyBtC,IAAjBsC,GAA+Be,GAAqBpB,GACzDoB,EAAoB,GAAOZ,GANJI,EAAON,GAM8BH,EAGjE,SAASe,IACP,IAAIN,EAAOnF,QACX,GAAI0F,EAAaP,GACf,OAAOS,EAAaT,GAGtBR,EAAUa,WAAWC,EA3BvB,SAAuBN,GACrB,IAEIU,EAActB,GAFMY,EAAOP,GAI/B,OAAOG,EACHZ,UAAU0B,EAAanB,GAJDS,EAAON,IAK7BgB,EAoB+BC,CAAcX,IAGnD,SAASS,EAAaT,GAKpB,OAJAR,OAAUrC,EAIN0C,GAAYR,EACPU,EAAWC,IAEpBX,EAAWC,OAAWnC,EACfO,GAeT,SAASkD,IACP,IAAIZ,EAAOnF,QACPgG,EAAaN,EAAaP,GAM9B,GAJAX,EAAWyB,UACXxB,EAAWnE,KACXsE,EAAeO,EAEXa,EAAY,CACd,QAAgB1D,IAAZqC,EACF,OAAOY,EAAYX,GAErB,GAAIG,EAIF,OAFAmB,aAAavB,GACbA,EAAUa,WAAWC,EAAclB,GAC5BW,EAAWN,GAMtB,YAHgBtC,IAAZqC,IACFA,EAAUa,WAAWC,EAAclB,IAE9B1B,EAIT,OA3GA0B,EAAOZ,WAASY,IAAS,EACrB9D,WAAShB,KACXqF,IAAYrF,EAAQqF,QAEpBJ,GADAK,EAAS,YAAatF,GACHuE,UAAUL,WAASlE,EAAQiF,UAAY,EAAGH,GAAQG,EACrEM,EAAW,aAAcvF,IAAYA,EAAQuF,SAAWA,GAoG1De,EAAUI,OApCV,gBACkB7D,IAAZqC,GACFuB,aAAavB,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,OAAUrC,GAgCjDyD,EAAUK,MA7BV,WACE,YAAmB9D,IAAZqC,EAAwB9B,EAAS+C,EAAa5F,UA6BhD+F,EAGT,eAAiB1B,SC5LJgC,gBAAkB,CAC7BC,QAAS,UACTC,OAAQ,SACRC,OAAQ,UAEJC,cAAgB,CACpBC,WAAWrI,cACXqI,WAAWpI,gBACXoI,WAAWnI,WACXmI,WAAWhI,kBACXgI,WAAW9H,aACX8H,WAAW7H,gBACX6H,WAAW5H,iBACXuH,gBAAgBpH,OAGlB,SAAS0H,gBAAgBC,OACjBC,EAASD,EAATC,YACCJ,cAAcK,SAASD,GAGjB,SAASE,kBAAaC,IAAAA,UAAWC,IAAAA,MAAOC,IAAAA,qBAAsBC,IAAAA,iBAAkBC,IAAAA,kBACvFP,EAAeG,EAAfH,KAAMjH,EAASoH,EAATpH,YACZqH,EAAMI,iBAAUH,4BAA8CP,gBAAgBK,IACtEH,QACDH,WAAWvI,qBACd8I,EAAMK,mBAAYJ,oBAAsCtH,EAAK2H,uBAE1Db,WAAWzI,oBACVuJ,EAAY5H,EAAKA,KAErB4H,EAAS,UAAgB,CACvBC,OAAQ7H,EAAK6H,OACbC,MAAO9H,EAAK+H,iBAGVC,EADeX,EAAMY,MAAMX,GAAsBK,WACrBO,WAAU,SAAAlF,UAAKA,EAAEmF,SAAWP,EAAUO,WAC9C,IAApBH,GACFX,EAAMK,mBAAYJ,sBAAwC,CACxD5F,MAAOsG,EACPJ,UAAAA,eAIDd,WAAWlJ,aACdyJ,EAAMI,iBAAUH,sBAAwCtH,GACxDqH,EAAMK,mBAAYH,gBAA8BvH,EAAKoI,mBAElDtB,WAAW5I,gBACVmK,EAAQrI,EAAKA,KAEbsI,GADcjB,EAAMY,MAAMV,GAAkBgB,KAAO,IAC5BL,WAAU,SAAAlF,UAAKA,EAAEwF,UAAYH,EAAMG,YAC1C,IAAhBF,GACFjB,EAAMK,mBAAYH,kBAAgC,CAChD7F,MAAO4G,EACPD,MAAAA,eAIDvB,WAAWvH,mBACd8H,EAAMK,mBAAYF,iBAAgCxH,EAAKyI,oBAEpD3B,WAAWtH,iBACRkJ,EAAS1I,EAAKA,KAEhB2I,GADetB,EAAMY,MAAMT,GAAmBe,KAAO,IAC5BL,WAAU,SAAAlF,UAAKA,EAAE4F,aAAeF,EAAOE,eAC/C,IAAjBD,GACFtB,EAAMK,mBAAYF,oBAAmC,CACnD9F,MAAOiH,EACPD,OAAAA,IAGJrB,EAAMK,mBAAYF,oBAAmCiB,cCxE9CI,aAAe,CAC1BC,QAAS,IACTC,KAAM,gBCFFC,uBAAyB,MACzBC,OAAS,IACTC,cAAgB,EAEhBC,YAAc,OAEdC,MAAQ,CACVC,eAAgB,iBAChBC,kBAAmB,oBACnBC,gBAAiB,kBACjBC,sBAAuB,yBAErBvB,MAAQ,CACVN,WAAY,GACZ8B,WAAY,KACZC,YAAa,EACbC,aAAc,EACd5C,iBAAiB,EACjB6C,uBAAwB,MAGtBC,oDACDT,MAAMC,gBAAiB,SAACpB,EAAOnH,GAC5BmH,EAAMN,WAAa7G,gCAEtBsI,MAAME,mBAAoB,SAACrB,SAAQvG,IAAAA,MAAOkG,IAAAA,UACvCK,EAAMN,WAAWmC,OAAOpI,EAAO,EAAGkG,iCAErCwB,MAAMG,iBAAkB,SAACtB,EAAOnH,GAC7BmH,EAAM0B,aAAwC,GAAzB7I,EAAMiJ,iBAAwB,KAAQf,uBAC3Df,EAAMwB,WAAgC,IAAnB3I,EAAMkJ,WAAoB/B,EAAM0B,aACnD1B,EAAMyB,aAAc,IAAIrJ,MAAO4J,UAAYhC,EAAMwB,yCAEpDL,MAAMI,uBAAwB,SAACvB,EAAOnH,GACnCmH,EAAMlB,gBAAkBjG,EAEpBmH,EAAM2B,uBADN9I,GAC+B,IAAIT,MAAO4J,UAEX,oBAKrCC,QAAU,CACNC,+BAAwBrJ,IAC1B2G,IADiBA,QACV2B,MAAMC,eAAgBvI,IAE3BsJ,iCAA0BtJ,IAC5B2G,IADmBA,QACZ2B,MAAME,kBAAmBxI,KAIxC,SAASuJ,mBAAaxH,yDAAO,GACvByH,EAASzH,EAAK0H,YAAc,UAChCD,EAASA,EAAOE,cACT3H,EAAK4H,UAAYH,IAAWnB,YAGrC,IAAMuB,QAAU,CACd3D,gBAAiB,SAAAkB,OACVA,EAAM2B,wBAA0Be,MAAM1C,EAAM2B,+BACxC,MAEHxJ,GAAM,IAAIC,MAAO4J,iBAEhBhC,EAAMlB,iBAAmB3G,EAAM6H,EAAM2B,uBAAyBX,QAEvE2B,oBAAqB,SAAA3C,UAAS,SAAA4C,OACxBC,EAAoB,UAExB7C,EAAMN,WAAWoD,SAAQ,SAACnD,GAEpBA,EAAUoD,MAAMrJ,OAAS,IACvBiG,EAAUoD,MAAMC,OAAOZ,cAAc1I,OACvCiG,EAAS,qBAA2BiB,aAAaE,KAEjDnB,EAAS,qBAA2BiB,aAAaC,SAGrDgC,EAAkBI,KAAKtD,MAGrBiD,EACKC,EAAkBG,QAAO,SAAAjI,UAAKA,EAAEmI,uBAAyBjC,iBAE3D4B,IAETM,uBAAwB,SAACnD,EAAOyC,UAAY,SAAAJ,UACnCI,EAAQE,oBAAoBK,QAAO,SAAAI,UAAMA,EAAGF,uBAAyBb,KAAQ3I,QAAU,sBAInF,CACX2J,YAAY,EACZrD,MAAAA,MACA4B,UAAAA,UACAK,QAAAA,QACAQ,QAAAA,sBCnGEtB,QAAQ,CACVmC,WAAY,aACZC,cAAe,iBAEbvD,QAAQ,CACVM,IAAK,IAGHsB,0DACDT,QAAMmC,YAAa,SAACtD,EAAOnH,GACxBmH,EAAMM,IAAMzH,kCAEfsI,QAAMoC,eAAgB,SAACvD,SAAQvG,IAAAA,MAAO2G,IAAAA,MACnCJ,EAAMM,IAAIuB,OAAOpI,EAAO,EAAG2G,oBAI7B6B,UAAU,CACNuB,2BAAoB3K,IACtB2G,IADaA,QACN2B,QAAMmC,WAAYzK,IAEvB4K,6BAAsB5K,IACxB2G,IADeA,QACR2B,QAAMoC,cAAe1K,KAI9B4J,UAAU,CACdiB,qBAAsB,SAAC1D,UACdA,EAAMM,IAAI0C,QAAO,SAACI,UAAOA,EAAGO,MAAMjK,WAE3CkK,cAAe,SAAC5D,EAAOyC,OACfoB,EAAW,UACjBpB,EAAQiB,qBAAqBZ,SAAQ,SAAC1C,OAC9B2C,EAAQ3C,EAAMuD,OAAS,GAC7BE,EAASZ,WAATY,qBAAiBd,OAEZc,GAETC,kBAAmB,SAAC9D,UAAU,SAAA+D,UACvBA,GAAaC,MAAMC,QAAQF,GAGzB/D,EAAMM,IAAI0C,QAAO,SAAAjI,UAAKgJ,EAAS9E,SAASlE,EAAEwF,YAFxCP,EAAMM,oBAKJ,CACX+C,YAAY,EACZrD,MAAAA,QACA4B,UAAAA,YACAK,QAAAA,UACAQ,QAAAA,wBClDEtB,QAAQ,CACZ+C,YAAa,cACbC,eAAgB,kBAGZnE,QAAQ,CACZM,IAAK,IAGDsB,0DACHT,QAAM+C,aAAc,SAAClE,EAAOnH,GAC3BmH,EAAMM,IAAMzH,kCAEbsI,QAAMgD,gBAAiB,SAACnE,SAASvG,IAAAA,MAAOgH,IAAAA,OACvCT,EAAMM,IAAIuB,OAAOpI,EAAO,EAAGgH,oBAIzBwB,UAAU,CACRmC,4BAAqBvL,IACzB2G,IADgBA,QACT2B,QAAM+C,YAAarL,IAEtBwL,+BAAwBxL,IAC5B2G,IADmBA,QACZ2B,QAAMgD,eAAgBtL,KAI3B4J,UAAU,CACd6B,cAAe,SAACtE,UACPA,EAAMM,KAEfiE,yBAA0B,SAACvE,UAClBA,EAAMM,IAAI0C,QAAO,SAAAI,SAAkB,QAAZA,EAAGtK,SAEnC0L,+BAAgC,SAACxE,UACxBA,EAAMM,IAAI0C,QAAO,SAAAI,SAAkB,cAAZA,EAAGtK,wBAGtB,CACXuK,YAAY,EACZrD,MAAAA,QACA4B,UAAAA,YACAK,QAAAA,UACAQ,QAAAA,WC3CG,SAASgC,6BAA6BC,OAEvCC,EAAe,KACfC,EAAcC,OAAOC,wBACzBJ,EAAQ5B,SAAQ,SAAAiC,GACVA,EAAOC,SAAWJ,IACpBA,EAAcG,EAAOC,SACrBL,EAAeI,MAGZJ,EAGF,SAASM,YAAYC,UAClBxC,MAAMwC,EAAKlD,WCddmD,eAAeC,cAAcC,SAAOC,IAAAA,MAAOC,IAAAA,SAAUC,IAAAA,MAAOC,IAAAA,SAC7DC,EAAO,KAETA,EADEF,EACKvN,KAAKC,UAAU,CAAEsN,MAAAA,IACfC,EACFxN,KAAKC,UAAU,CACpBuN,SAAAA,EACAF,SAAAA,IAGKtN,KAAKC,UAAU,CACpBoN,MAAAA,EACAK,IAAKJ,QAGHK,QAAYC,MAAMR,EAAK,CAC3BS,OAAQ,OACRC,QAAS,gBACS,oBAElBL,KAAAA,IAEI3N,QAAa6N,EAAII,UACnBjO,EAAKS,YACD,IAAIyN,MAAMlO,EAAKS,cAEhBT,EAAKmO,KAAKC,OAGZ,SAASC,oBAAoBC,EAASC,SACzB,SAAdA,YACQD,WACa,UAAdC,YACCD,YACa,YAAdC,YACCD,cAELA,EAGFlB,eAAeoB,aAAalB,EAAKmB,gBACpBX,MAAMR,EAAK,CAC3BS,OAAQ,MAERC,QAAS,gBACS,kDACWS,OAGpBR,OC/Cb,SAASS,kBAAkBpB,UAClB,IAAIqB,SAAQ,SAACC,EAASC,OACrBC,EAASC,SAASC,cAAc,UACtCF,EAAOG,IAAM3B,EACbwB,EAAOI,OAAS,WACdN,KAEFE,EAAOK,QAAU,WACfN,KAEFE,SAASpB,KAAKyB,OAAON,MAIzB1B,eAAeiC,oBAAoB/B,aAE3BwB,aAAehB,MAAMR,KACzBwB,aAAeA,OAAOQ,OAEtBC,KAAKT,QACL,MAAO9L,UACA2L,QAAQE,OAAO7L,IAInBoK,eAAeoC,mBAAmBlC,EAAKmC,EAAaC,MACtB,mBAAxBA,SAMHD,QACDE,aAAalQ,cACViP,kBAAkBpB,cAErBqC,aAAajQ,uBACV2P,oBAAoB/B,QAV5BlM,KAAKwO,GAAKF,EAAoBpC;;;;;;;;;;CCpBlC,WAGE,IAAIhO,MAAQ,wBACRuQ,OAA2B,iBAAXC,OAChBzO,KAAOwO,OAASC,OAAS,GACzBzO,KAAK0O,mBACPF,QAAS,GAEX,IAAIG,YAAcH,QAA0B,iBAATzO,KAC/B6O,SAAW5O,KAAK6O,mBAAwC,iBAAZC,SAAwBA,QAAQC,UAAYD,QAAQC,SAASC,KACzGJ,QACF5O,KAAOJ,eACE+O,aACT3O,KAAOD,MAET,IAAIkP,WAAajP,KAAKkP,qBAAqDC,OAAOC,QAE9EC,cAAgBrP,KAAKsP,wBAAiD,oBAAhBC,YACtDC,UAAY,mBAAmBC,MAAM,IACrCC,MAAQ,CAAC,IAAK,MAAO,SAAU,YAC/BC,MAAQ,CAAC,EAAG,EAAG,GAAI,IACnBC,aAAe,CAAC,MAAO,QAAS,SAAU,SAAU,cAAe,UACnEC,mBAAqB,mEAAmEJ,MAAM,IAE9FK,OAAS,GAAIC,QACjB,GAAIV,aAAc,CAChB,IAAIW,OAAS,IAAIT,YAAY,IAC7BQ,QAAU,IAAIE,WAAWD,QACzBF,OAAS,IAAII,YAAYF,SAGvBhQ,KAAK6O,mBAAsBjE,MAAMC,UACnCD,MAAMC,QAAU,SAAUsF,GACxB,MAA+C,mBAAxCtQ,OAAOkB,UAAUG,SAASM,KAAK2O,MAItCd,eAAiBrP,KAAKoQ,gCAAmCb,YAAYc,SACvEd,YAAYc,OAAS,SAAUF,GAC7B,MAAsB,iBAARA,GAAoBA,EAAIH,QAAUG,EAAIH,OAAOM,cAAgBf,cA6D/E,IAAIgB,mBAAqB,SAAUC,GACjC,OAAO,SAAU9R,GACf,OAAO,IAAI+R,KAAI,GAAMC,OAAOhS,GAAS8R,OAwBrCG,aAAe,WACjB,IAAIjE,EAAS6D,mBAAmB,OAC5B3B,UACFlC,EAASkE,SAASlE,IAEpBA,EAAOmE,OAAS,WACd,OAAO,IAAIJ,KAEb/D,EAAOgE,OAAS,SAAUhS,GACxB,OAAOgO,EAAOmE,SAASH,OAAOhS,IAEhC,IAAK,IAAIoS,EAAI,EAAGA,EAAIlB,aAAatP,SAAUwQ,EAAG,CAC5C,IAAIpR,EAAOkQ,aAAakB,GACxBpE,EAAOhN,GAAQ6Q,mBAAmB7Q,GAEpC,OAAOgN,GAGLkE,SAAW,SAAUlE,QACvB,IAAIqE,OAAS7C,KAAK,qBACd8C,OAAS9C,KAAK,4BACd+C,WAAa,SAAUvS,GACzB,GAAuB,iBAAZA,EACT,OAAOqS,OAAOG,WAAW,OAAOR,OAAOhS,EAAS,QAAQyS,OAAO,OAE/D,GAAIzS,MAAAA,EACF,MAAMT,MAKV,OAJaS,EAAQ4R,cAAgBf,cACjC7Q,EAAU,IAAIuR,WAAWvR,IAGzBkM,MAAMC,QAAQnM,IAAY6Q,YAAYc,OAAO3R,IAC/CA,EAAQ4R,cAAgBU,OACjBD,OAAOG,WAAW,OAAOR,OAAO,IAAIM,OAAOtS,IAAUyS,OAAO,OAE5DzE,OAAOhO,IAGlB,OAAOuS,YAST,SAASR,IAAIW,GACX,GAAIA,EACFtB,OAAO,GAAKA,OAAO,IAAMA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GACxDA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GAAKA,OAAO,GAC3CA,OAAO,GAAKA,OAAO,GAAKA,OAAO,IAAMA,OAAO,IAC5CA,OAAO,IAAMA,OAAO,IAAMA,OAAO,IAAMA,OAAO,IAAM,EACpDzQ,KAAKyQ,OAASA,OACdzQ,KAAK0Q,QAAUA,aAEf,GAAIV,aAAc,CAChB,IAAIW,EAAS,IAAIT,YAAY,IAC7BlQ,KAAK0Q,QAAU,IAAIE,WAAWD,GAC9B3Q,KAAKyQ,OAAS,IAAII,YAAYF,QAE9B3Q,KAAKyQ,OAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGnEzQ,KAAKgS,GAAKhS,KAAKiS,GAAKjS,KAAKkS,GAAKlS,KAAKmS,GAAKnS,KAAKoS,MAAQpS,KAAKqS,MAAQrS,KAAKsS,OAAS,EAChFtS,KAAKuS,UAAYvS,KAAKwS,QAAS,EAC/BxS,KAAKyS,OAAQ,EAYfrB,IAAI1P,UAAU2P,OAAS,SAAUhS,GAC/B,IAAIW,KAAKuS,UAAT,CAIA,IAAIG,EAAWrS,SAAchB,EAC7B,GAAa,WAATgB,EAAmB,CACrB,GAAa,WAATA,EAWF,MAAMzB,MAVN,GAAgB,OAAZS,EACF,MAAMT,MACD,GAAIoR,cAAgB3Q,EAAQ4R,cAAgBf,YACjD7Q,EAAU,IAAIuR,WAAWvR,QACpB,KAAKkM,MAAMC,QAAQnM,IACnB2Q,cAAiBE,YAAYc,OAAO3R,IACvC,MAAMT,MAMZ8T,GAAY,EAKd,IAHA,IAAIC,EAAiBlB,EAAXzQ,EAAQ,EAAMC,EAAS5B,EAAQ4B,OAAQwP,EAASzQ,KAAKyQ,OAC3DC,EAAU1Q,KAAK0Q,QAEZ1P,EAAQC,GAAQ,CAUrB,GATIjB,KAAKwS,SACPxS,KAAKwS,QAAS,EACd/B,EAAO,GAAKA,EAAO,IACnBA,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC5CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC3CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAMA,EAAO,IAC5CA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAM,GAGlDiC,EACF,GAAI1C,aACF,IAAKyB,EAAIzR,KAAKoS,MAAOpR,EAAQC,GAAUwQ,EAAI,KAAMzQ,EAC/C0P,EAAQe,KAAOpS,EAAQ2B,QAGzB,IAAKyQ,EAAIzR,KAAKoS,MAAOpR,EAAQC,GAAUwQ,EAAI,KAAMzQ,EAC/CyP,EAAOgB,GAAK,IAAMpS,EAAQ2B,IAAUsP,MAAY,EAANmB,UAI9C,GAAIzB,aACF,IAAKyB,EAAIzR,KAAKoS,MAAOpR,EAAQC,GAAUwQ,EAAI,KAAMzQ,GAC/C2R,EAAOtT,EAAQuT,WAAW5R,IACf,IACT0P,EAAQe,KAAOkB,EACNA,EAAO,MAChBjC,EAAQe,KAAO,IAAQkB,GAAQ,EAC/BjC,EAAQe,KAAO,IAAe,GAAPkB,GACdA,EAAO,OAAUA,GAAQ,OAClCjC,EAAQe,KAAO,IAAQkB,GAAQ,GAC/BjC,EAAQe,KAAO,IAASkB,GAAQ,EAAK,GACrCjC,EAAQe,KAAO,IAAe,GAAPkB,IAEvBA,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BtT,EAAQuT,aAAa5R,IACjE0P,EAAQe,KAAO,IAAQkB,GAAQ,GAC/BjC,EAAQe,KAAO,IAASkB,GAAQ,GAAM,GACtCjC,EAAQe,KAAO,IAASkB,GAAQ,EAAK,GACrCjC,EAAQe,KAAO,IAAe,GAAPkB,QAI3B,IAAKlB,EAAIzR,KAAKoS,MAAOpR,EAAQC,GAAUwQ,EAAI,KAAMzQ,GAC/C2R,EAAOtT,EAAQuT,WAAW5R,IACf,IACTyP,EAAOgB,GAAK,IAAMkB,GAAQrC,MAAY,EAANmB,KACvBkB,EAAO,MAChBlC,EAAOgB,GAAK,KAAO,IAAQkB,GAAQ,IAAOrC,MAAY,EAANmB,KAChDhB,EAAOgB,GAAK,KAAO,IAAe,GAAPkB,IAAiBrC,MAAY,EAANmB,MACzCkB,EAAO,OAAUA,GAAQ,OAClClC,EAAOgB,GAAK,KAAO,IAAQkB,GAAQ,KAAQrC,MAAY,EAANmB,KACjDhB,EAAOgB,GAAK,KAAO,IAASkB,GAAQ,EAAK,KAAUrC,MAAY,EAANmB,KACzDhB,EAAOgB,GAAK,KAAO,IAAe,GAAPkB,IAAiBrC,MAAY,EAANmB,OAElDkB,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9BtT,EAAQuT,aAAa5R,IACjEyP,EAAOgB,GAAK,KAAO,IAAQkB,GAAQ,KAAQrC,MAAY,EAANmB,KACjDhB,EAAOgB,GAAK,KAAO,IAASkB,GAAQ,GAAM,KAAUrC,MAAY,EAANmB,KAC1DhB,EAAOgB,GAAK,KAAO,IAASkB,GAAQ,EAAK,KAAUrC,MAAY,EAANmB,KACzDhB,EAAOgB,GAAK,KAAO,IAAe,GAAPkB,IAAiBrC,MAAY,EAANmB,MAK1DzR,KAAK6S,cAAgBpB,EACrBzR,KAAKqS,OAASZ,EAAIzR,KAAKoS,MACnBX,GAAK,IACPzR,KAAKoS,MAAQX,EAAI,GACjBzR,KAAK8S,OACL9S,KAAKwS,QAAS,GAEdxS,KAAKoS,MAAQX,EAOjB,OAJIzR,KAAKqS,MAAQ,aACfrS,KAAKsS,QAAUtS,KAAKqS,MAAQ,YAAc,EAC1CrS,KAAKqS,MAAQrS,KAAKqS,MAAQ,YAErBrS,OAGToR,IAAI1P,UAAUqR,SAAW,WACvB,IAAI/S,KAAKuS,UAAT,CAGAvS,KAAKuS,WAAY,EACjB,IAAI9B,EAASzQ,KAAKyQ,OAAQgB,EAAIzR,KAAK6S,cACnCpC,EAAOgB,GAAK,IAAMpB,MAAU,EAAJoB,GACpBA,GAAK,KACFzR,KAAKwS,QACRxS,KAAK8S,OAEPrC,EAAO,GAAKA,EAAO,IACnBA,EAAO,IAAMA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC5CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC3CA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAMA,EAAO,IAC5CA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAM,GAEtDA,EAAO,IAAMzQ,KAAKqS,OAAS,EAC3B5B,EAAO,IAAMzQ,KAAKsS,QAAU,EAAItS,KAAKqS,QAAU,GAC/CrS,KAAK8S,SAGP1B,IAAI1P,UAAUoR,KAAO,WACnB,IAAIE,EAAGC,EAAGC,EAAGC,EAAGC,EAAIC,EAAI5C,EAASzQ,KAAKyQ,OAElCzQ,KAAKyS,MAQPQ,IADAA,IALAD,IADAA,EAAIvC,EAAO,GAAK,YACN,EAAIuC,IAAM,IAAM,WAAa,IAIvCE,IADAA,IAAM,WADNC,IADAA,IAAM,WAAiB,WAAJH,GAAkBvC,EAAO,GAAK,YACvC,GAAK0C,IAAM,IAAMH,GAAK,KACH,UAALA,IAAoBvC,EAAO,GAAK,aAC9C,GAAKyC,IAAM,IAAMC,GAAK,IACjBA,EAAIH,IAAOvC,EAAO,GAAK,aAC5B,GAAKwC,IAAM,IAAMC,GAAK,GAEhCF,EAAIhT,KAAKgS,GACTiB,EAAIjT,KAAKiS,GACTiB,EAAIlT,KAAKkS,GASTe,IADAA,KALAD,IADAA,KADAG,EAAInT,KAAKmS,IACEc,GAAKC,EAAIC,IAAO1C,EAAO,GAAK,YAC7B,EAAIuC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAOzC,EAAO,GAAK,YAC7B,GAAK0C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOxC,EAAO,GAAK,YAC7B,GAAKyC,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOvC,EAAO,GAAK,aAC7B,GAAKwC,IAAM,IAAMC,GAAK,GAUlCD,IADAA,KALAD,IADAA,IAAMG,EAAKF,GAAKC,EAAIC,IAAO1C,EAAO,GAAK,YAC7B,EAAIuC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAOzC,EAAO,GAAK,aAC7B,GAAK0C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOxC,EAAO,GAAK,aAC7B,GAAKyC,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOvC,EAAO,GAAK,WAC7B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KALAD,IADAA,IAAMG,EAAKF,GAAKC,EAAIC,IAAO1C,EAAO,GAAK,aAC7B,EAAIuC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAOzC,EAAO,GAAK,aAC7B,GAAK0C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOxC,EAAO,IAAM,QAC9B,GAAKyC,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOvC,EAAO,IAAM,aAC9B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KALAD,IADAA,IAAMG,EAAKF,GAAKC,EAAIC,IAAO1C,EAAO,IAAM,aAC9B,EAAIuC,IAAM,IAAMC,GAAK,IAI/BC,IADAA,IAAMD,GADNE,IADAA,IAAMD,EAAKF,GAAKC,EAAIC,IAAOzC,EAAO,IAAM,WAC9B,GAAK0C,IAAM,IAAMH,GAAK,IAChBA,EAAIC,IAAOxC,EAAO,IAAM,aAC9B,GAAKyC,IAAM,IAAMC,GAAK,IAChBA,EAAIH,IAAOvC,EAAO,IAAM,aAC9B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAOzC,EAAO,GAAK,YAC7B,EAAIuC,IAAM,IAAMC,GAAK,GACXA,IAAOxC,EAAO,GAAK,aAC7B,EAAI0C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOvC,EAAO,IAAM,YAC9B,GAAKyC,IAAM,IAAMC,GAAK,GACZA,IAAO1C,EAAO,GAAK,YAC7B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAOzC,EAAO,GAAK,YAC7B,EAAIuC,IAAM,IAAMC,GAAK,GACXA,IAAOxC,EAAO,IAAM,WAC9B,EAAI0C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOvC,EAAO,IAAM,YAC9B,GAAKyC,IAAM,IAAMC,GAAK,GACZA,IAAO1C,EAAO,GAAK,YAC7B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAOzC,EAAO,GAAK,YAC7B,EAAIuC,IAAM,IAAMC,GAAK,GACXA,IAAOxC,EAAO,IAAM,aAC9B,EAAI0C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOvC,EAAO,GAAK,YAC7B,GAAKyC,IAAM,IAAMC,GAAK,GACZA,IAAO1C,EAAO,GAAK,aAC7B,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,EAAKC,IADXF,IADAA,IAAME,EAAKC,GAAKF,EAAIC,IAAOzC,EAAO,IAAM,aAC9B,EAAIuC,IAAM,IAAMC,GAAK,GACXA,IAAOxC,EAAO,GAAK,WAC7B,EAAI0C,IAAM,IAAMH,GAAK,GAGpBA,IADXE,IADAA,IAAMF,EAAKC,GAAKE,EAAIH,IAAOvC,EAAO,GAAK,aAC7B,GAAKyC,IAAM,IAAMC,GAAK,GACZA,IAAO1C,EAAO,IAAM,aAC9B,GAAKwC,IAAM,IAAMC,GAAK,EAUhCD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK1C,EAAO,GAAK,SAClB,EAAIuC,IAAM,IAAMC,GAAK,IACfxC,EAAO,GAAK,aAClB,GAAK0C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKxC,EAAO,IAAM,aACnB,GAAKyC,IAAM,IAAMC,GAAK,IAChB1C,EAAO,IAAM,WACnB,GAAKwC,IAAM,GAAKC,GAAK,EAU/BD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK1C,EAAO,GAAK,aAClB,EAAIuC,IAAM,IAAMC,GAAK,IACfxC,EAAO,GAAK,aAClB,GAAK0C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKxC,EAAO,GAAK,YAClB,GAAKyC,IAAM,IAAMC,GAAK,IAChB1C,EAAO,IAAM,aACnB,GAAKwC,IAAM,GAAKC,GAAK,EAU/BD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK1C,EAAO,IAAM,YACnB,EAAIuC,IAAM,IAAMC,GAAK,IACfxC,EAAO,GAAK,YAClB,GAAK0C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKxC,EAAO,GAAK,YAClB,GAAKyC,IAAM,IAAMC,GAAK,IAChB1C,EAAO,GAAK,WAClB,GAAKwC,IAAM,GAAKC,GAAK,EAU/BD,IADAA,KAHAI,GADAF,IADAA,KAHAC,EAAKH,EAAIC,IAETF,IADAA,IAAMI,EAAKD,GAAK1C,EAAO,GAAK,YAClB,EAAIuC,IAAM,IAAMC,GAAK,IACfxC,EAAO,IAAM,YACnB,GAAK0C,IAAM,IAAMH,GAAK,GACvBA,IAETE,IADAA,IAAMG,EAAKJ,GAAKxC,EAAO,IAAM,YACnB,GAAKyC,IAAM,IAAMC,GAAK,IAChB1C,EAAO,GAAK,YAClB,GAAKwC,IAAM,GAAKC,GAAK,EAQ/BD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM1C,EAAO,GAAK,YACxB,EAAIuC,IAAM,IAAMC,GAAK,IACfC,IAAMzC,EAAO,GAAK,aACxB,GAAK0C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMxC,EAAO,IAAM,aACzB,GAAKyC,IAAM,IAAMC,GAAK,IAChBH,IAAMvC,EAAO,GAAK,WACxB,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM1C,EAAO,IAAM,aACzB,EAAIuC,IAAM,IAAMC,GAAK,IACfC,IAAMzC,EAAO,GAAK,aACxB,GAAK0C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMxC,EAAO,IAAM,UACzB,GAAKyC,IAAM,IAAMC,GAAK,IAChBH,IAAMvC,EAAO,GAAK,aACxB,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM1C,EAAO,GAAK,aACxB,EAAIuC,IAAM,IAAMC,GAAK,IACfC,IAAMzC,EAAO,IAAM,WACzB,GAAK0C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMxC,EAAO,GAAK,aACxB,GAAKyC,IAAM,IAAMC,GAAK,IAChBH,IAAMvC,EAAO,IAAM,aACzB,GAAKwC,IAAM,IAAMC,GAAK,EAQhCD,IADAA,KAHAE,IADAA,IAAMF,IADND,IADAA,IAAME,GAAKD,GAAKE,IAAM1C,EAAO,GAAK,YACxB,EAAIuC,IAAM,IAAMC,GAAK,IACfC,IAAMzC,EAAO,IAAM,aACzB,GAAK0C,IAAM,IAAMH,GAAK,KAEhCE,IADAA,IAAMF,GAAKG,GAAKF,IAAMxC,EAAO,GAAK,YACxB,GAAKyC,IAAM,IAAMC,GAAK,IAChBH,IAAMvC,EAAO,GAAK,YACxB,GAAKwC,IAAM,IAAMC,GAAK,EAE5BlT,KAAKyS,OACPzS,KAAKgS,GAAKgB,EAAI,YAAc,EAC5BhT,KAAKiS,GAAKgB,EAAI,WAAa,EAC3BjT,KAAKkS,GAAKgB,EAAI,YAAc,EAC5BlT,KAAKmS,GAAKgB,EAAI,WAAa,EAC3BnT,KAAKyS,OAAQ,IAEbzS,KAAKgS,GAAKhS,KAAKgS,GAAKgB,GAAK,EACzBhT,KAAKiS,GAAKjS,KAAKiS,GAAKgB,GAAK,EACzBjT,KAAKkS,GAAKlS,KAAKkS,GAAKgB,GAAK,EACzBlT,KAAKmS,GAAKnS,KAAKmS,GAAKgB,GAAK,IAc7B/B,IAAI1P,UAAU4R,IAAM,WAClBtT,KAAK+S,WAEL,IAAIf,EAAKhS,KAAKgS,GAAIC,EAAKjS,KAAKiS,GAAIC,EAAKlS,KAAKkS,GAAIC,EAAKnS,KAAKmS,GAExD,OAAOhC,UAAW6B,GAAM,EAAK,IAAQ7B,UAAe,GAAL6B,GAC7C7B,UAAW6B,GAAM,GAAM,IAAQ7B,UAAW6B,GAAM,EAAK,IACrD7B,UAAW6B,GAAM,GAAM,IAAQ7B,UAAW6B,GAAM,GAAM,IACtD7B,UAAW6B,GAAM,GAAM,IAAQ7B,UAAW6B,GAAM,GAAM,IACtD7B,UAAW8B,GAAM,EAAK,IAAQ9B,UAAe,GAAL8B,GACxC9B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,EAAK,IACrD9B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,GAAM,IACtD9B,UAAW8B,GAAM,GAAM,IAAQ9B,UAAW8B,GAAM,GAAM,IACtD9B,UAAW+B,GAAM,EAAK,IAAQ/B,UAAe,GAAL+B,GACxC/B,UAAW+B,GAAM,GAAM,IAAQ/B,UAAW+B,GAAM,EAAK,IACrD/B,UAAW+B,GAAM,GAAM,IAAQ/B,UAAW+B,GAAM,GAAM,IACtD/B,UAAW+B,GAAM,GAAM,IAAQ/B,UAAW+B,GAAM,GAAM,IACtD/B,UAAWgC,GAAM,EAAK,IAAQhC,UAAe,GAALgC,GACxChC,UAAWgC,GAAM,GAAM,IAAQhC,UAAWgC,GAAM,EAAK,IACrDhC,UAAWgC,GAAM,GAAM,IAAQhC,UAAWgC,GAAM,GAAM,IACtDhC,UAAWgC,GAAM,GAAM,IAAQhC,UAAWgC,GAAM,GAAM,KAa1Df,IAAI1P,UAAUG,SAAWuP,IAAI1P,UAAU4R,IAYvClC,IAAI1P,UAAUoQ,OAAS,WACrB9R,KAAK+S,WAEL,IAAIf,EAAKhS,KAAKgS,GAAIC,EAAKjS,KAAKiS,GAAIC,EAAKlS,KAAKkS,GAAIC,EAAKnS,KAAKmS,GACxD,MAAO,CACA,IAALH,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,IACxD,IAALC,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,IACxD,IAALC,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,IACxD,IAALC,EAAYA,GAAM,EAAK,IAAOA,GAAM,GAAM,IAAOA,GAAM,GAAM,MAcjEf,IAAI1P,UAAU6R,MAAQnC,IAAI1P,UAAUoQ,OAYpCV,IAAI1P,UAAU8R,YAAc,WAC1BxT,KAAK+S,WAEL,IAAIpC,EAAS,IAAIT,YAAY,IACzBO,EAAS,IAAII,YAAYF,GAK7B,OAJAF,EAAO,GAAKzQ,KAAKgS,GACjBvB,EAAO,GAAKzQ,KAAKiS,GACjBxB,EAAO,GAAKzQ,KAAKkS,GACjBzB,EAAO,GAAKzQ,KAAKmS,GACVxB,GAcTS,IAAI1P,UAAUiP,OAASS,IAAI1P,UAAU8R,YAYrCpC,IAAI1P,UAAU+R,OAAS,WAErB,IADA,IAAIC,EAAIC,EAAIC,EAAIC,EAAY,GAAIxB,EAAQrS,KAAKuT,QACpC9B,EAAI,EAAGA,EAAI,IAClBiC,EAAKrB,EAAMZ,KACXkC,EAAKtB,EAAMZ,KACXmC,EAAKvB,EAAMZ,KACXoC,GAAarD,mBAAmBkD,IAAO,GACrClD,mBAA0C,IAAtBkD,GAAM,EAAIC,IAAO,IACrCnD,mBAA0C,IAAtBmD,GAAM,EAAIC,IAAO,IACrCpD,mBAAwB,GAALoD,GAMvB,OAJAF,EAAKrB,EAAMZ,GACXoC,GAAarD,mBAAmBkD,IAAO,GACrClD,mBAAoBkD,GAAM,EAAK,IAC/B,MAIJ,IAAI3D,QAAUuB,eAEV1B,UACFE,eAAiBC,QAmBjBpP,KAAKmT,IAAM/D,QA1pBf,MCMMgE,eAAiB,CACrBnH,mEACAmC,YAAaE,aAAalQ,QAC1BiQ,yBAAqBhN,EACrBgS,eAAgB,CACdC,OAAQ,2BACR1H,SAAU,GAEZ2H,SAAU,oDACVC,gBAAiB,mEACjBlI,QAAShN,eACT8N,MAAO,KACPc,UAAW,QACXuG,UAAU,EACVC,kBAAmB,IACnBC,qBAAsB,IACtBC,qBAAsB,EACtBC,QAAS,IACTC,iBAAkB,IAClBC,aAAc,IACdC,SAAU,QACVC,WAAY,CAAC,aACbC,SAAS,EACTlO,MAAO,KACPC,qBAAsB,gBACtBC,iBAAkB,YAClBC,kBAAmB,aACnBgO,oBAAqB,SACrBC,WAAY,MAGVC,eAAiB,GACjBC,aAAe,IAAIC,IAEjBC,sCACQhW,yDAAU,mCACfA,yBACA4U,eACA5U,QAEAiW,iCACAjW,IAEAa,KAAKb,QAAQ0O,gBACV,IAAIL,MAAM,wCAEbtO,OAAS,IAAIA,OAAOc,KAAKb,cACzB8M,QAAU,QACVK,OAAS,UACT+I,OAAS,UACTC,WAAY,OACZC,uBAAwB,OACxBC,qBAAsB,IAAI7V,MAAO4J,eACjCkM,6BACAC,cAAgBT,kBAChBU,iBAAmB5R,WAAS/D,KAAK4V,SAASC,KAAK7V,MAAOA,KAAK8V,iBAAiBzB,kBAAmB,CAClG7P,SAAS,EACTE,UAAU,SAEPqR,oBAAsB,UACtBC,oBAAqB,OACrBC,iCACAC,4BACAC,kFAGP,kBACSnW,KAAKwV,2CAEd,gBACOY,KAAKhQ,WAAW/H,OAAQ,CAC3BgY,OAAO,6CAGX,eACQC,EAAatW,KAAKb,QAAQyH,sBAAwB,gBACnD5G,KAAKuW,qBAAqBD,UAG1BnX,QAAQwH,MAAM6P,eAAeF,EAAYG,uBACzCT,oBAAqB,uCAG5B,eACQM,EAAatW,KAAKb,QAAQ0H,kBAAoB,YAC/C7G,KAAKuW,qBAAqBD,UAG1BnX,QAAQwH,MAAM6P,eAAeF,EAAYI,mBACzCV,oBAAqB,wCAG5B,eACQM,EAAatW,KAAKb,QAAQ2H,mBAAqB,aAChD9G,KAAKuW,qBAAqBD,UAG1BnX,QAAQwH,MAAM6P,eAAeF,EAAYK,oBACzCX,oBAAqB,uCAG5B,SAAqBM,OACX3P,EAAU3G,KAAKb,QAAfwH,cACHA,IAGDA,EAAMY,MAAM+O,IACd3P,EAAMiQ,iBAAiBN,IAElB,wCAGT,gBACOR,iBAAmB,CACtBe,WAAY,EACZtC,qBAAsBvU,KAAKb,QAAQoV,qBACnCF,kBAAmBrU,KAAKb,QAAQkV,kBAChCyC,qBAAsB9W,KAAKb,QAAQkV,kBACnC0C,qBAAsB,+BAI1B,gBACOC,4BACA1B,WAAY,OACZpW,OAAOY,IAAIsG,WAAWtI,QAASkC,KAAK8V,sDAG3C,gBACOA,iBAAiBe,WAAa,MAC/BI,EAAoBjX,KAAK8V,iBAAiBgB,0BACzChB,iBAAiBzB,kBAAoB4C,OACrC5B,OAAOnG,GAAGmF,kBAAkB4C,QAC5B5B,OAAOnG,GAAGoF,qBAAqB2C,kCAGtC,SAAgB3X,QACTqW,iBAAiB,QAAQ,QACzBL,WAAY,OACZpW,OAAOY,IAAIsG,WAAWrI,cAAeuB,2BAG5C,SAAS4X,QACFhY,OAAOY,IAAIsG,WAAWxH,MAAOsY,qCAGpC,gBACOvB,iBAAiB,QAAO,QACxBzW,OAAOY,IAAIsG,WAAW5H,iBAAkBwB,KAAK8V,mDAGpD,gBACOH,iBAAiB,QAAO,QACxBzW,OAAOY,IAAIsG,WAAWpI,gBAAiBgC,KAAK8V,qDAGnD,mBACOR,WAAY,EACbtV,KAAK8V,iBAAiBe,YAAc7W,KAAK8V,iBAAiBvB,0BACvDoB,iBAAiB,QAAO,WAG3B3V,KAAK8V,iBAAiBzB,kBAAoBrU,KAAK8V,iBAAiBiB,qBAAsB,KACpFI,EAAWnX,KAAK8V,iBAAiBgB,qBAAuB9W,KAAK8V,iBAAiBe,gBAC7Ef,iBAAiBzB,kBAAoB8C,OACrC9B,OAAOnG,GAAGmF,kBAAkB8C,QAC5B9B,OAAOnG,GAAGoF,qBAAqB6C,QAEjCrB,iBAAiBe,kBACjB3X,OAAOY,IAAIsG,WAAWhI,kBAAmB4B,KAAK8V,gDAGrD,SAAc3O,QACPmO,WAAY,OACZpW,OAAOY,IAAIsG,WAAWnI,WAAYkJ,QAClCyO,SAAS,QAAQ,+BAGxB,SAAatW,IACS,WAAhB8X,QAAO9X,IAAwC,IAAnBA,EAAK+X,YAIjC/X,GAAQU,KAAKsV,gBACVpW,OAAOY,IAAIsG,WAAW1H,0BACtB8W,qBAAsB,IAAI7V,MAAO4J,gBALjC+N,wDAWT5K,eAAuBpN,GACjBA,EAAKiY,cACDzI,mBAAmBxP,EAAKiY,OAAQvX,KAAKb,QAAQ4P,YAAa/O,KAAKb,QAAQ6P,qBAE3E1P,EAAKkY,WACFlL,OAAS,CACZC,SAAU,EACV0H,OAAQ3U,EAAKkY,IAAIjW,QAAQ,WAAY,MAGrCjC,EAAKmY,SAAWlM,MAAMC,QAAQlM,EAAKmY,gBAChCxL,QAAU3M,EAAKmY,QAAQC,KAAI,SAAC9K,EAAK5L,SAC7B,CACLuL,SAAUvL,EACViT,OAAQrH,EAAIrL,QAAQ,WAAY,SAIlCjC,EAAKqY,aACFxY,QAAQ4N,MAAQzN,EAAKqY,WACrB5K,MAAQzN,EAAKqY,YACZ3X,KAAK4V,SAAS,WAAW,IAE7BtW,EAAKsY,mBACFzY,QAAQ0Y,YAAcvY,EAAKsY,aAE9BtY,EAAKwY,oBACF3Y,QAAQ2O,aAAexO,EAAKwY,kBAC5BC,wDAKT,sBACQtL,EAAO,IAAI9M,KAAKK,KAAKb,QAAQ0Y,gBAC9BrL,YAAYC,QAGX+H,EAAU/H,EAAKlD,WAAY,IAAI5J,MAAO4J,UAAY,IACxDrE,YAAWwH,qBACLgB,EAAS,KACPP,QAAYW,aAAakK,EAAK7Y,QAAQgV,gBAAiB6D,EAAK7Y,QAAQ2O,iBACvEX,EAAIM,YACLC,EAASP,EAAIM,KAAKC,aACLsK,EAAKC,iBAAiBvK,SAE/B,IAAIF,iCACTgH,gCAGL,SAAa0D,UACNA,EAAO5Y,KAKL,CACLiH,KAHS2R,EAAO5Y,KAAK,GAIrBA,KAHS4Y,EAAO5Y,KAAK,IAHd,2BAUXoN,qBAAeJ,yDAAS,UAAW6L,0DAC7BC,EAAkB,QACP,YAAX9L,EACF8L,EAAkBpY,KAAKqY,0BAClB,GAAe,SAAX/L,EACT8L,EAAkBpY,KAAKsY,+BAClB,CAAA,GAAe,SAAXhM,QAGH,IAAIkB,wEAAiElB,sCAF3E8L,EAAkBpY,KAAKuY,yBAIpBH,SACE9L,OAAStM,KAAKqY,2BAEhBf,6BACAkB,yBACAC,sBACAzB,uBACDmB,SAGEnY,KAAK0Y,MAAM1Y,KAAKb,QAAQ0O,qCAGhC,eACO7N,KAAKuV,4BACF,IAAI/H,MAAM,uGAIpB,eACMmL,EAAS3Y,KAAKsM,OAAO2H,OACrBU,EAAW3U,KAAKb,QAAQwV,SACxB/H,YAAS+H,gBAAcgE,QACtBzZ,OAAOY,IAAI,kBAAmB8M,QAC9BgM,0BACCzZ,EAAU,CACd0Z,cAAc,EACdC,mBAAmB,EACnBjE,SAAS,EACTD,WAAY,CAAC,aACbxV,OAAO,GAELY,KAAK+M,QACP5N,EAAQ4Z,MAAQ,CACdhM,MAAO/M,KAAK+M,aAGXsI,OAAS3U,KAAKwO,GAAGtC,EAAKzN,GAE3B6V,eAAexK,KAAKxK,KAAKqV,aACpBE,uBAAwB,mCAE/B,2BACOF,OACJ2D,GAAG5S,WAAWhI,mBAAmB,SAAAkB,UAAQ2Z,EAAKC,oBAAoB5Z,MAClE0Z,GAAG5S,WAAW5H,kBAAkB,SAAAc,UAAQ2Z,EAAKE,mBAAmB7Z,MAChE0Z,GAAG5S,WAAWtI,SAAS,SAAAwB,UAAQ2Z,EAAKG,WAAW9Z,MAC/C0Z,GAAG5S,WAAWpI,iBAAkB,SAAAsB,UAAQ2Z,EAAKI,kBAAkB/Z,MAC/D0Z,GAAG5S,WAAWrI,eAAe,SAAAuB,UAAQ2Z,EAAKK,gBAAgBha,MAC1D0Z,GAAG5S,WAAW7H,iBAAiB,SAAAe,UAAQ2Z,EAAKC,oBAAoB5Z,MAChE0Z,GAAG5S,WAAWxH,OAAO,SAAAU,UAAQ2Z,EAAKM,SAASja,MAC3C0Z,GAAG5S,WAAWnI,YAAY,SAAAqB,UAAQ2Z,EAAKO,cAAcla,WACjD+V,OAAOoE,SAAWzZ,KAAK0Z,SAAS7D,KAAK7V,WACrCqV,OAAOsE,QAAU3Z,KAAK0Z,SAAS7D,KAAK7V,oCAG3C,sBACMA,KAAK4Z,mBACPC,cAAc7Z,KAAK4Z,mBAGjB5Z,KAAK0U,cACPmF,cAAe7Z,KAAK0U,mBAEjBkF,kBAAoBE,aAAYpN,qBAC7BhN,GAAM,IAAIC,MAAO4J,UACjBwQ,EAAwC,EAAhCC,EAAK7a,QAAQsV,iBAEvB/U,EAAMsa,EAAKC,wBAA0BF,QACjCC,EAAKpE,SAAS,QAAQ,GAGzBoE,EAAK3E,OAIN3V,EAAMsa,EAAKC,wBAA0BD,EAAK7a,QAAQsV,kBACpDuF,EAAK5D,KAAKhQ,WAAW3H,WAAYub,EAAK7a,QAAQ4N,OAJ9CiN,EAAK1C,0BAQNtX,KAAKb,QAAQsV,oDAOlB,eACMnI,EAAS,YACTtM,KAAKiM,QAAQhL,SACfqL,EAAStM,KAAKiM,QAAQ,SAEnBK,OAASA,EACTtM,KAAKsM,cACHA,OAAStM,KAAKb,QAAQ6U,gBAEtBhU,KAAKsM,+CAGd,eACM4N,EAAwBla,KAAKsM,OAAOC,iBACnCrN,OAAOY,iDACRoa,IAA0Bla,KAAKiM,QAAQhL,OAAS,SAC3CjB,KAAKuY,6BAEV4B,EAAqBD,EAAwB,EAC7CE,EAAapa,KAAKiM,QAAQoO,MAAK,SAAA/N,UAAUA,EAAOC,WAAa4N,YAC5DC,IACHA,EAAapa,KAAKuY,0BAKhBvY,KAAKsM,OAAO2H,SAAWmG,EAAWnG,aAC/B3H,OAAS8N,EACPpa,KAAKsM,cAETpN,OAAOY,wDAAyDE,KAAKsM,QACnE,mDAGT,gBACOpN,OAAOY,iDAAkD,8BAC1Dwa,EAAoBtO,6BAA6BhM,KAAKiM,gBACrDjM,KAAKsM,OAINtM,KAAKsM,QAAUgO,EAAkBrG,SAAWjU,KAAKsM,OAAO2H,aACrD3H,OAASgO,OACTpb,OAAOY,iDAAkDE,KAAKsM,QAC5DtM,KAAKsM,QAEP,WARAA,OAASgO,EACPta,KAAKsM,mCAUhBI,iBAE2C,WAArC1M,KAAKb,QAAQ2V,qBAAoC9U,KAAKoV,gBAAgBnJ,SAAWV,MAAMC,QAAQxL,KAAKoV,gBAAgBnJ,UAAYjM,KAAKoV,gBAAgBnJ,QAAQhL,OAAS,SACnKgL,QAAUjM,KAAKoV,gBAAgBnJ,iCAIxC,SAASiM,mBACFA,EAAO5Y,UAGRib,EAAMva,KAAKwa,aAAatC,QACvBhZ,OAAOY,2BAAoBya,EAAIhU,MAAQgU,QACvC/E,qBAAsB,IAAI7V,MAAO4J,eACjCmM,cAAcrL,SAAQ,SAACoQ,EAAUC,IAClB,MAAdA,GAEOH,EAAIhU,OAASmU,IADtBD,EAASF,UAiBPI,wBAXHvU,WAAW1H,oBAAsBsB,KAAK4a,gCACtCxU,WAAW7I,eAAiByC,KAAKiY,oCACjC7R,WAAWxI,kBAAoBoC,KAAK6a,2BACpCzU,WAAW3I,eAAiBuC,KAAK6a,2BACjCzU,WAAW1I,gBAAkBsC,KAAK6a,2BAClCzU,WAAWlJ,cAAe,WACpB4d,EAAKxF,WACRwF,EAAK1B,mBAIwBmB,EAAIhU,MACnCoU,GAAwC,mBAAjBA,GACzBA,EAAaxY,KAAKnC,KAAMua,EAAIjb,MAE1BU,KAAKgW,oBACP+E,0BACErU,UAAW6T,GACRva,KAAKb,+BASduN,wBACM1M,KAAKuV,wBAGLvV,KAAKqV,aACFe,KAAKhQ,WAAWzH,aAEjBqB,KAAKgb,kBACLhb,KAAKib,wBACLjb,KAAK0Y,MAAM1Y,KAAKb,QAAQ0O,iBACxB7N,KAAKkb,gBARF,0BAgBXxO,eAAeK,QACR5N,QAAQ4N,MAAQA,OAChBoO,mBACCnb,KAAKob,0CAMb,WACEpG,eAAe3K,SAAQ,SAAAgR,GACrBA,EAAWC,QACXD,EAAWF,gBAEbnG,eAAiB,GACbhV,KAAKqV,cACFA,OAAO8F,kBACP9F,OAAOiG,aACPjG,OAAS,gCAOlB,gBACOK,cAAgB,IAAIR,SACpB0D,wCAQP,SAAG8B,EAAWD,QACP/E,cAAc6F,IAAIb,EAAWD,QAC7Be,iCASP,SAAKd,OAAWpb,yDAAO,QAChBkc,kBACAtc,OAAOY,sBAAe4a,GAAapb,QACnC+V,OAAOe,KAAKsE,EAAWpb,yBAO9B,eAAO+W,kEACAD,KAAKhQ,WAAW/H,OAAQ,CAAEgY,MAAAA,iCAGjC3J,eAAoBE,OACZ6O,EAASzb,KAAKb,QAAQyN,IACtB8O,EAAc1b,KAAKb,QAAQ2V,4BAE1BlI,cAGAzN,QAAQyN,IAAMA,OACdzN,QAAQ2V,oBAAsB,eAC7B9U,KAAKob,OACX,MAAOlE,QACFqC,SAASrC,QACT/X,QAAQyN,IAAM6O,OACdtc,QAAQ2V,oBAAsB4G,QAC7B1b,KAAKob,iCAIf,eACUvN,EAAc7N,KAAKb,QAAnB0O,kBACHd,MAAQ/M,KAAKb,QAAQ4N,MACR,UAAdc,IACG7N,KAAK+M,YACF,IAAIS,MAAM,2FAItB,kBACMxN,KAAKb,QAAQ4P,cAAgBE,aAAalQ,QACrCkP,QAAQC,WAGZkB,OAAOuM,eAAe1a,QAEzB2a,aAAaC,QAAQ,oBAAqBlc,KAAKD,OAGjD0P,OAAO0M,iBAAiB,WAAW,SAACxV,MAChB,sBAAdA,EAAMyV,IAERH,aAAaC,QAAQ,iBAAkBrc,KAAKC,UAAU2P,OAAOuM,iBAC7DC,aAAaI,WAAW,uBACnB,GAAkB,mBAAd1V,EAAMyV,MAA6BJ,eAAe1a,OAAQ,KAE7D3B,EAAOE,KAAKyc,MAAM3V,EAAM4V,cAEzB,IAAIH,KAAOzc,EACVA,EAAKqC,eAAeoa,IACtB3M,OAAOuM,eAAeE,QAAQE,EAAKzc,EAAKyc,QAMzC,IAAI9N,SAAQ,SAAAC,UAAWhJ,WAAYgJ,EAAU,8BAQtD,sBAAM7N,yDAAO,QAEP8b,EAAU,CACZpP,MAAO/M,KAAKb,QAAQ4N,MACpBF,MAAO7M,KAAKb,QAAQ0N,MACpBG,SAAUhN,KAAKb,QAAQ6N,SACvBF,SAAU9M,KAAKb,QAAQ2N,UAErBiP,EAAMjI,IAAItU,KAAKC,UAAU0c,IACvBC,EAAQ,WAEVpc,KAAK+V,oBAAsBqG,GAAQ,IAAIzc,MAAO4J,UACzC0E,QAAQC,gBAGZ6H,qBAAsB,IAAIpW,MAAO4J,UAE/B,IAAI0E,SAAQvB,eAAOwB,EAASC,WAE3BkO,EAAejN,OAAOuM,eAAeW,QAAQP,MAE7CM,SACFA,EAAe7c,KAAKyc,MAAMI,GAC1BE,EAAKrd,OAAOY,IAAI,wBAAyBuc,SACnCE,EAAKtE,iBAAiBoE,GACrBnO,EAAQmO,GAEjB,MAAOnF,GACPqF,EAAKrd,OAAOY,IAAI,2BAA4BoX,WAItCtK,EAAMe,oBAAoB4O,EAAKpd,QAAQ+U,SAAU7T,GACjD8M,QAAYR,cAAcC,EAAKuP,SAC/BI,EAAKtE,iBAAiB9K,GAExBoP,EAAKpd,QAAQ4P,cAAgBE,aAAalQ,SAC5CqQ,OAAOuM,eAAeE,QAAQE,EAAKvc,KAAKC,UAAU0N,IAGpDe,EAAQf,GACR,MAAO+J,GACPqF,EAAKtQ,QAAUsQ,EAAKnH,gBAAgBnJ,SAAWhN,eAC/CkP,EAAO+I,uBCtoBO,oBAAX9H,SAETA,OAAO+F,UAAYqH"} \ No newline at end of file diff --git a/src/store/dialers.js b/src/store/dialers.js index d6f0223e..6ed2bd08 100644 --- a/src/store/dialers.js +++ b/src/store/dialers.js @@ -1,17 +1,18 @@ const types = { SET_DIALERS: 'SET_DIALERS', - UPDATE_DIALERS: 'UPDATE_DIALERS', + UPDATE_DIALERS: 'UPDATE_DIALERS' } + const state = { - all: [], + all: [] } const mutations = { [types.SET_DIALERS]: (state, value) => { state.all = value }, - [types.UPDATE_DIALERS]: (state, data) => { - state.all = data + [types.UPDATE_DIALERS]: (state, { index, dialer }) => { + state.all.splice(index, 1, dialer) } } diff --git a/src/store/handleStoreEvents.js b/src/store/handleStoreEvents.js index d68b0ec1..25f42540 100644 --- a/src/store/handleStoreEvents.js +++ b/src/store/handleStoreEvents.js @@ -63,7 +63,15 @@ export default function onNewEvent({ eventData, store, extensionsModuleName, que store.dispatch(`${dialersModuleName}/setDialers`, data.dialers) break; case eventTypes.DIALER_EVENT: - const dialers = [data.data]; + const dialer = data.data; + const allDialers = store.state[dialersModuleName].all || [] + let dialerIndex = allDialers.findIndex(e => e.campaignID === dialer.campaignID) + if (dialerIndex !== -1) { + store.dispatch(`${dialersModuleName}/updateDialers`, { + index: dialerIndex, + dialer + }) + } store.dispatch(`${dialersModuleName}/updateDialers`, dialers) break; default: From d74aaf14bc6ee8a574beeee8a796c7e18d6d4649 Mon Sep 17 00:00:00 2001 From: OrtZz Date: Wed, 6 Apr 2022 15:16:00 +0300 Subject: [PATCH 15/27] updated: dialer event --- dist/voicenter-events-sdk.cjs.js | 1 - dist/voicenter-events-sdk.esm.js | 1 - dist/voicenter-events-sdk.umd.js | 2 +- dist/voicenter-events-sdk.umd.js.map | 2 +- src/store/handleStoreEvents.js | 1 - 5 files changed, 2 insertions(+), 5 deletions(-) diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js index e16df307..e08d6cd5 100644 --- a/dist/voicenter-events-sdk.cjs.js +++ b/dist/voicenter-events-sdk.cjs.js @@ -315,7 +315,6 @@ function onNewEvent(_ref) { }); } - store.dispatch("".concat(dialersModuleName, "/updateDialers"), dialers); break; } } diff --git a/dist/voicenter-events-sdk.esm.js b/dist/voicenter-events-sdk.esm.js index 23663c23..2aa17a9e 100644 --- a/dist/voicenter-events-sdk.esm.js +++ b/dist/voicenter-events-sdk.esm.js @@ -311,7 +311,6 @@ function onNewEvent(_ref) { }); } - store.dispatch("".concat(dialersModuleName, "/updateDialers"), dialers); break; } } diff --git a/dist/voicenter-events-sdk.umd.js b/dist/voicenter-events-sdk.umd.js index ffa94962..44a825a9 100644 --- a/dist/voicenter-events-sdk.umd.js +++ b/dist/voicenter-events-sdk.umd.js @@ -1,4 +1,4 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).VoicenterEventsSDK=t()}(this,(function(){"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers);break;case eventTypes.DIALER_EVENT:var f=a.data,p=(n.state[r].all||[]).findIndex((function(e){return e.campaignID===f.campaignID}));-1!==p&&n.dispatch("".concat(r,"/updateDialers"),{index:p,dialer:f}),n.dispatch("".concat(r,"/updateDialers"),dialers)}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){var n=t.index,o=t.dialer;e.all.splice(n,1,o)})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all},getAllDialersWithTypeIVR:function(e){return e.all.filter((function(e){return"IVR"===e.type}))},getAllDialersWithTypeAUTOMATIC:function(e){return e.all.filter((function(e){return"Automatic"===e.type}))}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Prioritye.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers);break;case eventTypes.DIALER_EVENT:var f=a.data,p=(n.state[r].all||[]).findIndex((function(e){return e.campaignID===f.campaignID}));-1!==p&&n.dispatch("".concat(r,"/updateDialers"),{index:p,dialer:f})}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){var n=t.index,o=t.dialer;e.all.splice(n,1,o)})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all},getAllDialersWithTypeIVR:function(e){return e.all.filter((function(e){return"IVR"===e.type}))},getAllDialersWithTypeAUTOMATIC:function(e){return e.all.filter((function(e){return"Automatic"===e.type}))}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Priority ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n case eventTypes.DIALER_EVENT:\r\n const dialer = data.data;\r\n const allDialers = store.state[dialersModuleName].all || []\r\n let dialerIndex = allDialers.findIndex(e => e.campaignID === dialer.campaignID)\r\n if (dialerIndex !== -1) {\r\n store.dispatch(`${dialersModuleName}/updateDialers`, {\r\n index: dialerIndex,\r\n dialer\r\n })\r\n }\r\n store.dispatch(`${dialersModuleName}/updateDialers`, dialers)\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS'\r\n}\r\n\r\nconst state = {\r\n all: []\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, { index, dialer }) => {\r\n state.all.splice(index, 1, dialer)\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","import environments from './environments'\r\n\r\nfunction loadBrowserScript(url) {\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n\r\nasync function loadExtensionScript(url) {\r\n try {\r\n let script = await fetch(url)\r\n script = await script.text()\r\n\r\n eval(script)\r\n } catch (e) {\r\n return Promise.reject(e)\r\n }\r\n}\r\n\r\nexport async function loadExternalScript(url, environment, getSocketIOFunction) {\r\n if (typeof getSocketIOFunction === 'function') {\r\n self.io = getSocketIOFunction(url)\r\n\r\n return\r\n }\r\n\r\n switch (environment) {\r\n case environments.BROWSER:\r\n await loadBrowserScript(url)\r\n break\r\n case environments.CHROME_EXTENSION:\r\n await loadExtensionScript(url)\r\n }\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport environments from './utils/environments'\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n environment: environments.BROWSER,\r\n getSocketIOFunction: undefined,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction)\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = self.io(url, options)\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) {\r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession() {\r\n if (this.options.environment !== environments.BROWSER) {\r\n return Promise.resolve()\r\n }\r\n\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n }\r\n\r\n window.addEventListener('storage', (event) => {\r\n if (event.key === 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key === 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n const data = JSON.parse(event.newValue)\r\n\r\n for (let key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n }\r\n })\r\n\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n\r\n this._lastLoginTimestamp = new Date().getTime()\r\n\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n let loginSession = window.sessionStorage.getItem(key);\r\n\r\n if (loginSession) {\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n } catch (err) {\r\n this.Logger.log('Error on getting session', err)\r\n }\r\n\r\n try {\r\n const url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url, payload)\r\n await this._onLoginResponse(res)\r\n\r\n if (this.options.environment === environments.BROWSER) {\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n }\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","DIALER_EVENT","BROWSER","CHROME_EXTENSION","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","dialer","dialerIndex","campaignID","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadBrowserScript","Promise","resolve","reject","script","document","createElement","src","onload","onerror","append","loadExtensionScript","text","eval","loadExternalScript","environment","getSocketIOFunction","environments","io","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/utils/environments.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n ALL_DIALERS_STATUS: 'AllDialersStatus',\r\n DIALER_EVENT: 'DialerEvent'\r\n}\r\n","export default {\r\n BROWSER: 'browser',\r\n CHROME_EXTENSION: 'chrome-extension'\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n case eventTypes.DIALER_EVENT:\r\n const dialer = data.data;\r\n const allDialers = store.state[dialersModuleName].all || []\r\n let dialerIndex = allDialers.findIndex(e => e.campaignID === dialer.campaignID)\r\n if (dialerIndex !== -1) {\r\n store.dispatch(`${dialersModuleName}/updateDialers`, {\r\n index: dialerIndex,\r\n dialer\r\n })\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS'\r\n}\r\n\r\nconst state = {\r\n all: []\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, { index, dialer }) => {\r\n state.all.splice(index, 1, dialer)\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","import environments from './environments'\r\n\r\nfunction loadBrowserScript(url) {\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n\r\nasync function loadExtensionScript(url) {\r\n try {\r\n let script = await fetch(url)\r\n script = await script.text()\r\n\r\n eval(script)\r\n } catch (e) {\r\n return Promise.reject(e)\r\n }\r\n}\r\n\r\nexport async function loadExternalScript(url, environment, getSocketIOFunction) {\r\n if (typeof getSocketIOFunction === 'function') {\r\n self.io = getSocketIOFunction(url)\r\n\r\n return\r\n }\r\n\r\n switch (environment) {\r\n case environments.BROWSER:\r\n await loadBrowserScript(url)\r\n break\r\n case environments.CHROME_EXTENSION:\r\n await loadExtensionScript(url)\r\n }\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport environments from './utils/environments'\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n environment: environments.BROWSER,\r\n getSocketIOFunction: undefined,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction)\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = self.io(url, options)\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) {\r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession() {\r\n if (this.options.environment !== environments.BROWSER) {\r\n return Promise.resolve()\r\n }\r\n\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n }\r\n\r\n window.addEventListener('storage', (event) => {\r\n if (event.key === 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key === 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n const data = JSON.parse(event.newValue)\r\n\r\n for (let key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n }\r\n })\r\n\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n\r\n this._lastLoginTimestamp = new Date().getTime()\r\n\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n let loginSession = window.sessionStorage.getItem(key);\r\n\r\n if (loginSession) {\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n } catch (err) {\r\n this.Logger.log('Error on getting session', err)\r\n }\r\n\r\n try {\r\n const url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url, payload)\r\n await this._onLoginResponse(res)\r\n\r\n if (this.options.environment === environments.BROWSER) {\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n }\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","DIALER_EVENT","BROWSER","CHROME_EXTENSION","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","dialer","dialerIndex","campaignID","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadBrowserScript","Promise","resolve","reject","script","document","createElement","src","onload","onerror","append","loadExtensionScript","text","eval","loadExternalScript","environment","getSocketIOFunction","environments","io","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file diff --git a/src/store/handleStoreEvents.js b/src/store/handleStoreEvents.js index 25f42540..f488b97e 100644 --- a/src/store/handleStoreEvents.js +++ b/src/store/handleStoreEvents.js @@ -72,7 +72,6 @@ export default function onNewEvent({ eventData, store, extensionsModuleName, que dialer }) } - store.dispatch(`${dialersModuleName}/updateDialers`, dialers) break; default: break; From cfded364b9f430d43218d762c706e2569c570639 Mon Sep 17 00:00:00 2001 From: "serhii.ku" Date: Mon, 23 May 2022 19:18:38 +0300 Subject: [PATCH 16/27] fixed window is not defined for chrome extension --- dist/voicenter-events-sdk.cjs.js | 1464 --- dist/voicenter-events-sdk.esm.js | 1460 --- dist/voicenter-events-sdk.umd.js | 12 - dist/voicenter-events-sdk.umd.js.map | 1 - package-lock.json | 17396 +++++++++++++++++++++++++ package.json | 3 +- src/sdk.js | 284 +- 7 files changed, 17618 insertions(+), 3002 deletions(-) delete mode 100644 dist/voicenter-events-sdk.cjs.js delete mode 100644 dist/voicenter-events-sdk.esm.js delete mode 100644 dist/voicenter-events-sdk.umd.js delete mode 100644 dist/voicenter-events-sdk.umd.js.map create mode 100644 package-lock.json diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js deleted file mode 100644 index e08d6cd5..00000000 --- a/dist/voicenter-events-sdk.cjs.js +++ /dev/null @@ -1,1464 +0,0 @@ -'use strict'; - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var debounce = _interopDefault(require('lodash/debounce')); -var md5 = _interopDefault(require('js-md5')); - -function _typeof(obj) { - "@babel/helpers - typeof"; - - return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }, _typeof(obj); -} - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -var eventTypes = { - LOGIN_STATUS: 'loginStatus', - LOGIN: 'login', - LOGIN_USER: 'loginUser', - LOGIN_CODE: 'loginUserCode', - LOGIN_ACCOUNT: 'loginAccount', - LOGIN_RESPONSE: 'loginResponse', - QUEUE_EVENT: 'QueueEvent', - QUEUES_UPDATED: 'QueuesUpdated', - DIALERS_UPDATED: 'DialersUpdated', - EXTENSION_EVENT: 'ExtensionEvent', - EXTENSION_UPDATED: 'ExtensionsUpdated', - ALL_EXTENSION_STATUS: 'AllExtensionsStatus', - CONNECT: 'connect', - CONNECT_ERROR: 'connect_error', - CONNECT_TIMEOUT: 'connect_timeout', - DISCONNECT: 'disconnect', - PONG: 'pong', - RECONNECT: 'reconnect', - RECONNECT_ATTEMPT: 'reconnect_attempt', - RESYNC: 'resync', - RECONNECTING: 'reconnecting', - RECONNECT_ERROR: 'reconnect_error', - RECONNECT_FAILED: 'reconnect_failed', - KEEP_ALIVE: 'keepalive', - KEEP_ALIVE_RESPONSE: 'keepaliveResponse', - CLOSE: 'closeme', - ERROR: 'error', - ALL_DIALERS_STATUS: 'AllDialersStatus', - DIALER_EVENT: 'DialerEvent' -}; - -var environments = { - BROWSER: 'browser', - CHROME_EXTENSION: 'chrome-extension' -}; - -var defaultServers = [{ - 'URLID': 59, - 'Priority': 5, - 'Version': 2, - 'Domain': 'monitor1.voicenter.co' -}, { - 'URLID': 3, - 'Priority': 4, - 'Version': 2, - 'Domain': 'monitor3.voicenter.co.il' -}, { - 'URLID': 4, - 'Priority': 3, - 'Version': 2, - 'Domain': 'monitor4.voicenter.co.il' -}, { - 'URLID': 11, - 'Priority': 2, - 'Version': 2, - 'Domain': 'monitor11.voicenter.co' -}, { - 'URLID': 5, - 'Priority': 0, - 'Version': 2, - 'Domain': 'monitor5.voicenter.co.il' -}]; - -var Logger = /*#__PURE__*/function () { - function Logger() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Logger); - - this.debug = options.debug; - } - /** - * Logs to console a colored message - * @param message - * @param data - * @private - */ - - - _createClass(Logger, [{ - key: "_log", - value: function _log(message, data) { - var toLog = data ? "".concat(message, ", %c Data -> ").concat(JSON.stringify(data)) : "".concat(message); - var now = new Date().toUTCString(); - console.log("%c ".concat(now, ": %c ").concat(toLog), "color: #276749;", "color: #4299e1;", "color: #2c3e50;"); - } - /** - * Logs to console a colored message - * @param message - * @param data - * @private - */ - - }, { - key: "_error", - value: function _error(message, data) { - var toLog = data ? "".concat(message, ", Data -> ").concat(JSON.stringify(data)) : "".concat(message); - var now = new Date().toUTCString(); - console.error("".concat(now, ": ").concat(toLog)); - } - /** - * Logs messages in case debug mode is set - * @param message - * @param data - */ - - }, { - key: "log", - value: function log(message, data) { - if (this.debug) { - if (message && !data) { - this._log(message); - } else { - this._log(message, data); - } - } - } - /** - * Logs error messages in case debug mode is set - * @param message - * @param data - */ - - }, { - key: "error", - value: function error(message, data) { - if (this.debug) { - if (message && !data) { - this._error(message); - } else { - this._error(message, data); - } - } - } - }]); - - return Logger; -}(); - -var sdkEventReasons = { - NEWCALL: 'NEWCALL', - ANSWER: 'ANSWER', - HANGUP: 'HANGUP' -}; -var offlineEvents = [eventTypes.CONNECT_ERROR, eventTypes.CONNECT_TIMEOUT, eventTypes.DISCONNECT, eventTypes.RECONNECT_ATTEMPT, eventTypes.RECONNECTING, eventTypes.RECONNECT_ERROR, eventTypes.RECONNECT_FAILED, sdkEventReasons.CLOSE]; - -function isSocketOffline(event) { - var name = event.name; - return offlineEvents.includes(name); -} - -function onNewEvent(_ref) { - var eventData = _ref.eventData, - store = _ref.store, - extensionsModuleName = _ref.extensionsModuleName, - queuesModuleName = _ref.queuesModuleName, - dialersModuleName = _ref.dialersModuleName; - var name = eventData.name, - data = eventData.data; - store.commit("".concat(extensionsModuleName, "/SET_IS_SOCKET_OFFLINE"), isSocketOffline(eventData)); - - switch (name) { - case eventTypes.ALL_EXTENSION_STATUS: - store.dispatch("".concat(extensionsModuleName, "/setExtensions"), data.extensions); - break; - - case eventTypes.EXTENSION_EVENT: - var extension = data.data; // Event reason: NEWCALL/ANSWER/HANGUP - - extension['lastEvent'] = { - reason: data.reason, - ivrid: data.ivruniqueid - }; - var extensions = store.state[extensionsModuleName].extensions; - var extensionIndex = extensions.findIndex(function (e) { - return e.userID === extension.userID; - }); - - if (extensionIndex !== -1) { - store.dispatch("".concat(extensionsModuleName, "/updateExtension"), { - index: extensionIndex, - extension: extension - }); - } - - break; - - case eventTypes.LOGIN_STATUS: - store.commit("".concat(extensionsModuleName, "/SET_SERVER_TIME"), data); - store.dispatch("".concat(queuesModuleName, "/setQueues"), data.queues); - break; - - case eventTypes.QUEUE_EVENT: - var queue = data.data; - var allQueues = store.state[queuesModuleName].all || []; - var queueIndex = allQueues.findIndex(function (e) { - return e.QueueID === queue.QueueID; - }); - - if (queueIndex !== -1) { - store.dispatch("".concat(queuesModuleName, "/updateQueue"), { - index: queueIndex, - queue: queue - }); - } - - break; - - case eventTypes.ALL_DIALERS_STATUS: - store.dispatch("".concat(dialersModuleName, "/setDialers"), data.dialers); - break; - - case eventTypes.DIALER_EVENT: - var dialer = data.data; - var allDialers = store.state[dialersModuleName].all || []; - var dialerIndex = allDialers.findIndex(function (e) { - return e.campaignID === dialer.campaignID; - }); - - if (dialerIndex !== -1) { - store.dispatch("".concat(dialersModuleName, "/updateDialers"), { - index: dialerIndex, - dialer: dialer - }); - } - - break; - } -} - -var callStatuses = { - CALLING: 100, - HOLD: 101 -}; - -var _mutations; -var ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000; -var MINUTE = 60 * 1000; -var LOGOUT_STATUS = 2; -var HOLD_STATUS = 'hold'; -var types = { - SET_EXTENSIONS: 'SET_EXTENSIONS', - UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS', - SET_SERVER_TIME: 'SET_SERVER_TIME', - SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE' -}; -var state = { - extensions: [], - serverTime: null, - serverDelta: 0, - serverOffset: 0, - isSocketOffline: false, - offlineSocketTimestamp: null -}; -var mutations = (_mutations = {}, _defineProperty(_mutations, types.SET_EXTENSIONS, function (state, value) { - state.extensions = value; -}), _defineProperty(_mutations, types.UPDATE_EXTENSIONS, function (state, _ref) { - var index = _ref.index, - extension = _ref.extension; - state.extensions.splice(index, 1, extension); -}), _defineProperty(_mutations, types.SET_SERVER_TIME, function (state, value) { - state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET; - state.serverTime = value.servertime * 1000 - state.serverOffset; - state.serverDelta = new Date().getTime() - state.serverTime; -}), _defineProperty(_mutations, types.SET_IS_SOCKET_OFFLINE, function (state, value) { - state.isSocketOffline = value; - - if (value) { - state.offlineSocketTimestamp = new Date().getTime(); - } else { - state.offlineSocketTimestamp = null; - } -}), _mutations); -var actions = { - setExtensions: async function setExtensions(_ref2, value) { - var commit = _ref2.commit; - commit(types.SET_EXTENSIONS, value); - }, - updateExtension: async function updateExtension(_ref3, value) { - var commit = _ref3.commit; - commit(types.UPDATE_EXTENSIONS, value); - } -}; - -function isCallOnHold() { - var call = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var status = call.callstatus || ''; - status = status.toLowerCase(); - return call.answered && status === HOLD_STATUS; -} - -var getters = { - isSocketOffline: function isSocketOffline(state) { - if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) { - return false; - } - - var now = new Date().getTime(); // show after 1 minute of disconnect - - return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE; - }, - extensionsWithCalls: function extensionsWithCalls(state) { - return function (hideLoggedOutUsers) { - var groupedExtensions = []; - state.extensions.forEach(function (extension) { - if (extension.calls.length > 0) { - if (extension.calls.filter(isCallOnHold).length) { - extension['representativeStatus'] = callStatuses.HOLD; - } else { - extension['representativeStatus'] = callStatuses.CALLING; - } - } - - groupedExtensions.push(extension); - }); - - if (hideLoggedOutUsers) { - return groupedExtensions.filter(function (e) { - return e.representativeStatus !== LOGOUT_STATUS; - }); - } - - return groupedExtensions; - }; - }, - extensionCountByStatus: function extensionCountByStatus(state, getters) { - return function (status) { - return getters.extensionsWithCalls.filter(function (el) { - return el.representativeStatus === status; - }).length || 0; - }; - } -}; -var extensionsModule = { - namespaced: true, - state: state, - mutations: mutations, - actions: actions, - getters: getters -}; - -var _mutations$1; - -var types$1 = { - SET_QUEUES: 'SET_QUEUES', - UPDATE_QUEUES: 'UPDATE_QUEUES' -}; -var state$1 = { - all: [] -}; -var mutations$1 = (_mutations$1 = {}, _defineProperty(_mutations$1, types$1.SET_QUEUES, function (state, value) { - state.all = value; -}), _defineProperty(_mutations$1, types$1.UPDATE_QUEUES, function (state, _ref) { - var index = _ref.index, - queue = _ref.queue; - state.all.splice(index, 1, queue); -}), _mutations$1); -var actions$1 = { - setQueues: async function setQueues(_ref2, value) { - var commit = _ref2.commit; - commit(types$1.SET_QUEUES, value); - }, - updateQueue: async function updateQueue(_ref3, value) { - var commit = _ref3.commit; - commit(types$1.UPDATE_QUEUES, value); - } -}; -var getters$1 = { - queueWithActiveCalls: function queueWithActiveCalls(state) { - return state.all.filter(function (el) { - return el.Calls.length; - }); - }, - allQueueCalls: function allQueueCalls(state, getters) { - var allCalls = []; - getters.queueWithActiveCalls.forEach(function (queue) { - var calls = queue.Calls || []; - allCalls.push.apply(allCalls, _toConsumableArray(calls)); - }); - return allCalls; - }, - filterQueuesByIds: function filterQueuesByIds(state) { - return function (queueIds) { - if (!queueIds || !Array.isArray(queueIds)) { - return state.all; - } - - return state.all.filter(function (e) { - return queueIds.includes(e.QueueID); - }); - }; - } -}; -var queuesModule = { - namespaced: true, - state: state$1, - mutations: mutations$1, - actions: actions$1, - getters: getters$1 -}; - -var _mutations$2; - -var types$2 = { - SET_DIALERS: 'SET_DIALERS', - UPDATE_DIALERS: 'UPDATE_DIALERS' -}; -var state$2 = { - all: [] -}; -var mutations$2 = (_mutations$2 = {}, _defineProperty(_mutations$2, types$2.SET_DIALERS, function (state, value) { - state.all = value; -}), _defineProperty(_mutations$2, types$2.UPDATE_DIALERS, function (state, _ref) { - var index = _ref.index, - dialer = _ref.dialer; - state.all.splice(index, 1, dialer); -}), _mutations$2); -var actions$2 = { - setDialers: async function setDialers(_ref2, value) { - var commit = _ref2.commit; - commit(types$2.SET_DIALERS, value); - }, - updateDialers: async function updateDialers(_ref3, value) { - var commit = _ref3.commit; - commit(types$2.UPDATE_DIALERS, value); - } -}; -var getters$2 = { - getAllDialers: function getAllDialers(state) { - return state.all; - }, - getAllDialersWithTypeIVR: function getAllDialersWithTypeIVR(state) { - return state.all.filter(function (el) { - return el.type === 'IVR'; - }); - }, - getAllDialersWithTypeAUTOMATIC: function getAllDialersWithTypeAUTOMATIC(state) { - return state.all.filter(function (el) { - return el.type === 'Automatic'; - }); - } -}; -var dialersModule = { - namespaced: true, - state: state$2, - mutations: mutations$2, - actions: actions$2, - getters: getters$2 -}; - -function getServerWithHighestPriority(servers) { - // Highest priority server is the one with lowest Priority value - var chosenServer = null; - var maxPriority = Number.MAX_SAFE_INTEGER; - servers.forEach(function (server) { - if (server.Priority < maxPriority) { - maxPriority = server.Priority; - chosenServer = server; - } - }); - return chosenServer; -} -function isValidDate(date) { - return !isNaN(date.getTime()); -} - -async function externalLogin(url, _ref) { - var email = _ref.email, - password = _ref.password, - token = _ref.token, - username = _ref.username; - var body = null; - - if (token) { - body = JSON.stringify({ - token: token - }); - } else if (username) { - body = JSON.stringify({ - username: username, - password: password - }); - } else { - body = JSON.stringify({ - email: email, - pin: password - }); - } - - var res = await fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: body - }); - var data = await res.json(); - - if (data.error) { - throw new Error(data.error); - } - - return data.Data.Socket; -} -function getExternalLoginUrl(baseUrl, loginType) { - if (loginType === 'user') { - return "".concat(baseUrl, "/User"); - } else if (loginType === 'token') { - return "".concat(baseUrl, "/Token"); - } else if (loginType === 'account') { - return "".concat(baseUrl, "/Account"); - } - - return baseUrl; -} -async function refreshToken(url, oldRefreshToken) { - var res = await fetch(url, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - 'Authorization': "Bearer ".concat(oldRefreshToken) - } - }); - return res.json(); -} - -function loadBrowserScript(url) { - return new Promise(function (resolve, reject) { - var script = document.createElement('script'); - script.src = url; - - script.onload = function () { - resolve(); - }; - - script.onerror = function () { - reject(); - }; - - document.body.append(script); - }); -} - -async function loadExtensionScript(url) { - try { - var script = await fetch(url); - script = await script.text(); - eval(script); - } catch (e) { - return Promise.reject(e); - } -} - -async function loadExternalScript(url, environment, getSocketIOFunction) { - if (typeof getSocketIOFunction === 'function') { - self.io = getSocketIOFunction(url); - return; - } - - switch (environment) { - case environments.BROWSER: - await loadBrowserScript(url); - break; - - case environments.CHROME_EXTENSION: - await loadExtensionScript(url); - } -} - -var defaultOptions = { - url: "https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls", - environment: environments.BROWSER, - getSocketIOFunction: undefined, - fallbackServer: { - Domain: 'monitor5.voicenter.co.il', - Priority: 0 - }, - loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login', - refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken', - servers: defaultServers, - token: null, - loginType: 'token', - forceNew: true, - reconnectionDelay: 10000, - reconnectionDelayMax: 10000, - maxReconnectAttempts: 2, - timeout: 10000, - keepAliveTimeout: 60000, - idleInterval: 60000 * 5, - // 5 minutes - protocol: 'https', - transports: ['websocket'], - upgrade: false, - store: null, - extensionsModuleName: 'sdkExtensions', - queuesModuleName: 'sdkQueues', - dialersModuleName: 'sdkDialers', - serverFetchStrategy: 'remote', - // get servers from external url options: remote | static - serverType: null // can be 1 or 2. 2 is used for chrome extension - -}; -var allConnections = []; -var listenersMap = new Map(); - -var EventsSDK = /*#__PURE__*/function () { - function EventsSDK() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, EventsSDK); - - this.options = Object.assign({}, defaultOptions, options); - this.argumentOptions = Object.assign({}, options); - - if (!this.options.loginType) { - throw new Error('A login type should be provided'); - } - - this.Logger = new Logger(this.options); - this.servers = []; - this.server = null; - this.socket = null; - this.connected = false; - this.connectionEstablished = false; - this._lastEventTimestamp = new Date().getTime(); - - this._initReconnectOptions(); - - this._listenersMap = listenersMap; - this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, { - leading: true, - trailing: false - }); - this._lastLoginTimestamp = null; - this._handleLocalEvents = false; - - this._registerExtensionsModule(); - - this._registerQueueModule(); - - this._registerDialerModule(); - } - - _createClass(EventsSDK, [{ - key: "getLastEventTimestamp", - value: function getLastEventTimestamp() { - return this._lastEventTimestamp; - } - }, { - key: "_reSync", - value: function _reSync() { - this.emit(eventTypes.RESYNC, { - cache: false - }); - } - }, { - key: "_registerExtensionsModule", - value: function _registerExtensionsModule() { - var moduleName = this.options.extensionsModuleName || 'sdkExtensions'; - - if (!this._validateStoreModule(moduleName)) { - return; - } - - this.options.store.registerModule(moduleName, extensionsModule); - this._handleLocalEvents = true; - } - }, { - key: "_registerQueueModule", - value: function _registerQueueModule() { - var moduleName = this.options.queuesModuleName || 'sdkQueues'; - - if (!this._validateStoreModule(moduleName)) { - return; - } - - this.options.store.registerModule(moduleName, queuesModule); - this._handleLocalEvents = true; - } - }, { - key: "_registerDialerModule", - value: function _registerDialerModule() { - var moduleName = this.options.dialersModuleName || 'sdkDialers'; - - if (!this._validateStoreModule(moduleName)) { - return; - } - - this.options.store.registerModule(moduleName, dialersModule); - this._handleLocalEvents = true; - } - }, { - key: "_validateStoreModule", - value: function _validateStoreModule(moduleName) { - var store = this.options.store; - - if (!store) { - return false; - } - - if (store.state[moduleName]) { - store.unregisterModule(moduleName); - } - - return true; - } - }, { - key: "_initReconnectOptions", - value: function _initReconnectOptions() { - this.reconnectOptions = { - retryCount: 1, - maxReconnectAttempts: this.options.maxReconnectAttempts, - reconnectionDelay: this.options.reconnectionDelay, - // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min - minReconnectionDelay: this.options.reconnectionDelay, - // 10 seconds - maxReconnectionDelay: 60000 * 5 // 5 minutes - - }; - } - }, { - key: "_onConnect", - value: function _onConnect() { - this._initReconnectDelays(); - - this.connected = true; - this.Logger.log(eventTypes.CONNECT, this.reconnectOptions); - } - }, { - key: "_initReconnectDelays", - value: function _initReconnectDelays() { - this.reconnectOptions.retryCount = 1; - var minReconnectDelay = this.reconnectOptions.minReconnectionDelay; - this.reconnectOptions.reconnectionDelay = minReconnectDelay; - this.socket.io.reconnectionDelay(minReconnectDelay); - this.socket.io.reconnectionDelayMax(minReconnectDelay); - } - }, { - key: "_onConnectError", - value: function _onConnectError(data) { - this._retryConnection('next', true); - - this.connected = false; - this.Logger.log(eventTypes.CONNECT_ERROR, data); - } - }, { - key: "_onError", - value: function _onError(err) { - this.Logger.log(eventTypes.ERROR, err); - } - }, { - key: "_onReconnectFailed", - value: function _onReconnectFailed() { - this._retryConnection('next', true); - - this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions); - } - }, { - key: "_onConnectTimeout", - value: function _onConnectTimeout() { - this._retryConnection('next', true); - - this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions); - } - }, { - key: "_onReconnectAttempt", - value: function _onReconnectAttempt() { - this.connected = false; - - if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) { - this._retryConnection('next', true); - - return; - } - - if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) { - var newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount; - this.reconnectOptions.reconnectionDelay = newDelay; - this.socket.io.reconnectionDelay(newDelay); - this.socket.io.reconnectionDelayMax(newDelay); - } - - this.reconnectOptions.retryCount++; - this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions); - } - }, { - key: "_onDisconnect", - value: function _onDisconnect(reason) { - this.connected = false; - this.Logger.log(eventTypes.DISCONNECT, reason); - - this._connect('next', true); - } - }, { - key: "_onKeepAlive", - value: function _onKeepAlive(data) { - if (_typeof(data) === 'object' && data.errorCode !== 0) { - this._initSocketConnection(); - - return; - } - - if (data && this.connected) { - this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE); - this._lastEventTimestamp = new Date().getTime(); - } else { - this._initSocketConnection(); - } - } - }, { - key: "_onLoginResponse", - value: async function _onLoginResponse(data) { - if (data.Client) { - await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction); - } - - if (data.URL) { - this.server = { - Priority: 0, - Domain: data.URL.replace('https://', '') - }; - } - - if (data.URLList && Array.isArray(data.URLList)) { - this.servers = data.URLList.map(function (url, index) { - return { - Priority: index, - Domain: url.replace('https://', '') - }; - }); - } - - if (data.Token) { - this.options.token = data.Token; - this.token = data.Token; - await this._connect('default', true); - } - - if (data.TokenExpiry) { - this.options.tokenExpiry = data.TokenExpiry; - } - - if (data.RefreshToken) { - this.options.refreshToken = data.RefreshToken; - - this._handleTokenExpiry(); - } - } - }, { - key: "_handleTokenExpiry", - value: function _handleTokenExpiry() { - var _this = this; - - var date = new Date(this.options.tokenExpiry); - - if (!isValidDate(date)) { - return; - } - - var timeout = date.getTime() - new Date().getTime() - 5000; // 5 seconds before expire - - setTimeout(async function () { - var Socket = null; - var res = await refreshToken(_this.options.refreshTokenUrl, _this.options.refreshToken); - - if (res.Data) { - Socket = res.Data.Socket; - return await _this._onLoginResponse(Socket); - } - - throw new Error("Error on refreshToken"); - }, timeout); - } - }, { - key: "_parsePacket", - value: function _parsePacket(packet) { - if (!packet.data) { - return {}; - } - - var name = packet.data[0]; - var data = packet.data[1]; - return { - name: name, - data: data - }; - } - }, { - key: "_connect", - value: async function _connect() { - var server = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default'; - var skipLogin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var serverToConnect = null; - - if (server === 'default') { - serverToConnect = this._findCurrentServer(); - } else if (server === 'next') { - serverToConnect = this._findNextAvailableServer(); - } else if (server === 'prev') { - serverToConnect = this._findMaxPriorityServer(); - } else { - throw new Error("Incorrect 'server' parameter passed to connect function ".concat(server, ". Should be 'default' or 'next'")); - } - - if (!serverToConnect) { - this.server = this._findCurrentServer(); - } - - this._initSocketConnection(); - - this._initSocketEvents(); - - this._initKeepAlive(); - - this._initReconnectDelays(); - - if (skipLogin) { - return; - } - - await this.login(this.options.loginType); - } - }, { - key: "_checkInit", - value: function _checkInit() { - if (!this.connectionEstablished) { - throw new Error('Make sure you call "sdk.init()" before doing other operations.'); - } - } - }, { - key: "_initSocketConnection", - value: function _initSocketConnection() { - var domain = this.server.Domain; - var protocol = this.options.protocol; - var url = "".concat(protocol, "://").concat(domain); - this.Logger.log('Connecting to..', url); - this.closeAllConnections(); - var options = { - reconnection: false, - perMessageDeflate: false, - upgrade: false, - transports: ['websocket'], - debug: false - }; - - if (this.token) { - options.query = { - token: this.token - }; - } - - this.socket = self.io(url, options); - allConnections.push(this.socket); - this.connectionEstablished = true; - } - }, { - key: "_initSocketEvents", - value: function _initSocketEvents() { - var _this2 = this; - - this.socket.on(eventTypes.RECONNECT_ATTEMPT, function (data) { - return _this2._onReconnectAttempt(data); - }).on(eventTypes.RECONNECT_FAILED, function (data) { - return _this2._onReconnectFailed(data); - }).on(eventTypes.CONNECT, function (data) { - return _this2._onConnect(data); - }).on(eventTypes.CONNECT_TIMEOUT, function (data) { - return _this2._onConnectTimeout(data); - }).on(eventTypes.CONNECT_ERROR, function (data) { - return _this2._onConnectError(data); - }).on(eventTypes.RECONNECT_ERROR, function (data) { - return _this2._onReconnectAttempt(data); - }).on(eventTypes.ERROR, function (data) { - return _this2._onError(data); - }).on(eventTypes.DISCONNECT, function (data) { - return _this2._onDisconnect(data); - }); - this.socket.onpacket = this._onEvent.bind(this); - this.socket.onevent = this._onEvent.bind(this); - } - }, { - key: "_initKeepAlive", - value: function _initKeepAlive() { - var _this3 = this; - - if (this.keepAliveInterval) { - clearInterval(this.keepAliveInterval); - } - - if (this.idleInterval) { - clearInterval(this.idleInterval); - } - - this.keepAliveInterval = setInterval(async function () { - var now = new Date().getTime(); - var delta = _this3.options.keepAliveTimeout * 2; - - if (now > _this3.getLastEventTimestamp() + delta) { - await _this3._connect('next', true); - return; - } - - if (!_this3.socket) { - _this3._initSocketConnection(); - - return; - } - - if (now > _this3.getLastEventTimestamp() + _this3.options.keepAliveTimeout) { - _this3.emit(eventTypes.KEEP_ALIVE, _this3.options.token); - - return; - } - }, this.options.keepAliveTimeout); // this.idleInterval = setInterval(() => { - // this.reSync(false) - // }, this.options.idleInterval) - } - }, { - key: "_findCurrentServer", - value: function _findCurrentServer() { - var server = null; - - if (this.servers.length) { - server = this.servers[0]; - } - - this.server = server; - - if (!this.server) { - this.server = this.options.fallbackServer; - } - - return this.server; - } - }, { - key: "_findNextAvailableServer", - value: function _findNextAvailableServer() { - var currentServerPriority = this.server.Priority; - this.Logger.log("Failover -> Trying to find another server"); - - if (currentServerPriority === this.servers.length - 1) { - return this._findMaxPriorityServer(); - } - - var nextServerPriority = currentServerPriority + 1; - var nextServer = this.servers.find(function (server) { - return server.Priority === nextServerPriority; - }); - - if (!nextServer) { - nextServer = this._findMaxPriorityServer(); - - if (!nextServer) { - return; - } - } - - if (this.server.Domain !== nextServer.Domain) { - this.server = nextServer; - return this.server; - } - - this.Logger.log("Failover -> Found new server. Connecting to it...", this.server); - return null; - } - }, { - key: "_findMaxPriorityServer", - value: function _findMaxPriorityServer() { - this.Logger.log("Fallback -> Trying to find previous server", '_findMaxPriorityServer'); - var maxPriorityServer = getServerWithHighestPriority(this.servers); - - if (!this.server) { - this.server = maxPriorityServer; - return this.server; - } - - if (this.server && maxPriorityServer.Domain !== this.server.Domain) { - this.server = maxPriorityServer; - this.Logger.log("Fallback -> Trying to find previous server", this.server); - return this.server; - } - - return null; - } - }, { - key: "_getServers", - value: async function _getServers() { - // Ignore server fetch if we have a list of servers passed via options - if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) { - this.servers = this.argumentOptions.servers; - } - } - }, { - key: "_onEvent", - value: function _onEvent(packet) { - var _this4 = this, - _eventMappings; - - if (!packet.data) { - return; - } - - var evt = this._parsePacket(packet); - - this.Logger.log("New event -> ".concat(evt.name), evt); - this._lastEventTimestamp = new Date().getTime(); - - this._listenersMap.forEach(function (callback, eventName) { - if (eventName === '*') { - callback(evt); - } else if (evt.name === eventName) { - callback(evt); - } - }); - - var eventMappings = (_eventMappings = {}, _defineProperty(_eventMappings, eventTypes.KEEP_ALIVE_RESPONSE, this._onKeepAlive), _defineProperty(_eventMappings, eventTypes.LOGIN_RESPONSE, this._onLoginResponse), _defineProperty(_eventMappings, eventTypes.EXTENSION_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.QUEUES_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.DIALERS_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.LOGIN_STATUS, function () { - if (!_this4.connected) { - _this4._onConnect(); - } - }), _eventMappings); - var eventHandler = eventMappings[evt.name]; - - if (eventHandler && typeof eventHandler === 'function') { - eventHandler.call(this, evt.data); - } - - if (this._handleLocalEvents) { - onNewEvent(Object.assign({ - eventData: evt - }, this.options)); - } - } - /** - * Initializes socket connection. Should be called before any other action - * @return {Promise} - */ - - }, { - key: "init", - value: async function init() { - if (this.connectionEstablished) { - return true; - } - - if (this.socket) { - this.emit(eventTypes.CLOSE); - } - - await this._getToken(); - await this._getTabsSession(); - await this.login(this.options.loginType); - await this._getServers(); - return true; - } - /** - * Sets the monitor code token - * @param token - */ - - }, { - key: "setToken", - value: async function setToken(token) { - this.options.token = token; - this.disconnect(); - await this.init(); - } - /** - * Closes all existing connections - */ - - }, { - key: "closeAllConnections", - value: function closeAllConnections() { - allConnections.forEach(function (connection) { - connection.close(); - connection.disconnect(); - }); - allConnections = []; - - if (this.socket) { - this.socket.disconnect(); - this.socket.close(); - this.socket = null; - } - } - /** - * Disconnects the socket instance from the servers - */ - - }, { - key: "disconnect", - value: function disconnect() { - this._listenersMap = new Map(); - this.closeAllConnections(); - } - /** - * Listens for new events - * @param {string} eventName (name of the event, * for all events) - * @param {function} callback (callback function when even with the specified name is received) - */ - - }, { - key: "on", - value: function on(eventName, callback) { - this._listenersMap.set(eventName, callback); - - this._checkInit(); - } - /** - * Emits an event to the server - * @param {string} eventName (name of the event) - * @param {object} data (data for the event) - */ - - }, { - key: "emit", - value: function emit(eventName) { - var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - this._checkInit(); - - this.Logger.log("EMIT -> ".concat(eventName), data); - this.socket.emit(eventName, data); - } - /** - * Calls resync event to resync socket data - * @param cache - */ - - }, { - key: "reSync", - value: function reSync() { - var cache = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - this.emit(eventTypes.RESYNC, { - cache: cache - }); - } - }, { - key: "setMonitorUrl", - value: async function setMonitorUrl(url) { - var oldUrl = this.options.url; - var oldStrategy = this.options.serverFetchStrategy; - - try { - if (!url) { - return; - } - - this.options.url = url; - this.options.serverFetchStrategy = 'remote'; - await this.init(); - } catch (err) { - this._onError(err); - - this.options.url = oldUrl; - this.options.serverFetchStrategy = oldStrategy; - await this.init(); - } - } - }, { - key: "_getToken", - value: function _getToken() { - var loginType = this.options.loginType; - this.token = this.options.token; - - if (loginType === 'token') { - if (!this.token) { - throw new Error('Token login type expects the token option to be provided'); - } - } - } - }, { - key: "_getTabsSession", - value: function _getTabsSession() { - if (this.options.environment !== environments.BROWSER) { - return Promise.resolve(); - } - - if (!window.sessionStorage.length) { - // Ask other tabs for session storage - localStorage.setItem('getSessionStorage', Date.now()); - } - - window.addEventListener('storage', function (event) { - if (event.key === 'getSessionStorage') { - // Some tab asked for the sessionStorage -> send it - localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); - localStorage.removeItem('sessionStorage'); - } else if (event.key === 'sessionStorage' && !sessionStorage.length) { - // sessionStorage is empty -> fill it - var data = JSON.parse(event.newValue); - - for (var key in data) { - if (data.hasOwnProperty(key)) { - window.sessionStorage.setItem(key, data[key]); - } - } - } - }); - return new Promise(function (resolve) { - return setTimeout(resolve, 200); - }); - } - /** - * Login (logs in based on the token/credentials provided) - * @param type (login type. Can be token/user/code/account) - * @return {Promise} - */ - - }, { - key: "login", - value: function login() { - var _this5 = this; - - var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'token'; - // throttle login for 1 second - var payload = { - token: this.options.token, - email: this.options.email, - username: this.options.username, - password: this.options.password - }; - var key = md5(JSON.stringify(payload)); - var delay = 1000; - - if (this._lastLoginTimestamp + delay > new Date().getTime()) { - return Promise.resolve(); - } - - this._lastLoginTimestamp = new Date().getTime(); - return new Promise(async function (resolve, reject) { - try { - var loginSession = window.sessionStorage.getItem(key); - - if (loginSession) { - loginSession = JSON.parse(loginSession); - - _this5.Logger.log('got data from session', loginSession); - - await _this5._onLoginResponse(loginSession); - return resolve(loginSession); - } - } catch (err) { - _this5.Logger.log('Error on getting session', err); - } - - try { - var url = getExternalLoginUrl(_this5.options.loginUrl, type); - var res = await externalLogin(url, payload); - await _this5._onLoginResponse(res); - - if (_this5.options.environment === environments.BROWSER) { - window.sessionStorage.setItem(key, JSON.stringify(res)); - } - - resolve(res); - } catch (err) { - _this5.servers = _this5.argumentOptions.servers || defaultServers; - reject(err); - } - }); - } - }]); - - return EventsSDK; -}(); - -if (typeof window !== 'undefined') { - // Make it available on window - window.EventsSDK = EventsSDK; -} - -module.exports = EventsSDK; diff --git a/dist/voicenter-events-sdk.esm.js b/dist/voicenter-events-sdk.esm.js deleted file mode 100644 index 2aa17a9e..00000000 --- a/dist/voicenter-events-sdk.esm.js +++ /dev/null @@ -1,1460 +0,0 @@ -import debounce from 'lodash/debounce'; -import md5 from 'js-md5'; - -function _typeof(obj) { - "@babel/helpers - typeof"; - - return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }, _typeof(obj); -} - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -var eventTypes = { - LOGIN_STATUS: 'loginStatus', - LOGIN: 'login', - LOGIN_USER: 'loginUser', - LOGIN_CODE: 'loginUserCode', - LOGIN_ACCOUNT: 'loginAccount', - LOGIN_RESPONSE: 'loginResponse', - QUEUE_EVENT: 'QueueEvent', - QUEUES_UPDATED: 'QueuesUpdated', - DIALERS_UPDATED: 'DialersUpdated', - EXTENSION_EVENT: 'ExtensionEvent', - EXTENSION_UPDATED: 'ExtensionsUpdated', - ALL_EXTENSION_STATUS: 'AllExtensionsStatus', - CONNECT: 'connect', - CONNECT_ERROR: 'connect_error', - CONNECT_TIMEOUT: 'connect_timeout', - DISCONNECT: 'disconnect', - PONG: 'pong', - RECONNECT: 'reconnect', - RECONNECT_ATTEMPT: 'reconnect_attempt', - RESYNC: 'resync', - RECONNECTING: 'reconnecting', - RECONNECT_ERROR: 'reconnect_error', - RECONNECT_FAILED: 'reconnect_failed', - KEEP_ALIVE: 'keepalive', - KEEP_ALIVE_RESPONSE: 'keepaliveResponse', - CLOSE: 'closeme', - ERROR: 'error', - ALL_DIALERS_STATUS: 'AllDialersStatus', - DIALER_EVENT: 'DialerEvent' -}; - -var environments = { - BROWSER: 'browser', - CHROME_EXTENSION: 'chrome-extension' -}; - -var defaultServers = [{ - 'URLID': 59, - 'Priority': 5, - 'Version': 2, - 'Domain': 'monitor1.voicenter.co' -}, { - 'URLID': 3, - 'Priority': 4, - 'Version': 2, - 'Domain': 'monitor3.voicenter.co.il' -}, { - 'URLID': 4, - 'Priority': 3, - 'Version': 2, - 'Domain': 'monitor4.voicenter.co.il' -}, { - 'URLID': 11, - 'Priority': 2, - 'Version': 2, - 'Domain': 'monitor11.voicenter.co' -}, { - 'URLID': 5, - 'Priority': 0, - 'Version': 2, - 'Domain': 'monitor5.voicenter.co.il' -}]; - -var Logger = /*#__PURE__*/function () { - function Logger() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Logger); - - this.debug = options.debug; - } - /** - * Logs to console a colored message - * @param message - * @param data - * @private - */ - - - _createClass(Logger, [{ - key: "_log", - value: function _log(message, data) { - var toLog = data ? "".concat(message, ", %c Data -> ").concat(JSON.stringify(data)) : "".concat(message); - var now = new Date().toUTCString(); - console.log("%c ".concat(now, ": %c ").concat(toLog), "color: #276749;", "color: #4299e1;", "color: #2c3e50;"); - } - /** - * Logs to console a colored message - * @param message - * @param data - * @private - */ - - }, { - key: "_error", - value: function _error(message, data) { - var toLog = data ? "".concat(message, ", Data -> ").concat(JSON.stringify(data)) : "".concat(message); - var now = new Date().toUTCString(); - console.error("".concat(now, ": ").concat(toLog)); - } - /** - * Logs messages in case debug mode is set - * @param message - * @param data - */ - - }, { - key: "log", - value: function log(message, data) { - if (this.debug) { - if (message && !data) { - this._log(message); - } else { - this._log(message, data); - } - } - } - /** - * Logs error messages in case debug mode is set - * @param message - * @param data - */ - - }, { - key: "error", - value: function error(message, data) { - if (this.debug) { - if (message && !data) { - this._error(message); - } else { - this._error(message, data); - } - } - } - }]); - - return Logger; -}(); - -var sdkEventReasons = { - NEWCALL: 'NEWCALL', - ANSWER: 'ANSWER', - HANGUP: 'HANGUP' -}; -var offlineEvents = [eventTypes.CONNECT_ERROR, eventTypes.CONNECT_TIMEOUT, eventTypes.DISCONNECT, eventTypes.RECONNECT_ATTEMPT, eventTypes.RECONNECTING, eventTypes.RECONNECT_ERROR, eventTypes.RECONNECT_FAILED, sdkEventReasons.CLOSE]; - -function isSocketOffline(event) { - var name = event.name; - return offlineEvents.includes(name); -} - -function onNewEvent(_ref) { - var eventData = _ref.eventData, - store = _ref.store, - extensionsModuleName = _ref.extensionsModuleName, - queuesModuleName = _ref.queuesModuleName, - dialersModuleName = _ref.dialersModuleName; - var name = eventData.name, - data = eventData.data; - store.commit("".concat(extensionsModuleName, "/SET_IS_SOCKET_OFFLINE"), isSocketOffline(eventData)); - - switch (name) { - case eventTypes.ALL_EXTENSION_STATUS: - store.dispatch("".concat(extensionsModuleName, "/setExtensions"), data.extensions); - break; - - case eventTypes.EXTENSION_EVENT: - var extension = data.data; // Event reason: NEWCALL/ANSWER/HANGUP - - extension['lastEvent'] = { - reason: data.reason, - ivrid: data.ivruniqueid - }; - var extensions = store.state[extensionsModuleName].extensions; - var extensionIndex = extensions.findIndex(function (e) { - return e.userID === extension.userID; - }); - - if (extensionIndex !== -1) { - store.dispatch("".concat(extensionsModuleName, "/updateExtension"), { - index: extensionIndex, - extension: extension - }); - } - - break; - - case eventTypes.LOGIN_STATUS: - store.commit("".concat(extensionsModuleName, "/SET_SERVER_TIME"), data); - store.dispatch("".concat(queuesModuleName, "/setQueues"), data.queues); - break; - - case eventTypes.QUEUE_EVENT: - var queue = data.data; - var allQueues = store.state[queuesModuleName].all || []; - var queueIndex = allQueues.findIndex(function (e) { - return e.QueueID === queue.QueueID; - }); - - if (queueIndex !== -1) { - store.dispatch("".concat(queuesModuleName, "/updateQueue"), { - index: queueIndex, - queue: queue - }); - } - - break; - - case eventTypes.ALL_DIALERS_STATUS: - store.dispatch("".concat(dialersModuleName, "/setDialers"), data.dialers); - break; - - case eventTypes.DIALER_EVENT: - var dialer = data.data; - var allDialers = store.state[dialersModuleName].all || []; - var dialerIndex = allDialers.findIndex(function (e) { - return e.campaignID === dialer.campaignID; - }); - - if (dialerIndex !== -1) { - store.dispatch("".concat(dialersModuleName, "/updateDialers"), { - index: dialerIndex, - dialer: dialer - }); - } - - break; - } -} - -var callStatuses = { - CALLING: 100, - HOLD: 101 -}; - -var _mutations; -var ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000; -var MINUTE = 60 * 1000; -var LOGOUT_STATUS = 2; -var HOLD_STATUS = 'hold'; -var types = { - SET_EXTENSIONS: 'SET_EXTENSIONS', - UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS', - SET_SERVER_TIME: 'SET_SERVER_TIME', - SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE' -}; -var state = { - extensions: [], - serverTime: null, - serverDelta: 0, - serverOffset: 0, - isSocketOffline: false, - offlineSocketTimestamp: null -}; -var mutations = (_mutations = {}, _defineProperty(_mutations, types.SET_EXTENSIONS, function (state, value) { - state.extensions = value; -}), _defineProperty(_mutations, types.UPDATE_EXTENSIONS, function (state, _ref) { - var index = _ref.index, - extension = _ref.extension; - state.extensions.splice(index, 1, extension); -}), _defineProperty(_mutations, types.SET_SERVER_TIME, function (state, value) { - state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET; - state.serverTime = value.servertime * 1000 - state.serverOffset; - state.serverDelta = new Date().getTime() - state.serverTime; -}), _defineProperty(_mutations, types.SET_IS_SOCKET_OFFLINE, function (state, value) { - state.isSocketOffline = value; - - if (value) { - state.offlineSocketTimestamp = new Date().getTime(); - } else { - state.offlineSocketTimestamp = null; - } -}), _mutations); -var actions = { - setExtensions: async function setExtensions(_ref2, value) { - var commit = _ref2.commit; - commit(types.SET_EXTENSIONS, value); - }, - updateExtension: async function updateExtension(_ref3, value) { - var commit = _ref3.commit; - commit(types.UPDATE_EXTENSIONS, value); - } -}; - -function isCallOnHold() { - var call = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var status = call.callstatus || ''; - status = status.toLowerCase(); - return call.answered && status === HOLD_STATUS; -} - -var getters = { - isSocketOffline: function isSocketOffline(state) { - if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) { - return false; - } - - var now = new Date().getTime(); // show after 1 minute of disconnect - - return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE; - }, - extensionsWithCalls: function extensionsWithCalls(state) { - return function (hideLoggedOutUsers) { - var groupedExtensions = []; - state.extensions.forEach(function (extension) { - if (extension.calls.length > 0) { - if (extension.calls.filter(isCallOnHold).length) { - extension['representativeStatus'] = callStatuses.HOLD; - } else { - extension['representativeStatus'] = callStatuses.CALLING; - } - } - - groupedExtensions.push(extension); - }); - - if (hideLoggedOutUsers) { - return groupedExtensions.filter(function (e) { - return e.representativeStatus !== LOGOUT_STATUS; - }); - } - - return groupedExtensions; - }; - }, - extensionCountByStatus: function extensionCountByStatus(state, getters) { - return function (status) { - return getters.extensionsWithCalls.filter(function (el) { - return el.representativeStatus === status; - }).length || 0; - }; - } -}; -var extensionsModule = { - namespaced: true, - state: state, - mutations: mutations, - actions: actions, - getters: getters -}; - -var _mutations$1; - -var types$1 = { - SET_QUEUES: 'SET_QUEUES', - UPDATE_QUEUES: 'UPDATE_QUEUES' -}; -var state$1 = { - all: [] -}; -var mutations$1 = (_mutations$1 = {}, _defineProperty(_mutations$1, types$1.SET_QUEUES, function (state, value) { - state.all = value; -}), _defineProperty(_mutations$1, types$1.UPDATE_QUEUES, function (state, _ref) { - var index = _ref.index, - queue = _ref.queue; - state.all.splice(index, 1, queue); -}), _mutations$1); -var actions$1 = { - setQueues: async function setQueues(_ref2, value) { - var commit = _ref2.commit; - commit(types$1.SET_QUEUES, value); - }, - updateQueue: async function updateQueue(_ref3, value) { - var commit = _ref3.commit; - commit(types$1.UPDATE_QUEUES, value); - } -}; -var getters$1 = { - queueWithActiveCalls: function queueWithActiveCalls(state) { - return state.all.filter(function (el) { - return el.Calls.length; - }); - }, - allQueueCalls: function allQueueCalls(state, getters) { - var allCalls = []; - getters.queueWithActiveCalls.forEach(function (queue) { - var calls = queue.Calls || []; - allCalls.push.apply(allCalls, _toConsumableArray(calls)); - }); - return allCalls; - }, - filterQueuesByIds: function filterQueuesByIds(state) { - return function (queueIds) { - if (!queueIds || !Array.isArray(queueIds)) { - return state.all; - } - - return state.all.filter(function (e) { - return queueIds.includes(e.QueueID); - }); - }; - } -}; -var queuesModule = { - namespaced: true, - state: state$1, - mutations: mutations$1, - actions: actions$1, - getters: getters$1 -}; - -var _mutations$2; - -var types$2 = { - SET_DIALERS: 'SET_DIALERS', - UPDATE_DIALERS: 'UPDATE_DIALERS' -}; -var state$2 = { - all: [] -}; -var mutations$2 = (_mutations$2 = {}, _defineProperty(_mutations$2, types$2.SET_DIALERS, function (state, value) { - state.all = value; -}), _defineProperty(_mutations$2, types$2.UPDATE_DIALERS, function (state, _ref) { - var index = _ref.index, - dialer = _ref.dialer; - state.all.splice(index, 1, dialer); -}), _mutations$2); -var actions$2 = { - setDialers: async function setDialers(_ref2, value) { - var commit = _ref2.commit; - commit(types$2.SET_DIALERS, value); - }, - updateDialers: async function updateDialers(_ref3, value) { - var commit = _ref3.commit; - commit(types$2.UPDATE_DIALERS, value); - } -}; -var getters$2 = { - getAllDialers: function getAllDialers(state) { - return state.all; - }, - getAllDialersWithTypeIVR: function getAllDialersWithTypeIVR(state) { - return state.all.filter(function (el) { - return el.type === 'IVR'; - }); - }, - getAllDialersWithTypeAUTOMATIC: function getAllDialersWithTypeAUTOMATIC(state) { - return state.all.filter(function (el) { - return el.type === 'Automatic'; - }); - } -}; -var dialersModule = { - namespaced: true, - state: state$2, - mutations: mutations$2, - actions: actions$2, - getters: getters$2 -}; - -function getServerWithHighestPriority(servers) { - // Highest priority server is the one with lowest Priority value - var chosenServer = null; - var maxPriority = Number.MAX_SAFE_INTEGER; - servers.forEach(function (server) { - if (server.Priority < maxPriority) { - maxPriority = server.Priority; - chosenServer = server; - } - }); - return chosenServer; -} -function isValidDate(date) { - return !isNaN(date.getTime()); -} - -async function externalLogin(url, _ref) { - var email = _ref.email, - password = _ref.password, - token = _ref.token, - username = _ref.username; - var body = null; - - if (token) { - body = JSON.stringify({ - token: token - }); - } else if (username) { - body = JSON.stringify({ - username: username, - password: password - }); - } else { - body = JSON.stringify({ - email: email, - pin: password - }); - } - - var res = await fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: body - }); - var data = await res.json(); - - if (data.error) { - throw new Error(data.error); - } - - return data.Data.Socket; -} -function getExternalLoginUrl(baseUrl, loginType) { - if (loginType === 'user') { - return "".concat(baseUrl, "/User"); - } else if (loginType === 'token') { - return "".concat(baseUrl, "/Token"); - } else if (loginType === 'account') { - return "".concat(baseUrl, "/Account"); - } - - return baseUrl; -} -async function refreshToken(url, oldRefreshToken) { - var res = await fetch(url, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - 'Authorization': "Bearer ".concat(oldRefreshToken) - } - }); - return res.json(); -} - -function loadBrowserScript(url) { - return new Promise(function (resolve, reject) { - var script = document.createElement('script'); - script.src = url; - - script.onload = function () { - resolve(); - }; - - script.onerror = function () { - reject(); - }; - - document.body.append(script); - }); -} - -async function loadExtensionScript(url) { - try { - var script = await fetch(url); - script = await script.text(); - eval(script); - } catch (e) { - return Promise.reject(e); - } -} - -async function loadExternalScript(url, environment, getSocketIOFunction) { - if (typeof getSocketIOFunction === 'function') { - self.io = getSocketIOFunction(url); - return; - } - - switch (environment) { - case environments.BROWSER: - await loadBrowserScript(url); - break; - - case environments.CHROME_EXTENSION: - await loadExtensionScript(url); - } -} - -var defaultOptions = { - url: "https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls", - environment: environments.BROWSER, - getSocketIOFunction: undefined, - fallbackServer: { - Domain: 'monitor5.voicenter.co.il', - Priority: 0 - }, - loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login', - refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken', - servers: defaultServers, - token: null, - loginType: 'token', - forceNew: true, - reconnectionDelay: 10000, - reconnectionDelayMax: 10000, - maxReconnectAttempts: 2, - timeout: 10000, - keepAliveTimeout: 60000, - idleInterval: 60000 * 5, - // 5 minutes - protocol: 'https', - transports: ['websocket'], - upgrade: false, - store: null, - extensionsModuleName: 'sdkExtensions', - queuesModuleName: 'sdkQueues', - dialersModuleName: 'sdkDialers', - serverFetchStrategy: 'remote', - // get servers from external url options: remote | static - serverType: null // can be 1 or 2. 2 is used for chrome extension - -}; -var allConnections = []; -var listenersMap = new Map(); - -var EventsSDK = /*#__PURE__*/function () { - function EventsSDK() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, EventsSDK); - - this.options = Object.assign({}, defaultOptions, options); - this.argumentOptions = Object.assign({}, options); - - if (!this.options.loginType) { - throw new Error('A login type should be provided'); - } - - this.Logger = new Logger(this.options); - this.servers = []; - this.server = null; - this.socket = null; - this.connected = false; - this.connectionEstablished = false; - this._lastEventTimestamp = new Date().getTime(); - - this._initReconnectOptions(); - - this._listenersMap = listenersMap; - this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, { - leading: true, - trailing: false - }); - this._lastLoginTimestamp = null; - this._handleLocalEvents = false; - - this._registerExtensionsModule(); - - this._registerQueueModule(); - - this._registerDialerModule(); - } - - _createClass(EventsSDK, [{ - key: "getLastEventTimestamp", - value: function getLastEventTimestamp() { - return this._lastEventTimestamp; - } - }, { - key: "_reSync", - value: function _reSync() { - this.emit(eventTypes.RESYNC, { - cache: false - }); - } - }, { - key: "_registerExtensionsModule", - value: function _registerExtensionsModule() { - var moduleName = this.options.extensionsModuleName || 'sdkExtensions'; - - if (!this._validateStoreModule(moduleName)) { - return; - } - - this.options.store.registerModule(moduleName, extensionsModule); - this._handleLocalEvents = true; - } - }, { - key: "_registerQueueModule", - value: function _registerQueueModule() { - var moduleName = this.options.queuesModuleName || 'sdkQueues'; - - if (!this._validateStoreModule(moduleName)) { - return; - } - - this.options.store.registerModule(moduleName, queuesModule); - this._handleLocalEvents = true; - } - }, { - key: "_registerDialerModule", - value: function _registerDialerModule() { - var moduleName = this.options.dialersModuleName || 'sdkDialers'; - - if (!this._validateStoreModule(moduleName)) { - return; - } - - this.options.store.registerModule(moduleName, dialersModule); - this._handleLocalEvents = true; - } - }, { - key: "_validateStoreModule", - value: function _validateStoreModule(moduleName) { - var store = this.options.store; - - if (!store) { - return false; - } - - if (store.state[moduleName]) { - store.unregisterModule(moduleName); - } - - return true; - } - }, { - key: "_initReconnectOptions", - value: function _initReconnectOptions() { - this.reconnectOptions = { - retryCount: 1, - maxReconnectAttempts: this.options.maxReconnectAttempts, - reconnectionDelay: this.options.reconnectionDelay, - // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min - minReconnectionDelay: this.options.reconnectionDelay, - // 10 seconds - maxReconnectionDelay: 60000 * 5 // 5 minutes - - }; - } - }, { - key: "_onConnect", - value: function _onConnect() { - this._initReconnectDelays(); - - this.connected = true; - this.Logger.log(eventTypes.CONNECT, this.reconnectOptions); - } - }, { - key: "_initReconnectDelays", - value: function _initReconnectDelays() { - this.reconnectOptions.retryCount = 1; - var minReconnectDelay = this.reconnectOptions.minReconnectionDelay; - this.reconnectOptions.reconnectionDelay = minReconnectDelay; - this.socket.io.reconnectionDelay(minReconnectDelay); - this.socket.io.reconnectionDelayMax(minReconnectDelay); - } - }, { - key: "_onConnectError", - value: function _onConnectError(data) { - this._retryConnection('next', true); - - this.connected = false; - this.Logger.log(eventTypes.CONNECT_ERROR, data); - } - }, { - key: "_onError", - value: function _onError(err) { - this.Logger.log(eventTypes.ERROR, err); - } - }, { - key: "_onReconnectFailed", - value: function _onReconnectFailed() { - this._retryConnection('next', true); - - this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions); - } - }, { - key: "_onConnectTimeout", - value: function _onConnectTimeout() { - this._retryConnection('next', true); - - this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions); - } - }, { - key: "_onReconnectAttempt", - value: function _onReconnectAttempt() { - this.connected = false; - - if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) { - this._retryConnection('next', true); - - return; - } - - if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) { - var newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount; - this.reconnectOptions.reconnectionDelay = newDelay; - this.socket.io.reconnectionDelay(newDelay); - this.socket.io.reconnectionDelayMax(newDelay); - } - - this.reconnectOptions.retryCount++; - this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions); - } - }, { - key: "_onDisconnect", - value: function _onDisconnect(reason) { - this.connected = false; - this.Logger.log(eventTypes.DISCONNECT, reason); - - this._connect('next', true); - } - }, { - key: "_onKeepAlive", - value: function _onKeepAlive(data) { - if (_typeof(data) === 'object' && data.errorCode !== 0) { - this._initSocketConnection(); - - return; - } - - if (data && this.connected) { - this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE); - this._lastEventTimestamp = new Date().getTime(); - } else { - this._initSocketConnection(); - } - } - }, { - key: "_onLoginResponse", - value: async function _onLoginResponse(data) { - if (data.Client) { - await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction); - } - - if (data.URL) { - this.server = { - Priority: 0, - Domain: data.URL.replace('https://', '') - }; - } - - if (data.URLList && Array.isArray(data.URLList)) { - this.servers = data.URLList.map(function (url, index) { - return { - Priority: index, - Domain: url.replace('https://', '') - }; - }); - } - - if (data.Token) { - this.options.token = data.Token; - this.token = data.Token; - await this._connect('default', true); - } - - if (data.TokenExpiry) { - this.options.tokenExpiry = data.TokenExpiry; - } - - if (data.RefreshToken) { - this.options.refreshToken = data.RefreshToken; - - this._handleTokenExpiry(); - } - } - }, { - key: "_handleTokenExpiry", - value: function _handleTokenExpiry() { - var _this = this; - - var date = new Date(this.options.tokenExpiry); - - if (!isValidDate(date)) { - return; - } - - var timeout = date.getTime() - new Date().getTime() - 5000; // 5 seconds before expire - - setTimeout(async function () { - var Socket = null; - var res = await refreshToken(_this.options.refreshTokenUrl, _this.options.refreshToken); - - if (res.Data) { - Socket = res.Data.Socket; - return await _this._onLoginResponse(Socket); - } - - throw new Error("Error on refreshToken"); - }, timeout); - } - }, { - key: "_parsePacket", - value: function _parsePacket(packet) { - if (!packet.data) { - return {}; - } - - var name = packet.data[0]; - var data = packet.data[1]; - return { - name: name, - data: data - }; - } - }, { - key: "_connect", - value: async function _connect() { - var server = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default'; - var skipLogin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var serverToConnect = null; - - if (server === 'default') { - serverToConnect = this._findCurrentServer(); - } else if (server === 'next') { - serverToConnect = this._findNextAvailableServer(); - } else if (server === 'prev') { - serverToConnect = this._findMaxPriorityServer(); - } else { - throw new Error("Incorrect 'server' parameter passed to connect function ".concat(server, ". Should be 'default' or 'next'")); - } - - if (!serverToConnect) { - this.server = this._findCurrentServer(); - } - - this._initSocketConnection(); - - this._initSocketEvents(); - - this._initKeepAlive(); - - this._initReconnectDelays(); - - if (skipLogin) { - return; - } - - await this.login(this.options.loginType); - } - }, { - key: "_checkInit", - value: function _checkInit() { - if (!this.connectionEstablished) { - throw new Error('Make sure you call "sdk.init()" before doing other operations.'); - } - } - }, { - key: "_initSocketConnection", - value: function _initSocketConnection() { - var domain = this.server.Domain; - var protocol = this.options.protocol; - var url = "".concat(protocol, "://").concat(domain); - this.Logger.log('Connecting to..', url); - this.closeAllConnections(); - var options = { - reconnection: false, - perMessageDeflate: false, - upgrade: false, - transports: ['websocket'], - debug: false - }; - - if (this.token) { - options.query = { - token: this.token - }; - } - - this.socket = self.io(url, options); - allConnections.push(this.socket); - this.connectionEstablished = true; - } - }, { - key: "_initSocketEvents", - value: function _initSocketEvents() { - var _this2 = this; - - this.socket.on(eventTypes.RECONNECT_ATTEMPT, function (data) { - return _this2._onReconnectAttempt(data); - }).on(eventTypes.RECONNECT_FAILED, function (data) { - return _this2._onReconnectFailed(data); - }).on(eventTypes.CONNECT, function (data) { - return _this2._onConnect(data); - }).on(eventTypes.CONNECT_TIMEOUT, function (data) { - return _this2._onConnectTimeout(data); - }).on(eventTypes.CONNECT_ERROR, function (data) { - return _this2._onConnectError(data); - }).on(eventTypes.RECONNECT_ERROR, function (data) { - return _this2._onReconnectAttempt(data); - }).on(eventTypes.ERROR, function (data) { - return _this2._onError(data); - }).on(eventTypes.DISCONNECT, function (data) { - return _this2._onDisconnect(data); - }); - this.socket.onpacket = this._onEvent.bind(this); - this.socket.onevent = this._onEvent.bind(this); - } - }, { - key: "_initKeepAlive", - value: function _initKeepAlive() { - var _this3 = this; - - if (this.keepAliveInterval) { - clearInterval(this.keepAliveInterval); - } - - if (this.idleInterval) { - clearInterval(this.idleInterval); - } - - this.keepAliveInterval = setInterval(async function () { - var now = new Date().getTime(); - var delta = _this3.options.keepAliveTimeout * 2; - - if (now > _this3.getLastEventTimestamp() + delta) { - await _this3._connect('next', true); - return; - } - - if (!_this3.socket) { - _this3._initSocketConnection(); - - return; - } - - if (now > _this3.getLastEventTimestamp() + _this3.options.keepAliveTimeout) { - _this3.emit(eventTypes.KEEP_ALIVE, _this3.options.token); - - return; - } - }, this.options.keepAliveTimeout); // this.idleInterval = setInterval(() => { - // this.reSync(false) - // }, this.options.idleInterval) - } - }, { - key: "_findCurrentServer", - value: function _findCurrentServer() { - var server = null; - - if (this.servers.length) { - server = this.servers[0]; - } - - this.server = server; - - if (!this.server) { - this.server = this.options.fallbackServer; - } - - return this.server; - } - }, { - key: "_findNextAvailableServer", - value: function _findNextAvailableServer() { - var currentServerPriority = this.server.Priority; - this.Logger.log("Failover -> Trying to find another server"); - - if (currentServerPriority === this.servers.length - 1) { - return this._findMaxPriorityServer(); - } - - var nextServerPriority = currentServerPriority + 1; - var nextServer = this.servers.find(function (server) { - return server.Priority === nextServerPriority; - }); - - if (!nextServer) { - nextServer = this._findMaxPriorityServer(); - - if (!nextServer) { - return; - } - } - - if (this.server.Domain !== nextServer.Domain) { - this.server = nextServer; - return this.server; - } - - this.Logger.log("Failover -> Found new server. Connecting to it...", this.server); - return null; - } - }, { - key: "_findMaxPriorityServer", - value: function _findMaxPriorityServer() { - this.Logger.log("Fallback -> Trying to find previous server", '_findMaxPriorityServer'); - var maxPriorityServer = getServerWithHighestPriority(this.servers); - - if (!this.server) { - this.server = maxPriorityServer; - return this.server; - } - - if (this.server && maxPriorityServer.Domain !== this.server.Domain) { - this.server = maxPriorityServer; - this.Logger.log("Fallback -> Trying to find previous server", this.server); - return this.server; - } - - return null; - } - }, { - key: "_getServers", - value: async function _getServers() { - // Ignore server fetch if we have a list of servers passed via options - if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) { - this.servers = this.argumentOptions.servers; - } - } - }, { - key: "_onEvent", - value: function _onEvent(packet) { - var _this4 = this, - _eventMappings; - - if (!packet.data) { - return; - } - - var evt = this._parsePacket(packet); - - this.Logger.log("New event -> ".concat(evt.name), evt); - this._lastEventTimestamp = new Date().getTime(); - - this._listenersMap.forEach(function (callback, eventName) { - if (eventName === '*') { - callback(evt); - } else if (evt.name === eventName) { - callback(evt); - } - }); - - var eventMappings = (_eventMappings = {}, _defineProperty(_eventMappings, eventTypes.KEEP_ALIVE_RESPONSE, this._onKeepAlive), _defineProperty(_eventMappings, eventTypes.LOGIN_RESPONSE, this._onLoginResponse), _defineProperty(_eventMappings, eventTypes.EXTENSION_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.QUEUES_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.DIALERS_UPDATED, this._reSync), _defineProperty(_eventMappings, eventTypes.LOGIN_STATUS, function () { - if (!_this4.connected) { - _this4._onConnect(); - } - }), _eventMappings); - var eventHandler = eventMappings[evt.name]; - - if (eventHandler && typeof eventHandler === 'function') { - eventHandler.call(this, evt.data); - } - - if (this._handleLocalEvents) { - onNewEvent(Object.assign({ - eventData: evt - }, this.options)); - } - } - /** - * Initializes socket connection. Should be called before any other action - * @return {Promise} - */ - - }, { - key: "init", - value: async function init() { - if (this.connectionEstablished) { - return true; - } - - if (this.socket) { - this.emit(eventTypes.CLOSE); - } - - await this._getToken(); - await this._getTabsSession(); - await this.login(this.options.loginType); - await this._getServers(); - return true; - } - /** - * Sets the monitor code token - * @param token - */ - - }, { - key: "setToken", - value: async function setToken(token) { - this.options.token = token; - this.disconnect(); - await this.init(); - } - /** - * Closes all existing connections - */ - - }, { - key: "closeAllConnections", - value: function closeAllConnections() { - allConnections.forEach(function (connection) { - connection.close(); - connection.disconnect(); - }); - allConnections = []; - - if (this.socket) { - this.socket.disconnect(); - this.socket.close(); - this.socket = null; - } - } - /** - * Disconnects the socket instance from the servers - */ - - }, { - key: "disconnect", - value: function disconnect() { - this._listenersMap = new Map(); - this.closeAllConnections(); - } - /** - * Listens for new events - * @param {string} eventName (name of the event, * for all events) - * @param {function} callback (callback function when even with the specified name is received) - */ - - }, { - key: "on", - value: function on(eventName, callback) { - this._listenersMap.set(eventName, callback); - - this._checkInit(); - } - /** - * Emits an event to the server - * @param {string} eventName (name of the event) - * @param {object} data (data for the event) - */ - - }, { - key: "emit", - value: function emit(eventName) { - var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - this._checkInit(); - - this.Logger.log("EMIT -> ".concat(eventName), data); - this.socket.emit(eventName, data); - } - /** - * Calls resync event to resync socket data - * @param cache - */ - - }, { - key: "reSync", - value: function reSync() { - var cache = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - this.emit(eventTypes.RESYNC, { - cache: cache - }); - } - }, { - key: "setMonitorUrl", - value: async function setMonitorUrl(url) { - var oldUrl = this.options.url; - var oldStrategy = this.options.serverFetchStrategy; - - try { - if (!url) { - return; - } - - this.options.url = url; - this.options.serverFetchStrategy = 'remote'; - await this.init(); - } catch (err) { - this._onError(err); - - this.options.url = oldUrl; - this.options.serverFetchStrategy = oldStrategy; - await this.init(); - } - } - }, { - key: "_getToken", - value: function _getToken() { - var loginType = this.options.loginType; - this.token = this.options.token; - - if (loginType === 'token') { - if (!this.token) { - throw new Error('Token login type expects the token option to be provided'); - } - } - } - }, { - key: "_getTabsSession", - value: function _getTabsSession() { - if (this.options.environment !== environments.BROWSER) { - return Promise.resolve(); - } - - if (!window.sessionStorage.length) { - // Ask other tabs for session storage - localStorage.setItem('getSessionStorage', Date.now()); - } - - window.addEventListener('storage', function (event) { - if (event.key === 'getSessionStorage') { - // Some tab asked for the sessionStorage -> send it - localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); - localStorage.removeItem('sessionStorage'); - } else if (event.key === 'sessionStorage' && !sessionStorage.length) { - // sessionStorage is empty -> fill it - var data = JSON.parse(event.newValue); - - for (var key in data) { - if (data.hasOwnProperty(key)) { - window.sessionStorage.setItem(key, data[key]); - } - } - } - }); - return new Promise(function (resolve) { - return setTimeout(resolve, 200); - }); - } - /** - * Login (logs in based on the token/credentials provided) - * @param type (login type. Can be token/user/code/account) - * @return {Promise} - */ - - }, { - key: "login", - value: function login() { - var _this5 = this; - - var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'token'; - // throttle login for 1 second - var payload = { - token: this.options.token, - email: this.options.email, - username: this.options.username, - password: this.options.password - }; - var key = md5(JSON.stringify(payload)); - var delay = 1000; - - if (this._lastLoginTimestamp + delay > new Date().getTime()) { - return Promise.resolve(); - } - - this._lastLoginTimestamp = new Date().getTime(); - return new Promise(async function (resolve, reject) { - try { - var loginSession = window.sessionStorage.getItem(key); - - if (loginSession) { - loginSession = JSON.parse(loginSession); - - _this5.Logger.log('got data from session', loginSession); - - await _this5._onLoginResponse(loginSession); - return resolve(loginSession); - } - } catch (err) { - _this5.Logger.log('Error on getting session', err); - } - - try { - var url = getExternalLoginUrl(_this5.options.loginUrl, type); - var res = await externalLogin(url, payload); - await _this5._onLoginResponse(res); - - if (_this5.options.environment === environments.BROWSER) { - window.sessionStorage.setItem(key, JSON.stringify(res)); - } - - resolve(res); - } catch (err) { - _this5.servers = _this5.argumentOptions.servers || defaultServers; - reject(err); - } - }); - } - }]); - - return EventsSDK; -}(); - -if (typeof window !== 'undefined') { - // Make it available on window - window.EventsSDK = EventsSDK; -} - -export default EventsSDK; diff --git a/dist/voicenter-events-sdk.umd.js b/dist/voicenter-events-sdk.umd.js deleted file mode 100644 index 44a825a9..00000000 --- a/dist/voicenter-events-sdk.umd.js +++ /dev/null @@ -1,12 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).VoicenterEventsSDK=t()}(this,(function(){"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};_classCallCheck(this,e),this.debug=t.debug}return _createClass(e,[{key:"_log",value:function(e,t){var n=t?"".concat(e,", %c Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.log("%c ".concat(o,": %c ").concat(n),"color: #276749;","color: #4299e1;","color: #2c3e50;")}},{key:"_error",value:function(e,t){var n=t?"".concat(e,", Data -> ").concat(JSON.stringify(t)):"".concat(e),o=(new Date).toUTCString();console.error("".concat(o,": ").concat(n))}},{key:"log",value:function(e,t){this.debug&&(e&&!t?this._log(e):this._log(e,t))}},{key:"error",value:function(e,t){this.debug&&(e&&!t?this._error(e):this._error(e,t))}}]),e}();function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}var isObject_1=isObject,commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(e,t){return e(t={exports:{}},t.exports),t.exports}var freeGlobal="object"==typeof commonjsGlobal&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal,_freeGlobal=freeGlobal,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=_freeGlobal||freeSelf||Function("return this")(),_root=root,now=function(){return _root.Date.now()},now_1=now,reWhitespace=/\s/;function trimmedEndIndex(e){for(var t=e.length;t--&&reWhitespace.test(e.charAt(t)););return t}var _trimmedEndIndex=trimmedEndIndex,reTrimStart=/^\s+/;function baseTrim(e){return e?e.slice(0,_trimmedEndIndex(e)+1).replace(reTrimStart,""):e}var _baseTrim=baseTrim,Symbol$1=_root.Symbol,_Symbol=Symbol$1,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=_Symbol?_Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),n=e[symToStringTag];try{e[symToStringTag]=void 0;var o=!0}catch(e){}var i=nativeObjectToString.call(e);return o&&(t?e[symToStringTag]=n:delete e[symToStringTag]),i}var _getRawTag=getRawTag,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var _objectToString=objectToString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=_Symbol?_Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?_getRawTag(e):_objectToString(e)}var _baseGetTag=baseGetTag;function isObjectLike(e){return null!=e&&"object"==typeof e}var isObjectLike_1=isObjectLike,symbolTag="[object Symbol]";function isSymbol(e){return"symbol"==typeof e||isObjectLike_1(e)&&_baseGetTag(e)==symbolTag}var isSymbol_1=isSymbol,NAN=NaN,reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;function toNumber(e){if("number"==typeof e)return e;if(isSymbol_1(e))return NAN;if(isObject_1(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=isObject_1(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_baseTrim(e);var n=reIsBinary.test(e);return n||reIsOctal.test(e)?freeParseInt(e.slice(2),n?2:8):reIsBadHex.test(e)?NAN:+e}var toNumber_1=toNumber,FUNC_ERROR_TEXT="Expected a function",nativeMax=Math.max,nativeMin=Math.min;function debounce(e,t,n){var o,i,r,s,a,c,l=0,u=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError(FUNC_ERROR_TEXT);function p(t){var n=o,r=i;return o=i=void 0,l=t,s=e.apply(r,n)}function E(e){return l=e,a=setTimeout(_,t),u?p(e):s}function y(e){var n=e-c;return void 0===c||n>=t||n<0||h&&e-l>=r}function _(){var e=now_1();if(y(e))return v(e);a=setTimeout(_,function(e){var n=t-(e-c);return h?nativeMin(n,r-(e-l)):n}(e))}function v(e){return a=void 0,f&&o?p(e):(o=i=void 0,s)}function d(){var e=now_1(),n=y(e);if(o=arguments,i=this,c=e,n){if(void 0===a)return E(c);if(h)return clearTimeout(a),a=setTimeout(_,t),p(c)}return void 0===a&&(a=setTimeout(_,t)),s}return t=toNumber_1(t)||0,isObject_1(n)&&(u=!!n.leading,r=(h="maxWait"in n)?nativeMax(toNumber_1(n.maxWait)||0,t):r,f="trailing"in n?!!n.trailing:f),d.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=c=i=a=void 0},d.flush=function(){return void 0===a?s:v(now_1())},d}var debounce_1=debounce,sdkEventReasons={NEWCALL:"NEWCALL",ANSWER:"ANSWER",HANGUP:"HANGUP"},offlineEvents=[eventTypes.CONNECT_ERROR,eventTypes.CONNECT_TIMEOUT,eventTypes.DISCONNECT,eventTypes.RECONNECT_ATTEMPT,eventTypes.RECONNECTING,eventTypes.RECONNECT_ERROR,eventTypes.RECONNECT_FAILED,sdkEventReasons.CLOSE];function isSocketOffline(e){var t=e.name;return offlineEvents.includes(t)}function onNewEvent(e){var t=e.eventData,n=e.store,o=e.extensionsModuleName,i=e.queuesModuleName,r=e.dialersModuleName,s=t.name,a=t.data;switch(n.commit("".concat(o,"/SET_IS_SOCKET_OFFLINE"),isSocketOffline(t)),s){case eventTypes.ALL_EXTENSION_STATUS:n.dispatch("".concat(o,"/setExtensions"),a.extensions);break;case eventTypes.EXTENSION_EVENT:var c=a.data;c.lastEvent={reason:a.reason,ivrid:a.ivruniqueid};var l=n.state[o].extensions.findIndex((function(e){return e.userID===c.userID}));-1!==l&&n.dispatch("".concat(o,"/updateExtension"),{index:l,extension:c});break;case eventTypes.LOGIN_STATUS:n.commit("".concat(o,"/SET_SERVER_TIME"),a),n.dispatch("".concat(i,"/setQueues"),a.queues);break;case eventTypes.QUEUE_EVENT:var u=a.data,h=(n.state[i].all||[]).findIndex((function(e){return e.QueueID===u.QueueID}));-1!==h&&n.dispatch("".concat(i,"/updateQueue"),{index:h,queue:u});break;case eventTypes.ALL_DIALERS_STATUS:n.dispatch("".concat(r,"/setDialers"),a.dialers);break;case eventTypes.DIALER_EVENT:var f=a.data,p=(n.state[r].all||[]).findIndex((function(e){return e.campaignID===f.campaignID}));-1!==p&&n.dispatch("".concat(r,"/updateDialers"),{index:p,dialer:f})}}var callStatuses={CALLING:100,HOLD:101},_mutations,ISRAEL_TIMEZONE_OFFSET=108e5,MINUTE=6e4,LOGOUT_STATUS=2,HOLD_STATUS="hold",types={SET_EXTENSIONS:"SET_EXTENSIONS",UPDATE_EXTENSIONS:"UPDATE_EXTENSIONS",SET_SERVER_TIME:"SET_SERVER_TIME",SET_IS_SOCKET_OFFLINE:"SET_IS_SOCKET_OFFLINE"},state={extensions:[],serverTime:null,serverDelta:0,serverOffset:0,isSocketOffline:!1,offlineSocketTimestamp:null},mutations=(_mutations={},_defineProperty(_mutations,types.SET_EXTENSIONS,(function(e,t){e.extensions=t})),_defineProperty(_mutations,types.UPDATE_EXTENSIONS,(function(e,t){var n=t.index,o=t.extension;e.extensions.splice(n,1,o)})),_defineProperty(_mutations,types.SET_SERVER_TIME,(function(e,t){e.serverOffset=60*t.servertimeoffset*1e3||ISRAEL_TIMEZONE_OFFSET,e.serverTime=1e3*t.servertime-e.serverOffset,e.serverDelta=(new Date).getTime()-e.serverTime})),_defineProperty(_mutations,types.SET_IS_SOCKET_OFFLINE,(function(e,t){e.isSocketOffline=t,e.offlineSocketTimestamp=t?(new Date).getTime():null})),_mutations),actions={setExtensions:async function(e,t){(0,e.commit)(types.SET_EXTENSIONS,t)},updateExtension:async function(e,t){(0,e.commit)(types.UPDATE_EXTENSIONS,t)}};function isCallOnHold(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.callstatus||"";return t=t.toLowerCase(),e.answered&&t===HOLD_STATUS}var getters={isSocketOffline:function(e){if(!e.offlineSocketTimestamp||isNaN(e.offlineSocketTimestamp))return!1;var t=(new Date).getTime();return e.isSocketOffline&&t-e.offlineSocketTimestamp>MINUTE},extensionsWithCalls:function(e){return function(t){var n=[];return e.extensions.forEach((function(e){e.calls.length>0&&(e.calls.filter(isCallOnHold).length?e.representativeStatus=callStatuses.HOLD:e.representativeStatus=callStatuses.CALLING),n.push(e)})),t?n.filter((function(e){return e.representativeStatus!==LOGOUT_STATUS})):n}},extensionCountByStatus:function(e,t){return function(e){return t.extensionsWithCalls.filter((function(t){return t.representativeStatus===e})).length||0}}},extensionsModule={namespaced:!0,state:state,mutations:mutations,actions:actions,getters:getters},_mutations$1,types$1={SET_QUEUES:"SET_QUEUES",UPDATE_QUEUES:"UPDATE_QUEUES"},state$1={all:[]},mutations$1=(_mutations$1={},_defineProperty(_mutations$1,types$1.SET_QUEUES,(function(e,t){e.all=t})),_defineProperty(_mutations$1,types$1.UPDATE_QUEUES,(function(e,t){var n=t.index,o=t.queue;e.all.splice(n,1,o)})),_mutations$1),actions$1={setQueues:async function(e,t){(0,e.commit)(types$1.SET_QUEUES,t)},updateQueue:async function(e,t){(0,e.commit)(types$1.UPDATE_QUEUES,t)}},getters$1={queueWithActiveCalls:function(e){return e.all.filter((function(e){return e.Calls.length}))},allQueueCalls:function(e,t){var n=[];return t.queueWithActiveCalls.forEach((function(e){var t=e.Calls||[];n.push.apply(n,_toConsumableArray(t))})),n},filterQueuesByIds:function(e){return function(t){return t&&Array.isArray(t)?e.all.filter((function(e){return t.includes(e.QueueID)})):e.all}}},queuesModule={namespaced:!0,state:state$1,mutations:mutations$1,actions:actions$1,getters:getters$1},_mutations$2,types$2={SET_DIALERS:"SET_DIALERS",UPDATE_DIALERS:"UPDATE_DIALERS"},state$2={all:[]},mutations$2=(_mutations$2={},_defineProperty(_mutations$2,types$2.SET_DIALERS,(function(e,t){e.all=t})),_defineProperty(_mutations$2,types$2.UPDATE_DIALERS,(function(e,t){var n=t.index,o=t.dialer;e.all.splice(n,1,o)})),_mutations$2),actions$2={setDialers:async function(e,t){(0,e.commit)(types$2.SET_DIALERS,t)},updateDialers:async function(e,t){(0,e.commit)(types$2.UPDATE_DIALERS,t)}},getters$2={getAllDialers:function(e){return e.all},getAllDialersWithTypeIVR:function(e){return e.all.filter((function(e){return"IVR"===e.type}))},getAllDialersWithTypeAUTOMATIC:function(e){return e.all.filter((function(e){return"Automatic"===e.type}))}},dialersModule={namespaced:!0,state:state$2,mutations:mutations$2,actions:actions$2,getters:getters$2};function getServerWithHighestPriority(e){var t=null,n=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){e.Priority>2]|=e[r]<>6,c[i++]=128|63&o):o<55296||o>=57344?(c[i++]=224|o>>12,c[i++]=128|o>>6&63,c[i++]=128|63&o):(o=65536+((1023&o)<<10|1023&e.charCodeAt(++r)),c[i++]=240|o>>18,c[i++]=128|o>>12&63,c[i++]=128|o>>6&63,c[i++]=128|63&o);else for(i=this.start;r>2]|=o<>2]|=(192|o>>6)<>2]|=(128|63&o)<=57344?(a[i>>2]|=(224|o>>12)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<>2]|=(240|o>>18)<>2]|=(128|o>>12&63)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<=64?(this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Md5.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=EXTRA[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},Md5.prototype.hash=function(){var e,t,n,o,i,r,s=this.blocks;this.first?t=((t=((e=((e=s[0]-680876937)<<7|e>>>25)-271733879<<0)^(n=((n=(-271733879^(o=((o=(-1732584194^2004318071&e)+s[1]-117830708)<<12|o>>>20)+e<<0)&(-271733879^e))+s[2]-1126478375)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1316259209)<<22|t>>>10)+n<<0:(e=this.h0,t=this.h1,n=this.h2,t=((t+=((e=((e+=((o=this.h3)^t&(n^o))+s[0]-680876936)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[1]-389564586)<<12|o>>>20)+e<<0)&(e^t))+s[2]+606105819)<<17|n>>>15)+o<<0)&(o^e))+s[3]-1044525330)<<22|t>>>10)+n<<0),t=((t+=((e=((e+=(o^t&(n^o))+s[4]-176418897)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[5]+1200080426)<<12|o>>>20)+e<<0)&(e^t))+s[6]-1473231341)<<17|n>>>15)+o<<0)&(o^e))+s[7]-45705983)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[8]+1770035416)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[9]-1958414417)<<12|o>>>20)+e<<0)&(e^t))+s[10]-42063)<<17|n>>>15)+o<<0)&(o^e))+s[11]-1990404162)<<22|t>>>10)+n<<0,t=((t+=((e=((e+=(o^t&(n^o))+s[12]+1804603682)<<7|e>>>25)+t<<0)^(n=((n+=(t^(o=((o+=(n^e&(t^n))+s[13]-40341101)<<12|o>>>20)+e<<0)&(e^t))+s[14]-1502002290)<<17|n>>>15)+o<<0)&(o^e))+s[15]+1236535329)<<22|t>>>10)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[1]-165796510)<<5|e>>>27)+t<<0)^t))+s[6]-1069501632)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[11]+643717713)<<14|n>>>18)+o<<0)^o))+s[0]-373897302)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[5]-701558691)<<5|e>>>27)+t<<0)^t))+s[10]+38016083)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[15]-660478335)<<14|n>>>18)+o<<0)^o))+s[4]-405537848)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[9]+568446438)<<5|e>>>27)+t<<0)^t))+s[14]-1019803690)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[3]-187363961)<<14|n>>>18)+o<<0)^o))+s[8]+1163531501)<<20|t>>>12)+n<<0,t=((t+=((o=((o+=(t^n&((e=((e+=(n^o&(t^n))+s[13]-1444681467)<<5|e>>>27)+t<<0)^t))+s[2]-51403784)<<9|o>>>23)+e<<0)^e&((n=((n+=(e^t&(o^e))+s[7]+1735328473)<<14|n>>>18)+o<<0)^o))+s[12]-1926607734)<<20|t>>>12)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[5]-378558)<<4|e>>>28)+t<<0))+s[8]-2022574463)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[11]+1839030562)<<16|n>>>16)+o<<0))+s[14]-35309556)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[1]-1530992060)<<4|e>>>28)+t<<0))+s[4]+1272893353)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[7]-155497632)<<16|n>>>16)+o<<0))+s[10]-1094730640)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[13]+681279174)<<4|e>>>28)+t<<0))+s[0]-358537222)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[3]-722521979)<<16|n>>>16)+o<<0))+s[6]+76029189)<<23|t>>>9)+n<<0,t=((t+=((r=(o=((o+=((i=t^n)^(e=((e+=(i^o)+s[9]-640364487)<<4|e>>>28)+t<<0))+s[12]-421815835)<<11|o>>>21)+e<<0)^e)^(n=((n+=(r^t)+s[15]+530742520)<<16|n>>>16)+o<<0))+s[2]-995338651)<<23|t>>>9)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[0]-198630844)<<6|e>>>26)+t<<0)|~n))+s[7]+1126891415)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[14]-1416354905)<<15|n>>>17)+o<<0)|~e))+s[5]-57434055)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[12]+1700485571)<<6|e>>>26)+t<<0)|~n))+s[3]-1894986606)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[10]-1051523)<<15|n>>>17)+o<<0)|~e))+s[1]-2054922799)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[8]+1873313359)<<6|e>>>26)+t<<0)|~n))+s[15]-30611744)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[6]-1560198380)<<15|n>>>17)+o<<0)|~e))+s[13]+1309151649)<<21|t>>>11)+n<<0,t=((t+=((o=((o+=(t^((e=((e+=(n^(t|~o))+s[4]-145523070)<<6|e>>>26)+t<<0)|~n))+s[11]-1120210379)<<10|o>>>22)+e<<0)^((n=((n+=(e^(o|~t))+s[2]+718787259)<<15|n>>>17)+o<<0)|~e))+s[9]-343485551)<<21|t>>>11)+n<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=n-1732584194<<0,this.h3=o+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+n<<0,this.h3=this.h3+o<<0)},Md5.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[15&o]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]},Md5.prototype.toString=Md5.prototype.hex,Md5.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,o=this.h3;return[255&e,e>>8&255,e>>16&255,e>>24&255,255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},Md5.prototype.array=Md5.prototype.digest,Md5.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},Md5.prototype.buffer=Md5.prototype.arrayBuffer,Md5.prototype.base64=function(){for(var e,t,n,o="",i=this.array(),r=0;r<15;)e=i[r++],t=i[r++],n=i[r++],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[63&(e<<4|t>>>4)]+BASE64_ENCODE_CHAR[63&(t<<2|n>>>6)]+BASE64_ENCODE_CHAR[63&n];return e=i[r],o+=BASE64_ENCODE_CHAR[e>>>2]+BASE64_ENCODE_CHAR[e<<4&63]+"=="};var exports=createMethod();COMMON_JS?module.exports=exports:root.md5=exports}()})),defaultOptions={url:"https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls",environment:environments.BROWSER,getSocketIOFunction:void 0,fallbackServer:{Domain:"monitor5.voicenter.co.il",Priority:0},loginUrl:"https://loginapi.voicenter.co.il/monitorAPI/Login",refreshTokenUrl:"https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken",servers:defaultServers,token:null,loginType:"token",forceNew:!0,reconnectionDelay:1e4,reconnectionDelayMax:1e4,maxReconnectAttempts:2,timeout:1e4,keepAliveTimeout:6e4,idleInterval:3e5,protocol:"https",transports:["websocket"],upgrade:!1,store:null,extensionsModuleName:"sdkExtensions",queuesModuleName:"sdkQueues",dialersModuleName:"sdkDialers",serverFetchStrategy:"remote",serverType:null},allConnections=[],listenersMap=new Map,EventsSDK=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(_classCallCheck(this,e),this.options=Object.assign({},defaultOptions,t),this.argumentOptions=Object.assign({},t),!this.options.loginType)throw new Error("A login type should be provided");this.Logger=new Logger(this.options),this.servers=[],this.server=null,this.socket=null,this.connected=!1,this.connectionEstablished=!1,this._lastEventTimestamp=(new Date).getTime(),this._initReconnectOptions(),this._listenersMap=listenersMap,this._retryConnection=debounce_1(this._connect.bind(this),this.reconnectOptions.reconnectionDelay,{leading:!0,trailing:!1}),this._lastLoginTimestamp=null,this._handleLocalEvents=!1,this._registerExtensionsModule(),this._registerQueueModule(),this._registerDialerModule()}return _createClass(e,[{key:"getLastEventTimestamp",value:function(){return this._lastEventTimestamp}},{key:"_reSync",value:function(){this.emit(eventTypes.RESYNC,{cache:!1})}},{key:"_registerExtensionsModule",value:function(){var e=this.options.extensionsModuleName||"sdkExtensions";this._validateStoreModule(e)&&(this.options.store.registerModule(e,extensionsModule),this._handleLocalEvents=!0)}},{key:"_registerQueueModule",value:function(){var e=this.options.queuesModuleName||"sdkQueues";this._validateStoreModule(e)&&(this.options.store.registerModule(e,queuesModule),this._handleLocalEvents=!0)}},{key:"_registerDialerModule",value:function(){var e=this.options.dialersModuleName||"sdkDialers";this._validateStoreModule(e)&&(this.options.store.registerModule(e,dialersModule),this._handleLocalEvents=!0)}},{key:"_validateStoreModule",value:function(e){var t=this.options.store;return!!t&&(t.state[e]&&t.unregisterModule(e),!0)}},{key:"_initReconnectOptions",value:function(){this.reconnectOptions={retryCount:1,maxReconnectAttempts:this.options.maxReconnectAttempts,reconnectionDelay:this.options.reconnectionDelay,minReconnectionDelay:this.options.reconnectionDelay,maxReconnectionDelay:3e5}}},{key:"_onConnect",value:function(){this._initReconnectDelays(),this.connected=!0,this.Logger.log(eventTypes.CONNECT,this.reconnectOptions)}},{key:"_initReconnectDelays",value:function(){this.reconnectOptions.retryCount=1;var e=this.reconnectOptions.minReconnectionDelay;this.reconnectOptions.reconnectionDelay=e,this.socket.io.reconnectionDelay(e),this.socket.io.reconnectionDelayMax(e)}},{key:"_onConnectError",value:function(e){this._retryConnection("next",!0),this.connected=!1,this.Logger.log(eventTypes.CONNECT_ERROR,e)}},{key:"_onError",value:function(e){this.Logger.log(eventTypes.ERROR,e)}},{key:"_onReconnectFailed",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.RECONNECT_FAILED,this.reconnectOptions)}},{key:"_onConnectTimeout",value:function(){this._retryConnection("next",!0),this.Logger.log(eventTypes.CONNECT_TIMEOUT,this.reconnectOptions)}},{key:"_onReconnectAttempt",value:function(){if(this.connected=!1,this.reconnectOptions.retryCount>=this.reconnectOptions.maxReconnectAttempts)this._retryConnection("next",!0);else{if(this.reconnectOptions.reconnectionDelay0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=null;if("default"===e)n=this._findCurrentServer();else if("next"===e)n=this._findNextAvailableServer();else{if("prev"!==e)throw new Error("Incorrect 'server' parameter passed to connect function ".concat(e,". Should be 'default' or 'next'"));n=this._findMaxPriorityServer()}n||(this.server=this._findCurrentServer()),this._initSocketConnection(),this._initSocketEvents(),this._initKeepAlive(),this._initReconnectDelays(),t||await this.login(this.options.loginType)}},{key:"_checkInit",value:function(){if(!this.connectionEstablished)throw new Error('Make sure you call "sdk.init()" before doing other operations.')}},{key:"_initSocketConnection",value:function(){var e=this.server.Domain,t=this.options.protocol,n="".concat(t,"://").concat(e);this.Logger.log("Connecting to..",n),this.closeAllConnections();var o={reconnection:!1,perMessageDeflate:!1,upgrade:!1,transports:["websocket"],debug:!1};this.token&&(o.query={token:this.token}),this.socket=self.io(n,o),allConnections.push(this.socket),this.connectionEstablished=!0}},{key:"_initSocketEvents",value:function(){var e=this;this.socket.on(eventTypes.RECONNECT_ATTEMPT,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.RECONNECT_FAILED,(function(t){return e._onReconnectFailed(t)})).on(eventTypes.CONNECT,(function(t){return e._onConnect(t)})).on(eventTypes.CONNECT_TIMEOUT,(function(t){return e._onConnectTimeout(t)})).on(eventTypes.CONNECT_ERROR,(function(t){return e._onConnectError(t)})).on(eventTypes.RECONNECT_ERROR,(function(t){return e._onReconnectAttempt(t)})).on(eventTypes.ERROR,(function(t){return e._onError(t)})).on(eventTypes.DISCONNECT,(function(t){return e._onDisconnect(t)})),this.socket.onpacket=this._onEvent.bind(this),this.socket.onevent=this._onEvent.bind(this)}},{key:"_initKeepAlive",value:function(){var e=this;this.keepAliveInterval&&clearInterval(this.keepAliveInterval),this.idleInterval&&clearInterval(this.idleInterval),this.keepAliveInterval=setInterval((async function(){var t=(new Date).getTime(),n=2*e.options.keepAliveTimeout;t>e.getLastEventTimestamp()+n?await e._connect("next",!0):e.socket?t>e.getLastEventTimestamp()+e.options.keepAliveTimeout&&e.emit(eventTypes.KEEP_ALIVE,e.options.token):e._initSocketConnection()}),this.options.keepAliveTimeout)}},{key:"_findCurrentServer",value:function(){var e=null;return this.servers.length&&(e=this.servers[0]),this.server=e,this.server||(this.server=this.options.fallbackServer),this.server}},{key:"_findNextAvailableServer",value:function(){var e=this.server.Priority;if(this.Logger.log("Failover -> Trying to find another server"),e===this.servers.length-1)return this._findMaxPriorityServer();var t=e+1,n=this.servers.find((function(e){return e.Priority===t}));return n||(n=this._findMaxPriorityServer())?this.server.Domain!==n.Domain?(this.server=n,this.server):(this.Logger.log("Failover -> Found new server. Connecting to it...",this.server),null):void 0}},{key:"_findMaxPriorityServer",value:function(){this.Logger.log("Fallback -> Trying to find previous server","_findMaxPriorityServer");var e=getServerWithHighestPriority(this.servers);return this.server?this.server&&e.Domain!==this.server.Domain?(this.server=e,this.Logger.log("Fallback -> Trying to find previous server",this.server),this.server):null:(this.server=e,this.server)}},{key:"_getServers",value:async function(){"static"===this.options.serverFetchStrategy&&this.argumentOptions.servers&&Array.isArray(this.argumentOptions.servers)&&this.argumentOptions.servers.length>1&&(this.servers=this.argumentOptions.servers)}},{key:"_onEvent",value:function(e){var t,n=this;if(e.data){var o=this._parsePacket(e);this.Logger.log("New event -> ".concat(o.name),o),this._lastEventTimestamp=(new Date).getTime(),this._listenersMap.forEach((function(e,t){("*"===t||o.name===t)&&e(o)}));var i=(_defineProperty(t={},eventTypes.KEEP_ALIVE_RESPONSE,this._onKeepAlive),_defineProperty(t,eventTypes.LOGIN_RESPONSE,this._onLoginResponse),_defineProperty(t,eventTypes.EXTENSION_UPDATED,this._reSync),_defineProperty(t,eventTypes.QUEUES_UPDATED,this._reSync),_defineProperty(t,eventTypes.DIALERS_UPDATED,this._reSync),_defineProperty(t,eventTypes.LOGIN_STATUS,(function(){n.connected||n._onConnect()})),t)[o.name];i&&"function"==typeof i&&i.call(this,o.data),this._handleLocalEvents&&onNewEvent(Object.assign({eventData:o},this.options))}}},{key:"init",value:async function(){return this.connectionEstablished||(this.socket&&this.emit(eventTypes.CLOSE),await this._getToken(),await this._getTabsSession(),await this.login(this.options.loginType),await this._getServers()),!0}},{key:"setToken",value:async function(e){this.options.token=e,this.disconnect(),await this.init()}},{key:"closeAllConnections",value:function(){allConnections.forEach((function(e){e.close(),e.disconnect()})),allConnections=[],this.socket&&(this.socket.disconnect(),this.socket.close(),this.socket=null)}},{key:"disconnect",value:function(){this._listenersMap=new Map,this.closeAllConnections()}},{key:"on",value:function(e,t){this._listenersMap.set(e,t),this._checkInit()}},{key:"emit",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._checkInit(),this.Logger.log("EMIT -> ".concat(e),t),this.socket.emit(e,t)}},{key:"reSync",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.emit(eventTypes.RESYNC,{cache:e})}},{key:"setMonitorUrl",value:async function(e){var t=this.options.url,n=this.options.serverFetchStrategy;try{if(!e)return;this.options.url=e,this.options.serverFetchStrategy="remote",await this.init()}catch(e){this._onError(e),this.options.url=t,this.options.serverFetchStrategy=n,await this.init()}}},{key:"_getToken",value:function(){var e=this.options.loginType;if(this.token=this.options.token,"token"===e&&!this.token)throw new Error("Token login type expects the token option to be provided")}},{key:"_getTabsSession",value:function(){return this.options.environment!==environments.BROWSER?Promise.resolve():(window.sessionStorage.length||localStorage.setItem("getSessionStorage",Date.now()),window.addEventListener("storage",(function(e){if("getSessionStorage"===e.key)localStorage.setItem("sessionStorage",JSON.stringify(window.sessionStorage)),localStorage.removeItem("sessionStorage");else if("sessionStorage"===e.key&&!sessionStorage.length){var t=JSON.parse(e.newValue);for(var n in t)t.hasOwnProperty(n)&&window.sessionStorage.setItem(n,t[n])}})),new Promise((function(e){return setTimeout(e,200)})))}},{key:"login",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"token",n={token:this.options.token,email:this.options.email,username:this.options.username,password:this.options.password},o=md5(JSON.stringify(n)),i=1e3;return this._lastLoginTimestamp+i>(new Date).getTime()?Promise.resolve():(this._lastLoginTimestamp=(new Date).getTime(),new Promise((async function(i,r){try{var s=window.sessionStorage.getItem(o);if(s)return s=JSON.parse(s),e.Logger.log("got data from session",s),await e._onLoginResponse(s),i(s)}catch(t){e.Logger.log("Error on getting session",t)}try{var a=getExternalLoginUrl(e.options.loginUrl,t),c=await externalLogin(a,n);await e._onLoginResponse(c),e.options.environment===environments.BROWSER&&window.sessionStorage.setItem(o,JSON.stringify(c)),i(c)}catch(t){e.servers=e.argumentOptions.servers||defaultServers,r(t)}})))}}]),e}();return"undefined"!=typeof window&&(window.EventsSDK=EventsSDK),EventsSDK})); -//# sourceMappingURL=voicenter-events-sdk.umd.js.map diff --git a/dist/voicenter-events-sdk.umd.js.map b/dist/voicenter-events-sdk.umd.js.map deleted file mode 100644 index ddd748ec..00000000 --- a/dist/voicenter-events-sdk.umd.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"voicenter-events-sdk.umd.js","sources":["../src/eventTypes.js","../src/utils/environments.js","../src/config.js","../src/Logger.js","../node_modules/lodash/isObject.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../src/store/handleStoreEvents.js","../src/utils/statusTypes.js","../src/store/extensions.js","../src/store/queues.js","../src/store/dialers.js","../src/utils.js","../src/utils/externalLogin.js","../src/utils/loadExternalScript.js","../node_modules/js-md5/src/md5.js","../src/sdk.js","../src/index.js"],"sourcesContent":["export default {\r\n LOGIN_STATUS: 'loginStatus',\r\n LOGIN: 'login',\r\n LOGIN_USER: 'loginUser',\r\n LOGIN_CODE: 'loginUserCode',\r\n LOGIN_ACCOUNT: 'loginAccount',\r\n LOGIN_RESPONSE: 'loginResponse',\r\n QUEUE_EVENT: 'QueueEvent',\r\n QUEUES_UPDATED: 'QueuesUpdated',\r\n DIALERS_UPDATED: 'DialersUpdated',\r\n EXTENSION_EVENT: 'ExtensionEvent',\r\n EXTENSION_UPDATED: 'ExtensionsUpdated',\r\n ALL_EXTENSION_STATUS: 'AllExtensionsStatus',\r\n CONNECT: 'connect',\r\n CONNECT_ERROR: 'connect_error',\r\n CONNECT_TIMEOUT: 'connect_timeout',\r\n DISCONNECT: 'disconnect',\r\n PONG: 'pong',\r\n RECONNECT: 'reconnect',\r\n RECONNECT_ATTEMPT: 'reconnect_attempt',\r\n RESYNC: 'resync',\r\n RECONNECTING: 'reconnecting',\r\n RECONNECT_ERROR: 'reconnect_error',\r\n RECONNECT_FAILED: 'reconnect_failed',\r\n KEEP_ALIVE: 'keepalive',\r\n KEEP_ALIVE_RESPONSE: 'keepaliveResponse',\r\n CLOSE: 'closeme',\r\n ERROR: 'error',\r\n ALL_DIALERS_STATUS: 'AllDialersStatus',\r\n DIALER_EVENT: 'DialerEvent'\r\n}\r\n","export default {\r\n BROWSER: 'browser',\r\n CHROME_EXTENSION: 'chrome-extension'\r\n}\r\n","export const defaultServers = [{\r\n 'URLID': 59,\r\n 'Priority': 5,\r\n 'Version': 2,\r\n 'Domain': 'monitor1.voicenter.co'\r\n}, {\r\n 'URLID': 3,\r\n 'Priority': 4,\r\n 'Version': 2,\r\n 'Domain': 'monitor3.voicenter.co.il'\r\n}, {\r\n 'URLID': 4,\r\n 'Priority': 3,\r\n 'Version': 2,\r\n 'Domain': 'monitor4.voicenter.co.il'\r\n}, {\r\n 'URLID': 11,\r\n 'Priority': 2,\r\n 'Version': 2,\r\n 'Domain': 'monitor11.voicenter.co'\r\n}, {\r\n 'URLID': 5,\r\n 'Priority': 0,\r\n 'Version': 2,\r\n 'Domain': 'monitor5.voicenter.co.il'\r\n}];\r\n","\r\nclass Logger {\r\n constructor(options = {}) {\r\n this.debug = options.debug\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _log(message, data) {\r\n let toLog = data ? `${message}, %c Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.log(`%c ${now}: %c ${toLog}`, `color: #276749;`, `color: #4299e1;`, `color: #2c3e50;`)\r\n }\r\n\r\n /**\r\n * Logs to console a colored message\r\n * @param message\r\n * @param data\r\n * @private\r\n */\r\n _error(message, data) {\r\n let toLog = data ? `${message}, Data -> ${JSON.stringify(data)}` : `${message}`\r\n let now = new Date().toUTCString()\r\n console.error(`${now}: ${toLog}`)\r\n }\r\n\r\n /**\r\n * Logs messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n log(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._log(message)\r\n } else {\r\n this._log(message, data)\r\n }\r\n }\r\n }\r\n /**\r\n * Logs error messages in case debug mode is set\r\n * @param message\r\n * @param data\r\n */\r\n error(message, data) {\r\n if (this.debug) {\r\n if (message && !data) {\r\n this._error(message)\r\n } else {\r\n this._error(message, data)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Logger\r\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import eventTypes from '../eventTypes';\r\n\r\nexport const sdkEventReasons = {\r\n NEWCALL: 'NEWCALL',\r\n ANSWER: 'ANSWER',\r\n HANGUP: 'HANGUP'\r\n}\r\nconst offlineEvents = [\r\n eventTypes.CONNECT_ERROR,\r\n eventTypes.CONNECT_TIMEOUT,\r\n eventTypes.DISCONNECT,\r\n eventTypes.RECONNECT_ATTEMPT,\r\n eventTypes.RECONNECTING,\r\n eventTypes.RECONNECT_ERROR,\r\n eventTypes.RECONNECT_FAILED,\r\n sdkEventReasons.CLOSE\r\n]\r\n\r\nfunction isSocketOffline(event) {\r\n let { name } = event\r\n return offlineEvents.includes(name)\r\n}\r\n\r\nexport default function onNewEvent({ eventData, store, extensionsModuleName, queuesModuleName, dialersModuleName }) {\r\n let { name, data } = eventData\r\n store.commit(`${extensionsModuleName}/SET_IS_SOCKET_OFFLINE`, isSocketOffline(eventData))\r\n switch (name) {\r\n case eventTypes.ALL_EXTENSION_STATUS:\r\n store.dispatch(`${extensionsModuleName}/setExtensions`, data.extensions)\r\n break;\r\n case eventTypes.EXTENSION_EVENT:\r\n let extension = data.data\r\n // Event reason: NEWCALL/ANSWER/HANGUP\r\n extension['lastEvent'] = {\r\n reason: data.reason,\r\n ivrid: data.ivruniqueid\r\n }\r\n const extensions = store.state[extensionsModuleName].extensions\r\n let extensionIndex = extensions.findIndex(e => e.userID === extension.userID)\r\n if (extensionIndex !== -1) {\r\n store.dispatch(`${extensionsModuleName}/updateExtension`, {\r\n index: extensionIndex,\r\n extension\r\n })\r\n }\r\n break;\r\n case eventTypes.LOGIN_STATUS:\r\n store.commit(`${extensionsModuleName}/SET_SERVER_TIME`, data)\r\n store.dispatch(`${queuesModuleName}/setQueues`, data.queues)\r\n break;\r\n case eventTypes.QUEUE_EVENT:\r\n let queue = data.data;\r\n const allQueues = store.state[queuesModuleName].all || []\r\n let queueIndex = allQueues.findIndex(e => e.QueueID === queue.QueueID)\r\n if (queueIndex !== -1) {\r\n store.dispatch(`${queuesModuleName}/updateQueue`, {\r\n index: queueIndex,\r\n queue\r\n })\r\n }\r\n break;\r\n case eventTypes.ALL_DIALERS_STATUS:\r\n store.dispatch(`${dialersModuleName}/setDialers`, data.dialers)\r\n break;\r\n case eventTypes.DIALER_EVENT:\r\n const dialer = data.data;\r\n const allDialers = store.state[dialersModuleName].all || []\r\n let dialerIndex = allDialers.findIndex(e => e.campaignID === dialer.campaignID)\r\n if (dialerIndex !== -1) {\r\n store.dispatch(`${dialersModuleName}/updateDialers`, {\r\n index: dialerIndex,\r\n dialer\r\n })\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n","import colors from \"./colors\";\r\n\r\nexport const callStatuses = {\r\n CALLING: 100,\r\n HOLD: 101,\r\n}\r\n\r\nexport default {\r\n 1: {\r\n icon: \"IconLogin\",\r\n color: colors.LOGIN_COLOR,\r\n text: 'status.login',\r\n value: 1\r\n },\r\n 2: {\r\n icon: \"IconLogout\",\r\n color: colors.LOGOUT_COLOR,\r\n text: 'status.logout',\r\n value: 2\r\n },\r\n 3: {\r\n icon: \"IconLunch\",\r\n color: colors.LUNCH_COLOR,\r\n text: 'status.lunch',\r\n value: 3\r\n },\r\n 5: {\r\n icon: \"IconAdministrative\",\r\n color: colors.ADMINISTRATIVE_COLOR,\r\n text: 'status.administrative',\r\n value: 5\r\n },\r\n 7: {\r\n icon: \"IconPrivate\",\r\n color: colors.PRIVATE_COLOR,\r\n text: 'status.private',\r\n value: 7\r\n },\r\n 9: {\r\n icon: \"IconOther\",\r\n color: colors.OTHER_COLOR,\r\n text: 'status.other',\r\n value: 9\r\n },\r\n 11: {\r\n icon: \"IconTraining\",\r\n color: colors.TRAINING_COLOR,\r\n text: 'status.training',\r\n value: 11\r\n },\r\n 12: {\r\n icon: \"IconTeamMeeting\",\r\n color: colors.TEAM_MEETING_COLOR,\r\n text: 'status.teamMeeting',\r\n value: 12\r\n },\r\n 13: {\r\n icon: \"IconBrief\",\r\n color: colors.BRIEF_COLOR,\r\n text: 'status.brief',\r\n value: 13\r\n },\r\n 100: {\r\n icon: 'IconIncomingCall',\r\n color: colors.LIGHT_GREEN,\r\n text: 'status.incall',\r\n value: 100\r\n },\r\n 101: {\r\n icon: 'IconHold',\r\n color: colors.HOLD_COLOR,\r\n text: 'status.hold',\r\n value: 101\r\n }\r\n}\r\n","import { callStatuses } from '../utils/statusTypes';\r\n\r\nconst ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000;\r\nconst MINUTE = 60 * 1000\r\nconst LOGOUT_STATUS = 2;\r\nconst LOGIN_STATUS = 1;\r\nconst HOLD_STATUS = 'hold'\r\n\r\nconst types = {\r\n SET_EXTENSIONS: 'SET_EXTENSIONS',\r\n UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS',\r\n SET_SERVER_TIME: 'SET_SERVER_TIME',\r\n SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE',\r\n};\r\nconst state = {\r\n extensions: [],\r\n serverTime: null,\r\n serverDelta: 0,\r\n serverOffset: 0,\r\n isSocketOffline: false,\r\n offlineSocketTimestamp: null\r\n};\r\n\r\nconst mutations = {\r\n [types.SET_EXTENSIONS]: (state, value) => {\r\n state.extensions = value\r\n },\r\n [types.UPDATE_EXTENSIONS]: (state, {index, extension}) => {\r\n state.extensions.splice(index, 1, extension)\r\n },\r\n [types.SET_SERVER_TIME]: (state, value) => {\r\n state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET\r\n state.serverTime = value.servertime * 1000 - state.serverOffset\r\n state.serverDelta = new Date().getTime() - state.serverTime\r\n },\r\n [types.SET_IS_SOCKET_OFFLINE]: (state, value) => {\r\n state.isSocketOffline = value\r\n if (value) {\r\n state.offlineSocketTimestamp = new Date().getTime()\r\n } else {\r\n state.offlineSocketTimestamp = null\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n async setExtensions({commit}, value) {\r\n commit(types.SET_EXTENSIONS, value)\r\n },\r\n async updateExtension({commit}, value) {\r\n commit(types.UPDATE_EXTENSIONS, value)\r\n },\r\n};\r\n\r\nfunction isCallOnHold(call = {}) {\r\n let status = call.callstatus || ''\r\n status = status.toLowerCase()\r\n return call.answered && status === HOLD_STATUS\r\n}\r\n\r\nconst getters = {\r\n isSocketOffline: state => {\r\n if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) {\r\n return false\r\n }\r\n const now = new Date().getTime()\r\n // show after 1 minute of disconnect\r\n return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE\r\n },\r\n extensionsWithCalls: state => hideLoggedOutUsers => {\r\n let groupedExtensions = [];\r\n\r\n state.extensions.forEach((extension) => {\r\n\r\n if (extension.calls.length > 0) {\r\n if (extension.calls.filter(isCallOnHold).length) {\r\n extension['representativeStatus'] = callStatuses.HOLD;\r\n } else {\r\n extension['representativeStatus'] = callStatuses.CALLING;\r\n }\r\n }\r\n groupedExtensions.push(extension);\r\n });\r\n\r\n if (hideLoggedOutUsers) {\r\n return groupedExtensions.filter(e => e.representativeStatus !== LOGOUT_STATUS);\r\n }\r\n return groupedExtensions;\r\n },\r\n extensionCountByStatus: (state, getters) => status => {\r\n return getters.extensionsWithCalls.filter(el => el.representativeStatus === status).length || 0\r\n }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n};\r\n","const types = {\r\n SET_QUEUES: 'SET_QUEUES',\r\n UPDATE_QUEUES: 'UPDATE_QUEUES',\r\n}\r\nconst state = {\r\n all: [],\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_QUEUES]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_QUEUES]: (state, {index, queue}) => {\r\n state.all.splice(index, 1, queue)\r\n },\r\n}\r\n\r\nconst actions = {\r\n async setQueues({commit}, value) {\r\n commit(types.SET_QUEUES, value)\r\n },\r\n async updateQueue({commit}, value) {\r\n commit(types.UPDATE_QUEUES, value)\r\n },\r\n}\r\n\r\nconst getters = {\r\n queueWithActiveCalls: (state) => {\r\n return state.all.filter((el) => el.Calls.length)\r\n },\r\n allQueueCalls: (state, getters) => {\r\n const allCalls = []\r\n getters.queueWithActiveCalls.forEach((queue) => {\r\n const calls = queue.Calls || []\r\n allCalls.push(...calls)\r\n })\r\n return allCalls\r\n },\r\n filterQueuesByIds: (state) => queueIds => {\r\n if (!queueIds || !Array.isArray(queueIds)) {\r\n return state.all\r\n }\r\n return state.all.filter(e => queueIds.includes(e.QueueID))\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","const types = {\r\n SET_DIALERS: 'SET_DIALERS',\r\n UPDATE_DIALERS: 'UPDATE_DIALERS'\r\n}\r\n\r\nconst state = {\r\n all: []\r\n}\r\n\r\nconst mutations = {\r\n [types.SET_DIALERS]: (state, value) => {\r\n state.all = value\r\n },\r\n [types.UPDATE_DIALERS]: (state, { index, dialer }) => {\r\n state.all.splice(index, 1, dialer)\r\n }\r\n}\r\n\r\nconst actions = {\r\n async setDialers({commit}, value) {\r\n commit(types.SET_DIALERS, value)\r\n },\r\n async updateDialers({commit}, value) {\r\n commit(types.UPDATE_DIALERS, value)\r\n }\r\n}\r\n\r\nconst getters = {\r\n getAllDialers: (state) => {\r\n return state.all\r\n },\r\n getAllDialersWithTypeIVR: (state) => {\r\n return state.all.filter(el => el.type === 'IVR')\r\n },\r\n getAllDialersWithTypeAUTOMATIC: (state) => {\r\n return state.all.filter(el => el.type === 'Automatic')\r\n }\r\n}\r\nexport default {\r\n namespaced: true,\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n}\r\n","export function getServerWithHighestPriority(servers) {\r\n // Highest priority server is the one with lowest Priority value\r\n let chosenServer = null\r\n let maxPriority = Number.MAX_SAFE_INTEGER\r\n servers.forEach(server => {\r\n if (server.Priority < maxPriority) {\r\n maxPriority = server.Priority\r\n chosenServer = server\r\n }\r\n })\r\n return chosenServer\r\n}\r\n\r\nexport function isValidDate(date) {\r\n return !isNaN(date.getTime())\r\n}\r\n","export async function externalLogin(url, { email, password, token, username }) {\r\n let body = null\r\n if (token) {\r\n body = JSON.stringify({ token })\r\n } else if (username) {\r\n body = JSON.stringify({\r\n username,\r\n password\r\n })\r\n } else {\r\n body = JSON.stringify({\r\n email,\r\n pin: password\r\n })\r\n }\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body,\r\n });\r\n const data = await res.json();\r\n if (data.error) {\r\n throw new Error(data.error)\r\n }\r\n return data.Data.Socket;\r\n}\r\n\r\nexport function getExternalLoginUrl(baseUrl, loginType) {\r\n if (loginType === 'user') {\r\n return `${baseUrl}/User`\r\n } else if (loginType === 'token') {\r\n return `${baseUrl}/Token`\r\n } else if (loginType === 'account') {\r\n return `${baseUrl}/Account`\r\n }\r\n return baseUrl\r\n}\r\n\r\nexport async function refreshToken(url, oldRefreshToken) {\r\n const res = await fetch(url, {\r\n method: 'GET',\r\n\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${oldRefreshToken}`\r\n }\r\n });\r\n return res.json();\r\n}\r\n","import environments from './environments'\r\n\r\nfunction loadBrowserScript(url) {\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.onload = () => {\r\n resolve();\r\n };\r\n script.onerror = () => {\r\n reject();\r\n };\r\n document.body.append(script);\r\n });\r\n}\r\n\r\nasync function loadExtensionScript(url) {\r\n try {\r\n let script = await fetch(url)\r\n script = await script.text()\r\n\r\n eval(script)\r\n } catch (e) {\r\n return Promise.reject(e)\r\n }\r\n}\r\n\r\nexport async function loadExternalScript(url, environment, getSocketIOFunction) {\r\n if (typeof getSocketIOFunction === 'function') {\r\n self.io = getSocketIOFunction(url)\r\n\r\n return\r\n }\r\n\r\n switch (environment) {\r\n case environments.BROWSER:\r\n await loadBrowserScript(url)\r\n break\r\n case environments.CHROME_EXTENSION:\r\n await loadExtensionScript(url)\r\n }\r\n}\r\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_MD5_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [128, 32768, 8388608, -2147483648];\n var SHIFT = [0, 8, 16, 24];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n var blocks = [], buffer8;\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n buffer8 = new Uint8Array(buffer);\n blocks = new Uint32Array(buffer);\n }\n\n if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n /**\n * @method hex\n * @memberof md5\n * @description Output hash as hex string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} Hex string\n * @example\n * md5.hex('The quick brown fox jumps over the lazy dog');\n * // equal to\n * md5('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method digest\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.digest('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method array\n * @memberof md5\n * @description Output hash as bytes array\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Array} Bytes array\n * @example\n * md5.array('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method arrayBuffer\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof md5\n * @description Output hash as ArrayBuffer\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {ArrayBuffer} ArrayBuffer\n * @example\n * md5.buffer('The quick brown fox jumps over the lazy dog');\n */\n /**\n * @method base64\n * @memberof md5\n * @description Output hash as base64 string\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} base64 string\n * @example\n * md5.base64('The quick brown fox jumps over the lazy dog');\n */\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Md5(true).update(message)[outputType]();\n };\n };\n\n /**\n * @method create\n * @memberof md5\n * @description Create Md5 object\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.create();\n */\n /**\n * @method update\n * @memberof md5\n * @description Create and update Md5 object\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @example\n * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n * // equal to\n * var hash = md5.create();\n * hash.update('The quick brown fox jumps over the lazy dog');\n */\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Md5();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw ERROR;\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n /**\n * Md5 class\n * @class Md5\n * @description This is internal class.\n * @see {@link md5.create}\n */\n function Md5(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n this.buffer8 = buffer8;\n } else {\n if (ARRAY_BUFFER) {\n var buffer = new ArrayBuffer(68);\n this.buffer8 = new Uint8Array(buffer);\n this.blocks = new Uint32Array(buffer);\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n }\n this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n /**\n * @method update\n * @memberof Md5\n * @instance\n * @description Update hash\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {Md5} Md5 object.\n * @see {@link md5.update}\n */\n Md5.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw ERROR;\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw ERROR;\n }\n }\n } else {\n throw ERROR;\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n var buffer8 = this.buffer8;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n buffer8[i++] = message[index];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n }\n } else {\n if (ARRAY_BUFFER) {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n buffer8[i++] = code;\n } else if (code < 0x800) {\n buffer8[i++] = 0xc0 | (code >> 6);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n buffer8[i++] = 0xe0 | (code >> 12);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n buffer8[i++] = 0xf0 | (code >> 18);\n buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n buffer8[i++] = 0x80 | (code & 0x3f);\n }\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Md5.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[i >> 2] |= EXTRA[i & 3];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = blocks[16];\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.bytes << 3;\n blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n this.hash();\n };\n\n Md5.prototype.hash = function () {\n var a, b, c, d, bc, da, blocks = this.blocks;\n\n if (this.first) {\n a = blocks[0] - 680876937;\n a = (a << 7 | a >>> 25) - 271733879 << 0;\n d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n d = (d << 12 | d >>> 20) + a << 0;\n c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n c = (c << 17 | c >>> 15) + d << 0;\n b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n b = (b << 22 | b >>> 10) + c << 0;\n } else {\n a = this.h0;\n b = this.h1;\n c = this.h2;\n d = this.h3;\n a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n b = (b << 22 | b >>> 10) + c << 0;\n }\n\n a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n a = (a << 7 | a >>> 25) + b << 0;\n d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n d = (d << 12 | d >>> 20) + a << 0;\n c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n c = (c << 17 | c >>> 15) + d << 0;\n b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n b = (b << 22 | b >>> 10) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n b = (b << 20 | b >>> 12) + c << 0;\n a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n a = (a << 5 | a >>> 27) + b << 0;\n d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n d = (d << 9 | d >>> 23) + a << 0;\n c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n c = (c << 14 | c >>> 18) + d << 0;\n b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n b = (b << 20 | b >>> 12) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[5] - 378558;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[8] - 2022574463;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[11] + 1839030562;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[14] - 35309556;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[1] - 1530992060;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[4] + 1272893353;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[7] - 155497632;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[10] - 1094730640;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[13] + 681279174;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[0] - 358537222;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[3] - 722521979;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[6] + 76029189;\n b = (b << 23 | b >>> 9) + c << 0;\n bc = b ^ c;\n a += (bc ^ d) + blocks[9] - 640364487;\n a = (a << 4 | a >>> 28) + b << 0;\n d += (bc ^ a) + blocks[12] - 421815835;\n d = (d << 11 | d >>> 21) + a << 0;\n da = d ^ a;\n c += (da ^ b) + blocks[15] + 530742520;\n c = (c << 16 | c >>> 16) + d << 0;\n b += (da ^ c) + blocks[2] - 995338651;\n b = (b << 23 | b >>> 9) + c << 0;\n a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n b = (b << 21 | b >>> 11) + c << 0;\n a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n a = (a << 6 | a >>> 26) + b << 0;\n d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n d = (d << 10 | d >>> 22) + a << 0;\n c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n c = (c << 15 | c >>> 17) + d << 0;\n b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n b = (b << 21 | b >>> 11) + c << 0;\n\n if (this.first) {\n this.h0 = a + 1732584193 << 0;\n this.h1 = b - 271733879 << 0;\n this.h2 = c - 1732584194 << 0;\n this.h3 = d + 271733878 << 0;\n this.first = false;\n } else {\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n }\n };\n\n /**\n * @method hex\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.hex();\n */\n Md5.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n };\n\n /**\n * @method toString\n * @memberof Md5\n * @instance\n * @description Output hash as hex string\n * @returns {String} Hex string\n * @see {@link md5.hex}\n * @example\n * hash.toString();\n */\n Md5.prototype.toString = Md5.prototype.hex;\n\n /**\n * @method digest\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.digest}\n * @example\n * hash.digest();\n */\n Md5.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n return [\n h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n ];\n };\n\n /**\n * @method array\n * @memberof Md5\n * @instance\n * @description Output hash as bytes array\n * @returns {Array} Bytes array\n * @see {@link md5.array}\n * @example\n * hash.array();\n */\n Md5.prototype.array = Md5.prototype.digest;\n\n /**\n * @method arrayBuffer\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.arrayBuffer}\n * @example\n * hash.arrayBuffer();\n */\n Md5.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(16);\n var blocks = new Uint32Array(buffer);\n blocks[0] = this.h0;\n blocks[1] = this.h1;\n blocks[2] = this.h2;\n blocks[3] = this.h3;\n return buffer;\n };\n\n /**\n * @method buffer\n * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n * @memberof Md5\n * @instance\n * @description Output hash as ArrayBuffer\n * @returns {ArrayBuffer} ArrayBuffer\n * @see {@link md5.buffer}\n * @example\n * hash.buffer();\n */\n Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n /**\n * @method base64\n * @memberof Md5\n * @instance\n * @description Output hash as base64 string\n * @returns {String} base64 string\n * @see {@link md5.base64}\n * @example\n * hash.base64();\n */\n Md5.prototype.base64 = function () {\n var v1, v2, v3, base64Str = '', bytes = this.array();\n for (var i = 0; i < 15;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n BASE64_ENCODE_CHAR[v3 & 63];\n }\n v1 = bytes[i];\n base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n '==';\n return base64Str;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n /**\n * @method md5\b\n * @description Md5 hash function, export to global in browsers.\n * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n * @returns {String} md5 hashes\n * @example\n * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n *\n * // It also supports UTF-8 encoding\n * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n *\n * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n */\n root.md5 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import eventTypes from './eventTypes';\r\nimport environments from './utils/environments'\r\nimport { defaultServers } from './config';\r\nimport Logger from './Logger';\r\nimport debounce from 'lodash/debounce'\r\nimport handleStoreEvents from './store/handleStoreEvents'\r\nimport extensionsModule from './store/extensions'\r\nimport queuesModule from './store/queues'\r\nimport dialersModule from './store/dialers'\r\nimport { getServerWithHighestPriority, isValidDate } from './utils';\r\nimport { externalLogin, refreshToken, getExternalLoginUrl } from './utils/externalLogin';\r\nimport { loadExternalScript } from './utils/loadExternalScript'\r\nimport md5 from \"js-md5\";\r\n\r\n\r\nconst defaultOptions = {\r\n url: `https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls`,\r\n environment: environments.BROWSER,\r\n getSocketIOFunction: undefined,\r\n fallbackServer: {\r\n Domain: 'monitor5.voicenter.co.il',\r\n Priority: 0,\r\n },\r\n loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',\r\n refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',\r\n servers: defaultServers,\r\n token: null,\r\n loginType: 'token',\r\n forceNew: true,\r\n reconnectionDelay: 10000,\r\n reconnectionDelayMax: 10000,\r\n maxReconnectAttempts: 2,\r\n timeout: 10000,\r\n keepAliveTimeout: 60000,\r\n idleInterval: 60000 * 5, // 5 minutes\r\n protocol: 'https',\r\n transports: ['websocket'],\r\n upgrade: false,\r\n store: null,\r\n extensionsModuleName: 'sdkExtensions',\r\n queuesModuleName: 'sdkQueues',\r\n dialersModuleName: 'sdkDialers',\r\n serverFetchStrategy: 'remote', // get servers from external url options: remote | static\r\n serverType: null, // can be 1 or 2. 2 is used for chrome extension\r\n};\r\n\r\nlet allConnections = [];\r\nlet listenersMap = new Map();\r\n\r\nclass EventsSDK {\r\n constructor(options = {}) {\r\n this.options = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n this.argumentOptions = {\r\n ...options\r\n }\r\n if (!this.options.loginType) {\r\n throw new Error('A login type should be provided');\r\n }\r\n this.Logger = new Logger(this.options);\r\n this.servers = [];\r\n this.server = null;\r\n this.socket = null;\r\n this.connected = false;\r\n this.connectionEstablished = false;\r\n this._lastEventTimestamp = new Date().getTime();\r\n this._initReconnectOptions();\r\n this._listenersMap = listenersMap;\r\n this._retryConnection = debounce(this._connect.bind(this), this.reconnectOptions.reconnectionDelay, {\r\n leading: true,\r\n trailing: false\r\n });\r\n this._lastLoginTimestamp = null;\r\n this._handleLocalEvents = false;\r\n this._registerExtensionsModule();\r\n this._registerQueueModule();\r\n this._registerDialerModule();\r\n }\r\n\r\n getLastEventTimestamp() {\r\n return this._lastEventTimestamp\r\n }\r\n _reSync () {\r\n this.emit(eventTypes.RESYNC, {\r\n cache: false\r\n });\r\n }\r\n _registerExtensionsModule() {\r\n const moduleName = this.options.extensionsModuleName || 'sdkExtensions'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, extensionsModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerQueueModule() {\r\n const moduleName = this.options.queuesModuleName || 'sdkQueues'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, queuesModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _registerDialerModule() {\r\n const moduleName = this.options.dialersModuleName || 'sdkDialers'\r\n if (!this._validateStoreModule(moduleName)) {\r\n return\r\n }\r\n this.options.store.registerModule(moduleName, dialersModule)\r\n this._handleLocalEvents = true\r\n }\r\n\r\n _validateStoreModule(moduleName) {\r\n const { store } = this.options\r\n if (!store) {\r\n return false\r\n }\r\n if (store.state[moduleName]) {\r\n store.unregisterModule(moduleName)\r\n }\r\n return true\r\n }\r\n\r\n _initReconnectOptions() {\r\n this.reconnectOptions = {\r\n retryCount: 1,\r\n maxReconnectAttempts: this.options.maxReconnectAttempts,\r\n reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min\r\n minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds\r\n maxReconnectionDelay: 60000 * 5 // 5 minutes\r\n }\r\n }\r\n\r\n _onConnect() {\r\n this._initReconnectDelays();\r\n this.connected = true;\r\n this.Logger.log(eventTypes.CONNECT, this.reconnectOptions);\r\n }\r\n\r\n _initReconnectDelays() {\r\n this.reconnectOptions.retryCount = 1;\r\n let minReconnectDelay = this.reconnectOptions.minReconnectionDelay;\r\n this.reconnectOptions.reconnectionDelay = minReconnectDelay;\r\n this.socket.io.reconnectionDelay(minReconnectDelay);\r\n this.socket.io.reconnectionDelayMax(minReconnectDelay);\r\n }\r\n\r\n _onConnectError(data) {\r\n this._retryConnection('next', true);\r\n this.connected = false;\r\n this.Logger.log(eventTypes.CONNECT_ERROR, data)\r\n }\r\n\r\n _onError(err) {\r\n this.Logger.log(eventTypes.ERROR, err);\r\n }\r\n\r\n _onReconnectFailed() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions);\r\n }\r\n\r\n _onConnectTimeout() {\r\n this._retryConnection('next',true);\r\n this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions)\r\n }\r\n\r\n _onReconnectAttempt() {\r\n this.connected = false;\r\n if (this.reconnectOptions.retryCount >= this.reconnectOptions.maxReconnectAttempts) {\r\n this._retryConnection('next',true);\r\n return;\r\n }\r\n if (this.reconnectOptions.reconnectionDelay < this.reconnectOptions.maxReconnectionDelay) {\r\n let newDelay = this.reconnectOptions.minReconnectionDelay * this.reconnectOptions.retryCount;\r\n this.reconnectOptions.reconnectionDelay = newDelay;\r\n this.socket.io.reconnectionDelay(newDelay);\r\n this.socket.io.reconnectionDelayMax(newDelay);\r\n }\r\n this.reconnectOptions.retryCount++;\r\n this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions)\r\n }\r\n\r\n _onDisconnect(reason) {\r\n this.connected = false;\r\n this.Logger.log(eventTypes.DISCONNECT, reason);\r\n this._connect('next', true)\r\n }\r\n\r\n _onKeepAlive(data) {\r\n if (typeof data === 'object' && data.errorCode !== 0) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (data && this.connected) {\r\n this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE);\r\n this._lastEventTimestamp = new Date().getTime()\r\n } else {\r\n this._initSocketConnection();\r\n }\r\n }\r\n\r\n async _onLoginResponse(data) {\r\n if (data.Client) {\r\n await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction)\r\n }\r\n if (data.URL) {\r\n this.server = {\r\n Priority: 0,\r\n Domain: data.URL.replace('https://', '')\r\n }\r\n }\r\n if (data.URLList && Array.isArray(data.URLList)) {\r\n this.servers = data.URLList.map((url, index) => {\r\n return {\r\n Priority: index,\r\n Domain: url.replace('https://', '')\r\n }\r\n })\r\n }\r\n if (data.Token) {\r\n this.options.token = data.Token;\r\n this.token = data.Token\r\n await this._connect('default', true)\r\n }\r\n if (data.TokenExpiry) {\r\n this.options.tokenExpiry = data.TokenExpiry\r\n }\r\n if (data.RefreshToken) {\r\n this.options.refreshToken = data.RefreshToken\r\n this._handleTokenExpiry()\r\n }\r\n\r\n }\r\n\r\n _handleTokenExpiry() {\r\n const date = new Date(this.options.tokenExpiry)\r\n if (!isValidDate(date)) {\r\n return\r\n }\r\n const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire\r\n setTimeout(async () => {\r\n let Socket = null\r\n const res = await refreshToken(this.options.refreshTokenUrl, this.options.refreshToken)\r\n if(res.Data){\r\n Socket = res.Data.Socket;\r\n return await this._onLoginResponse(Socket)\r\n }\r\n throw new Error(`Error on refreshToken`)\r\n }, timeout)\r\n }\r\n\r\n _parsePacket(packet) {\r\n if (!packet.data) {\r\n return {};\r\n }\r\n let name = packet.data[0];\r\n let data = packet.data[1];\r\n return {\r\n name,\r\n data\r\n };\r\n }\r\n\r\n async _connect(server = 'default', skipLogin = false) {\r\n let serverToConnect = null;\r\n if (server === 'default') {\r\n serverToConnect = this._findCurrentServer();\r\n } else if (server === 'next') {\r\n serverToConnect = this._findNextAvailableServer()\r\n } else if (server === 'prev') {\r\n serverToConnect = this._findMaxPriorityServer()\r\n } else {\r\n throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`)\r\n }\r\n if (!serverToConnect) {\r\n this.server = this._findCurrentServer();\r\n }\r\n this._initSocketConnection();\r\n this._initSocketEvents();\r\n this._initKeepAlive();\r\n this._initReconnectDelays();\r\n if (skipLogin) {\r\n return\r\n }\r\n await this.login(this.options.loginType)\r\n }\r\n\r\n _checkInit() {\r\n if (!this.connectionEstablished) {\r\n throw new Error('Make sure you call \"sdk.init()\" before doing other operations.')\r\n }\r\n }\r\n\r\n _initSocketConnection() {\r\n let domain = this.server.Domain;\r\n let protocol = this.options.protocol;\r\n let url = `${protocol}://${domain}`;\r\n this.Logger.log('Connecting to..', url);\r\n this.closeAllConnections();\r\n const options = {\r\n reconnection: false,\r\n perMessageDeflate: false,\r\n upgrade: false,\r\n transports: ['websocket'],\r\n debug: false\r\n }\r\n if (this.token) {\r\n options.query = {\r\n token: this.token\r\n }\r\n }\r\n this.socket = self.io(url, options)\r\n\r\n allConnections.push(this.socket);\r\n this.connectionEstablished = true;\r\n }\r\n _initSocketEvents() {\r\n this.socket\r\n .on(eventTypes.RECONNECT_ATTEMPT, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.RECONNECT_FAILED, data => this._onReconnectFailed(data))\r\n .on(eventTypes.CONNECT, data => this._onConnect(data))\r\n .on(eventTypes.CONNECT_TIMEOUT , data => this._onConnectTimeout(data))\r\n .on(eventTypes.CONNECT_ERROR, data => this._onConnectError(data))\r\n .on(eventTypes.RECONNECT_ERROR, data => this._onReconnectAttempt(data))\r\n .on(eventTypes.ERROR, data => this._onError(data))\r\n .on(eventTypes.DISCONNECT, data => this._onDisconnect(data))\r\n this.socket.onpacket = this._onEvent.bind(this)\r\n this.socket.onevent = this._onEvent.bind(this)\r\n }\r\n\r\n _initKeepAlive() {\r\n if (this.keepAliveInterval) {\r\n clearInterval(this.keepAliveInterval)\r\n }\r\n\r\n if (this.idleInterval) {\r\n clearInterval((this.idleInterval))\r\n }\r\n this.keepAliveInterval = setInterval(async () => {\r\n const now = new Date().getTime()\r\n const delta = this.options.keepAliveTimeout * 2\r\n\r\n if (now > this.getLastEventTimestamp() + delta) {\r\n await this._connect('next', true)\r\n return\r\n }\r\n if (!this.socket) {\r\n this._initSocketConnection();\r\n return\r\n }\r\n if (now > this.getLastEventTimestamp() + this.options.keepAliveTimeout) {\r\n this.emit(eventTypes.KEEP_ALIVE, this.options.token);\r\n return\r\n }\r\n\r\n }, this.options.keepAliveTimeout);\r\n\r\n // this.idleInterval = setInterval(() => {\r\n // this.reSync(false)\r\n // }, this.options.idleInterval)\r\n }\r\n\r\n _findCurrentServer() {\r\n let server = null;\r\n if (this.servers.length) {\r\n server = this.servers[0];\r\n }\r\n this.server = server;\r\n if (!this.server) {\r\n this.server = this.options.fallbackServer\r\n }\r\n return this.server;\r\n }\r\n\r\n _findNextAvailableServer() {\r\n let currentServerPriority = this.server.Priority;\r\n this.Logger.log(`Failover -> Trying to find another server`);\r\n if (currentServerPriority === this.servers.length - 1) {\r\n return this._findMaxPriorityServer()\r\n }\r\n let nextServerPriority = currentServerPriority + 1\r\n let nextServer = this.servers.find(server => server.Priority === nextServerPriority);\r\n if (!nextServer) {\r\n nextServer = this._findMaxPriorityServer();\r\n if (!nextServer) {\r\n return\r\n }\r\n }\r\n if (this.server.Domain !== nextServer.Domain) {\r\n this.server = nextServer;\r\n return this.server\r\n }\r\n this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server);\r\n return null\r\n }\r\n\r\n _findMaxPriorityServer() {\r\n this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer');\r\n let maxPriorityServer = getServerWithHighestPriority(this.servers);\r\n if (!this.server) {\r\n this.server = maxPriorityServer;\r\n return this.server\r\n }\r\n if (this.server && maxPriorityServer.Domain !== this.server.Domain) {\r\n this.server = maxPriorityServer;\r\n this.Logger.log(`Fallback -> Trying to find previous server`, this.server);\r\n return this.server\r\n }\r\n return null\r\n }\r\n\r\n async _getServers() {\r\n // Ignore server fetch if we have a list of servers passed via options\r\n if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {\r\n this.servers = this.argumentOptions.servers\r\n }\r\n }\r\n\r\n _onEvent(packet) {\r\n if (!packet.data) {\r\n return;\r\n }\r\n let evt = this._parsePacket(packet);\r\n this.Logger.log(`New event -> ${evt.name}`, evt);\r\n this._lastEventTimestamp = new Date().getTime()\r\n this._listenersMap.forEach((callback, eventName) => {\r\n if (eventName === '*') {\r\n callback(evt);\r\n } else if (evt.name === eventName) {\r\n callback(evt);\r\n }\r\n })\r\n const eventMappings = {\r\n [eventTypes.KEEP_ALIVE_RESPONSE]: this._onKeepAlive,\r\n [eventTypes.LOGIN_RESPONSE]: this._onLoginResponse,\r\n [eventTypes.EXTENSION_UPDATED]: this._reSync,\r\n [eventTypes.QUEUES_UPDATED]: this._reSync,\r\n [eventTypes.DIALERS_UPDATED]: this._reSync,\r\n [eventTypes.LOGIN_STATUS]: () => {\r\n if (!this.connected) {\r\n this._onConnect()\r\n }\r\n }\r\n };\r\n const eventHandler = eventMappings[evt.name];\r\n if (eventHandler && typeof eventHandler === 'function') {\r\n eventHandler.call(this, evt.data);\r\n }\r\n if (this._handleLocalEvents) {\r\n handleStoreEvents({\r\n eventData: evt,\r\n ...this.options\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initializes socket connection. Should be called before any other action\r\n * @return {Promise}\r\n */\r\n async init() {\r\n if (this.connectionEstablished) {\r\n return true;\r\n }\r\n if (this.socket) {\r\n this.emit(eventTypes.CLOSE);\r\n }\r\n await this._getToken();\r\n await this._getTabsSession();\r\n await this.login(this.options.loginType)\r\n await this._getServers();\r\n return true;\r\n }\r\n\r\n /**\r\n * Sets the monitor code token\r\n * @param token\r\n */\r\n async setToken(token) {\r\n this.options.token = token\r\n this.disconnect()\r\n await this.init()\r\n }\r\n\r\n /**\r\n * Closes all existing connections\r\n */\r\n closeAllConnections() {\r\n allConnections.forEach(connection => {\r\n connection.close()\r\n connection.disconnect()\r\n })\r\n allConnections = []\r\n if (this.socket) {\r\n this.socket.disconnect()\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the socket instance from the servers\r\n */\r\n disconnect() {\r\n this._listenersMap = new Map();\r\n this.closeAllConnections()\r\n }\r\n\r\n /**\r\n * Listens for new events\r\n * @param {string} eventName (name of the event, * for all events)\r\n * @param {function} callback (callback function when even with the specified name is received)\r\n */\r\n on(eventName, callback) {\r\n this._listenersMap.set(eventName, callback);\r\n this._checkInit()\r\n }\r\n\r\n /**\r\n * Emits an event to the server\r\n * @param {string} eventName (name of the event)\r\n * @param {object} data (data for the event)\r\n */\r\n\r\n emit(eventName, data = {}) {\r\n this._checkInit();\r\n this.Logger.log(`EMIT -> ${eventName}`, data);\r\n this.socket.emit(eventName, data);\r\n }\r\n\r\n /**\r\n * Calls resync event to resync socket data\r\n * @param cache\r\n */\r\n reSync(cache = true) {\r\n this.emit(eventTypes.RESYNC, { cache })\r\n }\r\n\r\n async setMonitorUrl(url) {\r\n const oldUrl = this.options.url\r\n const oldStrategy = this.options.serverFetchStrategy\r\n try {\r\n if (!url) {\r\n return\r\n }\r\n this.options.url = url\r\n this.options.serverFetchStrategy = 'remote'\r\n await this.init()\r\n } catch (err) {\r\n this._onError(err)\r\n this.options.url = oldUrl\r\n this.options.serverFetchStrategy = oldStrategy\r\n await this.init()\r\n }\r\n }\r\n\r\n _getToken() {\r\n const { loginType } = this.options\r\n this.token = this.options.token;\r\n if (loginType === 'token') {\r\n if (!this.token) {\r\n throw new Error('Token login type expects the token option to be provided');\r\n }\r\n }\r\n }\r\n _getTabsSession() {\r\n if (this.options.environment !== environments.BROWSER) {\r\n return Promise.resolve()\r\n }\r\n\r\n if (!window.sessionStorage.length) {\r\n // Ask other tabs for session storage\r\n localStorage.setItem('getSessionStorage', Date.now());\r\n }\r\n\r\n window.addEventListener('storage', (event) => {\r\n if (event.key === 'getSessionStorage') {\r\n // Some tab asked for the sessionStorage -> send it\r\n localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage));\r\n localStorage.removeItem('sessionStorage');\r\n } else if (event.key === 'sessionStorage' && !sessionStorage.length) {\r\n // sessionStorage is empty -> fill it\r\n const data = JSON.parse(event.newValue)\r\n\r\n for (let key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n window.sessionStorage.setItem(key, data[key]);\r\n }\r\n }\r\n }\r\n })\r\n\r\n return new Promise(resolve => setTimeout((resolve), 200))\r\n }\r\n\r\n /**\r\n * Login (logs in based on the token/credentials provided)\r\n * @param type (login type. Can be token/user/code/account)\r\n * @return {Promise}\r\n */\r\n login(type = 'token') {\r\n // throttle login for 1 second\r\n let payload = {\r\n token: this.options.token,\r\n email: this.options.email,\r\n username: this.options.username,\r\n password: this.options.password\r\n }\r\n let key = md5(JSON.stringify(payload))\r\n const delay = 1000;\r\n\r\n if (this._lastLoginTimestamp + delay > new Date().getTime()) {\r\n return Promise.resolve()\r\n }\r\n\r\n this._lastLoginTimestamp = new Date().getTime()\r\n\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n let loginSession = window.sessionStorage.getItem(key);\r\n\r\n if (loginSession) {\r\n loginSession = JSON.parse(loginSession)\r\n this.Logger.log('got data from session', loginSession);\r\n await this._onLoginResponse(loginSession)\r\n return resolve(loginSession);\r\n }\r\n } catch (err) {\r\n this.Logger.log('Error on getting session', err)\r\n }\r\n\r\n try {\r\n const url = getExternalLoginUrl(this.options.loginUrl, type)\r\n const res = await externalLogin(url, payload)\r\n await this._onLoginResponse(res)\r\n\r\n if (this.options.environment === environments.BROWSER) {\r\n window.sessionStorage.setItem(key, JSON.stringify(res));\r\n }\r\n\r\n resolve(res)\r\n } catch (err) {\r\n this.servers = this.argumentOptions.servers || defaultServers;\r\n reject(err)\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default EventsSDK;\r\n","const version = '__VERSION__'\r\nimport sdk from './sdk'\r\nif (typeof window !== 'undefined') {\r\n // Make it available on window\r\n window.EventsSDK = sdk\r\n}\r\n\r\nexport default sdk\r\n"],"names":["LOGIN_STATUS","LOGIN","LOGIN_USER","LOGIN_CODE","LOGIN_ACCOUNT","LOGIN_RESPONSE","QUEUE_EVENT","QUEUES_UPDATED","DIALERS_UPDATED","EXTENSION_EVENT","EXTENSION_UPDATED","ALL_EXTENSION_STATUS","CONNECT","CONNECT_ERROR","CONNECT_TIMEOUT","DISCONNECT","PONG","RECONNECT","RECONNECT_ATTEMPT","RESYNC","RECONNECTING","RECONNECT_ERROR","RECONNECT_FAILED","KEEP_ALIVE","KEEP_ALIVE_RESPONSE","CLOSE","ERROR","ALL_DIALERS_STATUS","DIALER_EVENT","BROWSER","CHROME_EXTENSION","defaultServers","Logger","options","debug","message","data","toLog","JSON","stringify","now","Date","toUTCString","console","log","error","this","_log","_error","isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","e","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","sdkEventReasons","NEWCALL","ANSWER","HANGUP","offlineEvents","eventTypes","isSocketOffline","event","name","includes","onNewEvent","eventData","store","extensionsModuleName","queuesModuleName","dialersModuleName","commit","dispatch","extensions","extension","reason","ivrid","ivruniqueid","extensionIndex","state","findIndex","userID","queues","queue","queueIndex","all","QueueID","dialers","dialer","dialerIndex","campaignID","callStatuses","CALLING","HOLD","ISRAEL_TIMEZONE_OFFSET","MINUTE","LOGOUT_STATUS","HOLD_STATUS","types","SET_EXTENSIONS","UPDATE_EXTENSIONS","SET_SERVER_TIME","SET_IS_SOCKET_OFFLINE","serverTime","serverDelta","serverOffset","offlineSocketTimestamp","mutations","splice","servertimeoffset","servertime","getTime","actions","setExtensions","updateExtension","isCallOnHold","status","callstatus","toLowerCase","answered","getters","isNaN","extensionsWithCalls","hideLoggedOutUsers","groupedExtensions","forEach","calls","filter","push","representativeStatus","extensionCountByStatus","el","namespaced","SET_QUEUES","UPDATE_QUEUES","setQueues","updateQueue","queueWithActiveCalls","Calls","allQueueCalls","allCalls","filterQueuesByIds","queueIds","Array","isArray","SET_DIALERS","UPDATE_DIALERS","setDialers","updateDialers","getAllDialers","getAllDialersWithTypeIVR","getAllDialersWithTypeAUTOMATIC","getServerWithHighestPriority","servers","chosenServer","maxPriority","Number","MAX_SAFE_INTEGER","server","Priority","isValidDate","date","async","externalLogin","url","email","password","token","username","body","pin","res","fetch","method","headers","json","Error","Data","Socket","getExternalLoginUrl","baseUrl","loginType","refreshToken","oldRefreshToken","loadBrowserScript","Promise","resolve","reject","script","document","createElement","src","onload","onerror","append","loadExtensionScript","text","eval","loadExternalScript","environment","getSocketIOFunction","environments","io","WINDOW","window","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","process","versions","node","COMMON_JS","JS_MD5_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","buffer","Uint8Array","Uint32Array","obj","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","constructor","createOutputMethod","outputType","Md5","update","createMethod","nodeWrap","create","i","crypto","Buffer","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","start","bytes","hBytes","finalized","hashed","first","notString","code","charCodeAt","lastByteIndex","hash","finalize","a","b","c","d","bc","da","hex","array","arrayBuffer","base64","v1","v2","v3","base64Str","md5","defaultOptions","fallbackServer","Domain","loginUrl","refreshTokenUrl","forceNew","reconnectionDelay","reconnectionDelayMax","maxReconnectAttempts","timeout","keepAliveTimeout","idleInterval","protocol","transports","upgrade","serverFetchStrategy","serverType","allConnections","listenersMap","Map","EventsSDK","argumentOptions","socket","connected","connectionEstablished","_lastEventTimestamp","_initReconnectOptions","_listenersMap","_retryConnection","_connect","bind","reconnectOptions","_lastLoginTimestamp","_handleLocalEvents","_registerExtensionsModule","_registerQueueModule","_registerDialerModule","emit","cache","moduleName","_validateStoreModule","registerModule","extensionsModule","queuesModule","dialersModule","unregisterModule","retryCount","minReconnectionDelay","maxReconnectionDelay","_initReconnectDelays","minReconnectDelay","err","newDelay","_typeof","errorCode","_initSocketConnection","Client","URL","URLList","map","Token","TokenExpiry","tokenExpiry","RefreshToken","_handleTokenExpiry","_this","_onLoginResponse","packet","skipLogin","serverToConnect","_findCurrentServer","_findNextAvailableServer","_findMaxPriorityServer","_initSocketEvents","_initKeepAlive","login","domain","closeAllConnections","reconnection","perMessageDeflate","query","on","_this2","_onReconnectAttempt","_onReconnectFailed","_onConnect","_onConnectTimeout","_onConnectError","_onError","_onDisconnect","onpacket","_onEvent","onevent","keepAliveInterval","clearInterval","setInterval","delta","_this3","getLastEventTimestamp","currentServerPriority","nextServerPriority","nextServer","find","maxPriorityServer","evt","_parsePacket","callback","eventName","eventHandler","_onKeepAlive","_reSync","_this4","handleStoreEvents","_getToken","_getTabsSession","_getServers","disconnect","init","connection","close","set","_checkInit","oldUrl","oldStrategy","sessionStorage","localStorage","setItem","addEventListener","key","removeItem","parse","newValue","payload","delay","loginSession","getItem","_this5","sdk"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..e0eefa37 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,17396 @@ +{ + "name": "voicenter-events-sdk", + "version": "0.8.10", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@achrinza/node-ipc": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.2.tgz", + "integrity": "sha512-b90U39dx0cU6emsOvy5hxU4ApNXnE3+Tuo8XQZfiKTGelDwpMwBVgBP7QX6dGTcJgu/miyJuNJ/2naFBliNWEw==", + "dev": true, + "requires": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + } + }, + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", + "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "dev": true + }, + "@babel/core": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.12.tgz", + "integrity": "sha512-44ODe6O1IVz9s2oJE3rZ4trNNKTX9O7KpQpfAP4t8QII/zwrVRHL7i2pxhqtcY7tqMLrrKfMlBKnm1QlrRFs5w==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.12", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-module-transforms": "^7.17.12", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.12", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.12", + "@babel/types": "^7.17.12", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.12.tgz", + "integrity": "sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw==", + "dev": true, + "requires": { + "@babel/types": "^7.17.12", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", + "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.12.tgz", + "integrity": "sha512-sZoOeUTkFJMyhqCei2+Z+wtH/BehW8NVKQt7IRUQlRiOARuXymJYfN/FCcI8CvVbR0XVyDM6eLFOlR7YtiXnew==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", + "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.12.tgz", + "integrity": "sha512-t5s2BeSWIghhFRPh9XMn6EIGmvn8Lmw5RVASJzkIx1mSemubQQBNIZiQD7WzaFmaHIrjAec4x8z9Yx8SjJ1/LA==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.12", + "@babel/types": "^7.17.12" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helpers": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0" + } + }, + "@babel/highlight": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.12.tgz", + "integrity": "sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz", + "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", + "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.17.12" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", + "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", + "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.12.tgz", + "integrity": "sha512-8ILyDG6eL14F8iub97dVc8q35Md0PJYAnA5Kz9NACFOkt6ffCcr0FISyUPKHsvuAy36fkpIitxZ9bVYPFMGQHA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.12.tgz", + "integrity": "sha512-gL0qSSeIk/VRfTDgtQg/EtejENssN/r3p5gJsPie1UacwiHibprpr19Z0pcK3XKuqQvjGVxsQ37Tl1MGfXzonA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.12", + "charcodes": "^0.2.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", + "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", + "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", + "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", + "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.12.tgz", + "integrity": "sha512-6l9cO3YXXRh4yPCPRA776ZyJ3RobG4ZKJZhp7NDRbKIOeV3dBPG8FXCF7ZtiO2RTCIOkQOph1xDDcc01iWVNjQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.17.12" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", + "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", + "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", + "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", + "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz", + "integrity": "sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", + "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", + "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", + "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", + "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.17.12.tgz", + "integrity": "sha512-jw8XW/B1i7Lqwqj2CbrViPcZijSxfguBWZP2aN59NHgxUyO/OcO1mfdCxH13QhN5LbWhPkX+f+brKGhZTiqtZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.17.12.tgz", + "integrity": "sha512-cvO7lc7pZat6BsvH6l/EGaI8zpl8paICaoGk+7x7guvtfak/TbIf66nYmJOH13EuG0H+Xx3M+9LQDtSvZFKXKw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", + "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.12.tgz", + "integrity": "sha512-P8pt0YiKtX5UMUL5Xzsc9Oyij+pJE6JuC+F1k0/brq/OOGs5jDa1If3OY0LRWGvJsJhI+8tsiecL3nJLc0WTlg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", + "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.17.12.tgz", + "integrity": "sha512-76lTwYaCxw8ldT7tNmye4LLwSoKDbRCBzu6n/DcK/P3FOR29+38CIIaVIZfwol9By8W/QHORYEnYSLuvcQKrsg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", + "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.17.12.tgz", + "integrity": "sha512-p5rt9tB5Ndcc2Za7CeNxVf7YAjRcUMR6yi8o8tKjb9KhRkEvXwa+C0hj6DA5bVDkKRxB0NYhMUGbVKoFu4+zEA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.12.tgz", + "integrity": "sha512-tVPs6MImAJz+DiX8Y1xXEMdTk5Lwxu9jiPjlS+nv5M2A59R7+/d1+9A8C/sbuY0b3QjIxqClkj6KAplEtRvzaA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.17.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.12.tgz", + "integrity": "sha512-NVhDb0q00hqZcuLduUf/kMzbOQHiocmPbIxIvk23HLiEqaTKC/l4eRxeC7lO63M72BmACoiKOcb9AkOAJRerpw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.17.12.tgz", + "integrity": "sha512-BnsPkrUHsjzZGpnrmJeDFkOMMljWFHPjDc9xDcz71/C+ybF3lfC3V4m3dwXPLZrE5b3bgd4V+3/Pj+3620d7IA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", + "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.17.12.tgz", + "integrity": "sha512-CaOtzk2fDYisbjAD4Sd1MTKGVIpRtx9bWLyj24Y/k6p4s4gQ3CqDGJauFJxt8M/LEx003d0i3klVqnN73qvK3w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", + "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", + "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/types": "^7.17.12" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", + "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", + "dev": true, + "requires": { + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", + "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.12.tgz", + "integrity": "sha512-xsl5MeGjWnmV6Ui9PfILM2+YRpa3GqLOrczPpXV3N2KCgQGU+sU8OfzuMbjkIdfvZEZIm+3y0V7w58sk0SGzlw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", + "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.17.12.tgz", + "integrity": "sha512-kAKJ7DX1dSRa2s7WN1xUAuaQmkTpN+uig4wCKWivVXIObqGbVTUlSavHyfI2iZvz89GFAMGm9p2DBJ4Y1Tp0hw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", + "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.17.12.tgz", + "integrity": "sha512-ICbXZqg6hgenjmwciVI/UfqZtExBrZOrS8sLB5mTHGO/j08Io3MmooULBiijWk9JBknjM3CbbtTc/0ZsqLrjXQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-typescript": "^7.17.12" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/preset-env": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz", + "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.3.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.3.4", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.3.4", + "@babel/plugin-transform-classes": "^7.3.4", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.2.0", + "@babel/plugin-transform-dotall-regex": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.2.0", + "@babel/plugin-transform-function-name": "^7.2.0", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "@babel/plugin-transform-modules-systemjs": "^7.3.4", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", + "@babel/plugin-transform-new-target": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-parameters": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.3.4", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.2.0", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.2.0", + "browserslist": "^4.3.4", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-typescript": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz", + "integrity": "sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.17.12" + } + }, + "@babel/runtime": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", + "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs2": { + "version": "7.17.11", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.17.11.tgz", + "integrity": "sha512-pJe8Aerb88TGVi1Xe/AE36aRCPrg+h6ktZPGl6xaJvOfTLcMMuogQu3BYcxeXPTNHhSYbmsDVYBs8CfAxeFFTg==", + "dev": true, + "requires": { + "core-js": "^2.6.12", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.12.tgz", + "integrity": "sha512-zULPs+TbCvOkIFd4FrG53xrpxvCBwLIgo6tO0tJorY7YV2IWFxUfS/lXDJbGgfyYt9ery/Gxj2niwttNnB0gIw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.12", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.12", + "@babel/types": "^7.17.12", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", + "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dev": true, + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", + "dev": true, + "requires": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@node-ipc/js-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "dev": true, + "requires": { + "easy-stack": "1.0.1" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/highlight.js": { + "version": "9.12.4", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", + "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", + "dev": true + }, + "@types/markdown-it": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-10.0.3.tgz", + "integrity": "sha512-daHJk22isOUvNssVGF2zDnnSyxHhFYhtjeX4oQaKD6QzL3ZR1QSgiD1g+Q6/WSWYVogNXYDXODtbgW/WiFCtyw==", + "dev": true, + "requires": { + "@types/highlight.js": "^9.7.0", + "@types/linkify-it": "*", + "@types/mdurl": "*", + "highlight.js": "^9.7.0" + }, + "dependencies": { + "highlight.js": { + "version": "9.18.5", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", + "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", + "dev": true + } + } + }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "17.0.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.34.tgz", + "integrity": "sha512-XImEz7XwTvDBtzlTnm8YvMqGW/ErMWBsKZ+hMTvnDIjGCKxwK5Xpc+c/oQjOauwq8M4OS11hEkpjX8rrI/eEgA==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.2.tgz", + "integrity": "sha512-/xFrPIo+4zOeNGtVMbf9rUm0N+i4pDf1ynExomqtokIJmVzR3962lJ1UE+MmexMkA0cmN9oTzg5Xcbwge0Ij2Q==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/webpack": { + "version": "4.41.32", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", + "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/webpack-dev-server": { + "version": "3.11.6", + "resolved": "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz", + "integrity": "sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ==", + "dev": true, + "requires": { + "@types/connect-history-api-fallback": "*", + "@types/express": "*", + "@types/serve-static": "*", + "@types/webpack": "^4", + "http-proxy-middleware": "^1.0.0" + } + }, + "@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", + "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==", + "dev": true + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true + } + } + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz", + "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-preset-app": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.12.1.tgz", + "integrity": "sha512-Zjy5jQaikV1Pz+ri0YgXFS7q4/5wCxB5tRkDOEIt5+4105u0Feb/pvH20nVL6nx9GyXrECFfcm7Yxr/z++OaPQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-decorators": "^7.1.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.4.0", + "@babel/preset-env": "^7.0.0 < 7.4.0", + "@babel/runtime": "^7.0.0", + "@babel/runtime-corejs2": "^7.2.0", + "@vue/babel-preset-jsx": "^1.0.0", + "babel-plugin-dynamic-import-node": "^2.2.0", + "babel-plugin-module-resolver": "3.2.0", + "core-js": "^2.6.5" + } + }, + "@vue/babel-preset-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz", + "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/babel-sugar-composition-api-inject-h": "^1.2.1", + "@vue/babel-sugar-composition-api-render-instance": "^1.2.4", + "@vue/babel-sugar-functional-vue": "^1.2.2", + "@vue/babel-sugar-inject-h": "^1.2.2", + "@vue/babel-sugar-v-model": "^1.2.3", + "@vue/babel-sugar-v-on": "^1.2.3" + } + }, + "@vue/babel-sugar-composition-api-inject-h": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz", + "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-composition-api-render-instance": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz", + "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz", + "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz", + "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz", + "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz", + "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0" + } + }, + "@vue/cli-overlay": { + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-4.5.17.tgz", + "integrity": "sha512-QKKp66VbMg+X8Qh0wgXSwgxLfxY7EIkZkV6bZ6nFqBx8xtaJQVDbTL+4zcUPPA6nygbIcQ6gvTinNEqIqX6FUQ==", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.12.1.tgz", + "integrity": "sha512-Zetvz8PikLCGomeKOKu8pC9YQ7cfxs7pGpvEOzaxGdhMnebhjAYR6i6dOB57A6N5lhxQksXCtYTv26QgfiIpdg==", + "dev": true, + "requires": { + "@babel/core": "^7.0.0", + "@vue/babel-preset-app": "^3.12.1", + "@vue/cli-shared-utils": "^3.12.1", + "babel-loader": "^8.0.5", + "webpack": "^4.0.0" + } + }, + "@vue/cli-plugin-eslint": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz", + "integrity": "sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^3.12.1", + "babel-eslint": "^10.0.1", + "eslint": "^4.19.1", + "eslint-loader": "^2.1.2", + "eslint-plugin-vue": "^4.7.1", + "globby": "^9.2.0", + "webpack": "^4.0.0", + "yorkie": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", + "dev": true, + "optional": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "optional": true + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "optional": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + } + }, + "eslint-plugin-vue": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz", + "integrity": "sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==", + "dev": true, + "optional": true, + "requires": { + "vue-eslint-parser": "^2.0.3" + } + }, + "eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "dev": true, + "optional": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true, + "optional": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true, + "optional": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "optional": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true, + "optional": true + } + } + }, + "@vue/cli-plugin-router": { + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.5.17.tgz", + "integrity": "sha512-9r9CSwqv2+39XHQPDZJ0uaTtTP7oe0Gx17m7kBhHG3FA7R7AOSk2aVzhHZmDRhzlOxjx9kQSvrOSMfUG0kV4dQ==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.17" + }, + "dependencies": { + "@vue/cli-shared-utils": { + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.17.tgz", + "integrity": "sha512-VoFNdxvTW4vZu3ne+j1Mf7mU99J2SAoRVn9XPrsouTUUJablglM8DASk7Ixhsh6ymyL/W9EADQFR6Pgj8Ujjuw==", + "dev": true, + "requires": { + "@achrinza/node-ipc": "9.2.2", + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "@vue/cli-plugin-vuex": { + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.17.tgz", + "integrity": "sha512-ck/ju2T2dmPKLWK/5QctNJs9SCb+eSZbbmr8neFkMc7GlbXw6qLWw5v3Vpd4KevdQA8QuQOA1pjUmzpCiU/mYQ==", + "dev": true + }, + "@vue/cli-service": { + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-4.5.17.tgz", + "integrity": "sha512-MqfkRYIcIUACe3nYlzNrYstJTWRXHlIqh6JCkbWbdnXWN+IfaVdlG8zw5Q0DVcSdGvkevUW7zB4UhtZB4uyAcA==", + "dev": true, + "requires": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@soda/get-current-script": "^1.0.0", + "@types/minimist": "^1.2.0", + "@types/webpack": "^4.0.0", + "@types/webpack-dev-server": "^3.11.0", + "@vue/cli-overlay": "^4.5.17", + "@vue/cli-plugin-router": "^4.5.17", + "@vue/cli-plugin-vuex": "^4.5.17", + "@vue/cli-shared-utils": "^4.5.17", + "@vue/component-compiler-utils": "^3.1.2", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^7.4.0", + "acorn-walk": "^7.1.1", + "address": "^1.1.2", + "autoprefixer": "^9.8.6", + "browserslist": "^4.12.0", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.4", + "clipboardy": "^2.3.0", + "cliui": "^6.0.0", + "copy-webpack-plugin": "^5.1.1", + "css-loader": "^3.5.3", + "cssnano": "^4.1.10", + "debug": "^4.1.1", + "default-gateway": "^5.0.5", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^4.2.0", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.9.0", + "minimist": "^1.2.5", + "pnp-webpack-plugin": "^1.6.4", + "portfinder": "^1.0.26", + "postcss-loader": "^3.0.0", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^1.4.4", + "thread-loader": "^2.1.3", + "url-loader": "^2.2.0", + "vue-loader": "^15.9.2", + "vue-loader-v16": "npm:vue-loader@^16.1.0", + "vue-style-loader": "^4.1.2", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-chain": "^6.4.0", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2" + }, + "dependencies": { + "@vue/cli-shared-utils": { + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.17.tgz", + "integrity": "sha512-VoFNdxvTW4vZu3ne+j1Mf7mU99J2SAoRVn9XPrsouTUUJablglM8DASk7Ixhsh6ymyL/W9EADQFR6Pgj8Ujjuw==", + "dev": true, + "requires": { + "@achrinza/node-ipc": "9.2.2", + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "@vue/cli-shared-utils": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz", + "integrity": "sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ==", + "dev": true, + "requires": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.1", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "^9.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.7", + "semver": "^6.0.0", + "string.prototype.padstart": "^3.0.0" + } + }, + "@vue/component-compiler": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler/-/component-compiler-3.6.0.tgz", + "integrity": "sha512-NIA0vmOI4zbtJAn69iZls8IJ8VxmguswAuiUdu8TcR+YYTYzntfw290HUCSFjzAdRg+FUWZv8r+wc3TzJ/IjwA==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^2.1.0", + "clean-css": "^4.1.11", + "hash-sum": "^1.0.2", + "postcss-modules-sync": "^1.0.0", + "source-map": "0.6.*" + }, + "dependencies": { + "@vue/component-compiler-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz", + "integrity": "sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^5.0.0", + "prettier": "1.16.3", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + } + }, + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "prettier": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz", + "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "@vue/preload-webpack-plugin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz", + "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", + "dev": true + }, + "@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "@vuepress/core": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-1.9.7.tgz", + "integrity": "sha512-u5eb1mfNLV8uG2UuxlvpB/FkrABxeMHqymTsixOnsOg2REziv9puEIbqaZ5BjLPvbCDvSj6rn+DwjENmBU+frQ==", + "dev": true, + "requires": { + "@babel/core": "^7.8.4", + "@vue/babel-preset-app": "^4.1.2", + "@vuepress/markdown": "1.9.7", + "@vuepress/markdown-loader": "1.9.7", + "@vuepress/plugin-last-updated": "1.9.7", + "@vuepress/plugin-register-components": "1.9.7", + "@vuepress/shared-utils": "1.9.7", + "@vuepress/types": "1.9.7", + "autoprefixer": "^9.5.1", + "babel-loader": "^8.0.4", + "bundle-require": "2.1.8", + "cache-loader": "^3.0.0", + "chokidar": "^2.0.3", + "connect-history-api-fallback": "^1.5.0", + "copy-webpack-plugin": "^5.0.2", + "core-js": "^3.6.4", + "cross-spawn": "^6.0.5", + "css-loader": "^2.1.1", + "esbuild": "0.14.7", + "file-loader": "^3.0.1", + "js-yaml": "^3.13.1", + "lru-cache": "^5.1.1", + "mini-css-extract-plugin": "0.6.0", + "optimize-css-assets-webpack-plugin": "^5.0.1", + "portfinder": "^1.0.13", + "postcss-loader": "^3.0.0", + "postcss-safe-parser": "^4.0.1", + "toml": "^3.0.0", + "url-loader": "^1.0.1", + "vue": "^2.6.10", + "vue-loader": "^15.7.1", + "vue-router": "^3.4.5", + "vue-server-renderer": "^2.6.10", + "vue-template-compiler": "^2.6.10", + "vuepress-html-webpack-plugin": "^3.2.0", + "vuepress-plugin-container": "^2.0.2", + "webpack": "^4.8.1", + "webpack-chain": "^6.0.0", + "webpack-dev-server": "^3.5.1", + "webpack-merge": "^4.1.2", + "webpackbar": "3.2.0" + }, + "dependencies": { + "@babel/preset-env": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.12.tgz", + "integrity": "sha512-Kke30Rj3Lmcx97bVs71LO0s8M6FmJ7tUAQI9fNId62rf0cYG1UAWwdNO9/sE0/pLEahAw1MqMorymoD12bj5Fg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-async-generator-functions": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.17.12", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.17.12", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-private-methods": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.17.12", + "@babel/plugin-transform-async-to-generator": "^7.17.12", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.17.12", + "@babel/plugin-transform-classes": "^7.17.12", + "@babel/plugin-transform-computed-properties": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.17.12", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.17.12", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.17.12", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.17.12", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.17.12", + "@babel/plugin-transform-modules-commonjs": "^7.17.12", + "@babel/plugin-transform-modules-systemjs": "^7.17.12", + "@babel/plugin-transform-modules-umd": "^7.17.12", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", + "@babel/plugin-transform-new-target": "^7.17.12", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.17.12", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.17.9", + "@babel/plugin-transform-reserved-words": "^7.17.12", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.17.12", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.17.12", + "@babel/plugin-transform-typeof-symbol": "^7.17.12", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.17.12", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + } + }, + "@vue/babel-preset-app": { + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-4.5.17.tgz", + "integrity": "sha512-iFv9J3F5VKUPcbx+TqW5qhGmAVyXQxPRpKpPOuTLFIVTzg+iwJnrqVbL4kJU5ECGDxPESW2oCVgxv9bTlDPu7w==", + "dev": true, + "requires": { + "@babel/core": "^7.11.0", + "@babel/helper-compilation-targets": "^7.9.6", + "@babel/helper-module-imports": "^7.8.3", + "@babel/plugin-proposal-class-properties": "^7.8.3", + "@babel/plugin-proposal-decorators": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.11.0", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.0", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.2.4", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.6.5", + "core-js-compat": "^3.6.5", + "semver": "^6.1.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "cache-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-3.0.1.tgz", + "integrity": "sha512-HzJIvGiGqYsFUrMjAJNDbVZoG7qQA+vy9AIoKs7s9DscNfki0I589mf2w6/tW+kkFH3zyiknoWV5Jdynu6b/zw==", + "dev": true, + "requires": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^1.0.0" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "core-js": { + "version": "3.22.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.5.tgz", + "integrity": "sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA==", + "dev": true + }, + "css-loader": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", + "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", + "dev": true, + "requires": { + "camelcase": "^5.2.0", + "icss-utils": "^4.1.0", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.14", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^2.0.6", + "postcss-modules-scope": "^2.1.0", + "postcss-modules-values": "^2.0.0", + "postcss-value-parser": "^3.3.0", + "schema-utils": "^1.0.0" + } + }, + "file-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "mini-css-extract-plugin": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz", + "integrity": "sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "^2.0.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + } + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "postcss-modules-local-by-default": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz", + "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0", + "postcss-value-parser": "^3.3.1" + } + }, + "postcss-modules-values": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz", + "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^7.0.6" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "url-loader": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", + "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^1.0.0" + } + } + } + }, + "@vuepress/markdown": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-1.9.7.tgz", + "integrity": "sha512-DFOjYkwV6fT3xXTGdTDloeIrT1AbwJ9pwefmrp0rMgC6zOz3XUJn6qqUwcYFO5mNBWpbiFQ3JZirCtgOe+xxBA==", + "dev": true, + "requires": { + "@vuepress/shared-utils": "1.9.7", + "markdown-it": "^8.4.1", + "markdown-it-anchor": "^5.0.2", + "markdown-it-chain": "^1.3.0", + "markdown-it-emoji": "^1.4.0", + "markdown-it-table-of-contents": "^0.4.0", + "prismjs": "^1.13.0" + } + }, + "@vuepress/markdown-loader": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@vuepress/markdown-loader/-/markdown-loader-1.9.7.tgz", + "integrity": "sha512-mxXF8FtX/QhOg/UYbe4Pr1j5tcf/aOEI502rycTJ3WF2XAtOmewjkGV4eAA6f6JmuM/fwzOBMZKDyy9/yo2I6Q==", + "dev": true, + "requires": { + "@vuepress/markdown": "1.9.7", + "loader-utils": "^1.1.0", + "lru-cache": "^5.1.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "@vuepress/plugin-active-header-links": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.9.7.tgz", + "integrity": "sha512-G1M8zuV9Og3z8WBiKkWrofG44NEXsHttc1MYreDXfeWh/NLjr9q1GPCEXtiCjrjnHZHB3cSQTKnTqAHDq35PGA==", + "dev": true, + "requires": { + "@vuepress/types": "1.9.7", + "lodash.debounce": "^4.0.8" + } + }, + "@vuepress/plugin-last-updated": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-last-updated/-/plugin-last-updated-1.9.7.tgz", + "integrity": "sha512-FiFBOl49dlFRjbLRnRAv77HDWfe+S/eCPtMQobq4/O3QWuL3Na5P4fCTTVzq1K7rWNO9EPsWNB2Jb26ndlQLKQ==", + "dev": true, + "requires": { + "@vuepress/types": "1.9.7", + "cross-spawn": "^6.0.5" + } + }, + "@vuepress/plugin-nprogress": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-1.9.7.tgz", + "integrity": "sha512-sI148igbdRfLgyzB8PdhbF51hNyCDYXsBn8bBWiHdzcHBx974sVNFKtfwdIZcSFsNrEcg6zo8YIrQ+CO5vlUhQ==", + "dev": true, + "requires": { + "@vuepress/types": "1.9.7", + "nprogress": "^0.2.0" + } + }, + "@vuepress/plugin-register-components": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-register-components/-/plugin-register-components-1.9.7.tgz", + "integrity": "sha512-l/w1nE7Dpl+LPMb8+AHSGGFYSP/t5j6H4/Wltwc2QcdzO7yqwC1YkwwhtTXvLvHOV8O7+rDg2nzvq355SFkfKA==", + "dev": true, + "requires": { + "@vuepress/shared-utils": "1.9.7", + "@vuepress/types": "1.9.7" + } + }, + "@vuepress/plugin-search": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-search/-/plugin-search-1.9.7.tgz", + "integrity": "sha512-MLpbUVGLxaaHEwflFxvy0pF9gypFVUT3Q9Zc6maWE+0HDWAvzMxo6GBaj6mQPwjOqNQMf4QcN3hDzAZktA+DQg==", + "dev": true, + "requires": { + "@vuepress/types": "1.9.7" + } + }, + "@vuepress/shared-utils": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@vuepress/shared-utils/-/shared-utils-1.9.7.tgz", + "integrity": "sha512-lIkO/eSEspXgVHjYHa9vuhN7DuaYvkfX1+TTJDiEYXIwgwqtvkTv55C+IOdgswlt0C/OXDlJaUe1rGgJJ1+FTw==", + "dev": true, + "requires": { + "chalk": "^2.3.2", + "escape-html": "^1.0.3", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "gray-matter": "^4.0.1", + "hash-sum": "^1.0.2", + "semver": "^6.0.0", + "toml": "^3.0.0", + "upath": "^1.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + } + } + }, + "@vuepress/theme-default": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-1.9.7.tgz", + "integrity": "sha512-NZzCLIl+bgJIibhkqVmk/NSku57XIuXugxAN3uiJrCw6Mu6sb3xOvbk0En3k+vS2BKHxAZ6Cx7dbCiyknDQnSA==", + "dev": true, + "requires": { + "@vuepress/plugin-active-header-links": "1.9.7", + "@vuepress/plugin-nprogress": "1.9.7", + "@vuepress/plugin-search": "1.9.7", + "@vuepress/types": "1.9.7", + "docsearch.js": "^2.5.2", + "lodash": "^4.17.15", + "stylus": "^0.54.8", + "stylus-loader": "^3.0.2", + "vuepress-plugin-container": "^2.0.2", + "vuepress-plugin-smooth-scroll": "^0.0.3" + } + }, + "@vuepress/types": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@vuepress/types/-/types-1.9.7.tgz", + "integrity": "sha512-moLQzkX3ED2o18dimLemUm7UVDKxhcrJmGt5C0Ng3xxrLPaQu7UqbROtEKB3YnMRt4P/CA91J+Ck+b9LmGabog==", + "dev": true, + "requires": { + "@types/markdown-it": "^10.0.0", + "@types/webpack-dev-server": "^3", + "webpack-chain": "^6.0.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", + "dev": true, + "optional": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", + "dev": true, + "optional": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "address": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", + "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", + "dev": true + }, + "agentkeepalive": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-2.2.0.tgz", + "integrity": "sha512-TnB6ziK363p7lR8QpeLC8aMr8EGYBKZTpgzQLfqTs3bR0Oo5VbKdwKf8h0dSzsYrB7lSCgfJnMZKqShvlq5Oyg==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "algoliasearch": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-3.35.1.tgz", + "integrity": "sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ==", + "dev": true, + "requires": { + "agentkeepalive": "^2.2.0", + "debug": "^2.6.9", + "envify": "^4.0.0", + "es6-promise": "^4.1.0", + "events": "^1.1.0", + "foreach": "^2.0.5", + "global": "^4.3.2", + "inherits": "^2.0.1", + "isarray": "^2.0.1", + "load-script": "^1.0.0", + "object-keys": "^1.0.11", + "querystring-es3": "^0.2.1", + "reduce": "^1.0.1", + "semver": "^5.1.0", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", + "dev": true + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autocomplete.js": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/autocomplete.js/-/autocomplete.js-0.36.0.tgz", + "integrity": "sha512-jEwUXnVMeCHHutUt10i/8ZiRaCb0Wo+ZyKxeGsYwBDtw6EJHqEeDrq4UwZRD8YBSvp3g6klP678il2eeiVXN2Q==", + "dev": true, + "requires": { + "immediate": "^3.2.3" + } + }, + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "optional": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "optional": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "optional": true + } + } + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-module-resolver": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", + "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==", + "dev": true, + "requires": { + "find-babel-config": "^1.1.0", + "glob": "^7.1.2", + "pkg-up": "^2.0.0", + "reselect": "^3.0.1", + "resolve": "^1.4.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "babel-plugin-transform-async-to-promises": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.18.tgz", + "integrity": "sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "bili": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/bili/-/bili-4.10.1.tgz", + "integrity": "sha512-JM6PhdvKohifJiCLygfgrOMxkquk9NdeRpYDNM7ijou2wGVCsGOI2v4lLklBDizJh7y0oi62i0xGfA5IUT8YKw==", + "dev": true, + "requires": { + "@babel/core": "^7.9.6", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.3.1", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", + "@babel/plugin-transform-react-jsx": "^7.3.0", + "@babel/preset-env": "^7.9.6", + "@babel/preset-typescript": "^7.1.0", + "@rollup/plugin-replace": "^2.3.2", + "babel-plugin-transform-async-to-promises": "^0.8.15", + "chalk": "^2.4.2", + "ora": "^3.0.0", + "rollup": "^1.1.2", + "rollup-plugin-babel": "^4.3.2", + "rollup-plugin-buble": "^0.19.6", + "rollup-plugin-commonjs": "^9.2.0", + "rollup-plugin-hashbang": "^2.2.2", + "rollup-plugin-json": "^3.1.0", + "rollup-plugin-node-resolve": "^4.2.3", + "rollup-plugin-postcss": "^2.0.3", + "rollup-plugin-terser": "^5.3.0" + }, + "dependencies": { + "@babel/preset-env": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.12.tgz", + "integrity": "sha512-Kke30Rj3Lmcx97bVs71LO0s8M6FmJ7tUAQI9fNId62rf0cYG1UAWwdNO9/sE0/pLEahAw1MqMorymoD12bj5Fg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-async-generator-functions": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.17.12", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.17.12", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-private-methods": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.17.12", + "@babel/plugin-transform-async-to-generator": "^7.17.12", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.17.12", + "@babel/plugin-transform-classes": "^7.17.12", + "@babel/plugin-transform-computed-properties": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.17.12", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.17.12", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.17.12", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.17.12", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.17.12", + "@babel/plugin-transform-modules-commonjs": "^7.17.12", + "@babel/plugin-transform-modules-systemjs": "^7.17.12", + "@babel/plugin-transform-modules-umd": "^7.17.12", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", + "@babel/plugin-transform-new-target": "^7.17.12", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.17.12", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.17.9", + "@babel/plugin-transform-reserved-words": "^7.17.12", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.17.12", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.17.12", + "@babel/plugin-transform-typeof-symbol": "^7.17.12", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.17.12", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + } + } + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "optional": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", + "escalade": "^3.1.1", + "node-releases": "^2.0.3", + "picocolors": "^1.0.0" + } + }, + "buble": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/buble/-/buble-0.19.8.tgz", + "integrity": "sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==", + "dev": true, + "requires": { + "acorn": "^6.1.1", + "acorn-dynamic-import": "^4.0.0", + "acorn-jsx": "^5.0.1", + "chalk": "^2.4.2", + "magic-string": "^0.25.3", + "minimist": "^1.2.0", + "os-homedir": "^2.0.0", + "regexpu-core": "^4.5.4" + }, + "dependencies": { + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "bundle-require": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-2.1.8.tgz", + "integrity": "sha512-oOEg3A0hy/YzvNWNowtKD0pmhZKseOFweCbgyMqTIih4gRY1nJWsvrOCT27L9NbIyL5jMjTFrAUpGxxpW68Puw==", + "dev": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cac": { + "version": "6.7.12", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.12.tgz", + "integrity": "sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "dev": true, + "requires": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "dev": true + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", + "dev": true, + "optional": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", + "dev": true, + "optional": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001341", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", + "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==", + "dev": true + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", + "dev": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", + "dev": true + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", + "dev": true, + "optional": true + }, + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true, + "optional": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + } + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "optional": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz", + "integrity": "sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==", + "dev": true, + "requires": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + } + } + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, + "core-js-compat": { + "version": "3.22.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.5.tgz", + "integrity": "sha512-rEF75n3QtInrYICvJjrAgV03HwKiYvtKHdPtaba1KucG+cNZ4NJnH9isqt979e67KZlhpbCOTwnsvnIr+CVeOg==", + "dev": true, + "requires": { + "browserslist": "^4.20.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "css-modules-loader-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", + "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.1", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "css-parse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", + "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "dev": true, + "requires": { + "css": "^2.0.0" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true + }, + "default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.5.tgz", + "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==", + "dev": true, + "requires": { + "execa": "^3.3.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "docsearch.js": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/docsearch.js/-/docsearch.js-2.6.3.tgz", + "integrity": "sha512-GN+MBozuyz664ycpZY0ecdQE0ND/LSgJKhTLA0/v3arIS3S1Rpf2OJz6A35ReMsm91V5apcmzr5/kM84cvUg+A==", + "dev": true, + "requires": { + "algoliasearch": "^3.24.5", + "autocomplete.js": "0.36.0", + "hogan.js": "^3.0.2", + "request": "^2.87.0", + "stack-utils": "^1.0.1", + "to-factory": "^1.0.0", + "zepto": "^1.2.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "optional": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + } + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + } + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.137", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", + "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "envify": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz", + "integrity": "sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==", + "dev": true, + "requires": { + "esprima": "^4.0.0", + "through": "~2.3.4" + } + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.7.tgz", + "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "esbuild": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.7.tgz", + "integrity": "sha512-+u/msd6iu+HvfysUPkZ9VHm83LImmSNnecYPfFI01pQ7TTcsFR+V0BkybZX7mPtIaI7LCrse6YRj+v3eraJSgw==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.14.7", + "esbuild-darwin-64": "0.14.7", + "esbuild-darwin-arm64": "0.14.7", + "esbuild-freebsd-64": "0.14.7", + "esbuild-freebsd-arm64": "0.14.7", + "esbuild-linux-32": "0.14.7", + "esbuild-linux-64": "0.14.7", + "esbuild-linux-arm": "0.14.7", + "esbuild-linux-arm64": "0.14.7", + "esbuild-linux-mips64le": "0.14.7", + "esbuild-linux-ppc64le": "0.14.7", + "esbuild-netbsd-64": "0.14.7", + "esbuild-openbsd-64": "0.14.7", + "esbuild-sunos-64": "0.14.7", + "esbuild-windows-32": "0.14.7", + "esbuild-windows-64": "0.14.7", + "esbuild-windows-arm64": "0.14.7" + } + }, + "esbuild-android-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.7.tgz", + "integrity": "sha512-9/Q1NC4JErvsXzJKti0NHt+vzKjZOgPIjX/e6kkuCzgfT/GcO3FVBcGIv4HeJG7oMznE6KyKhvLrFgt7CdU2/w==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.7.tgz", + "integrity": "sha512-Z9X+3TT/Xj+JiZTVlwHj2P+8GoiSmUnGVz0YZTSt8WTbW3UKw5Pw2ucuJ8VzbD2FPy0jbIKJkko/6CMTQchShQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.7.tgz", + "integrity": "sha512-68e7COhmwIiLXBEyxUxZSSU0akgv8t3e50e2QOtKdBUE0F6KIRISzFntLe2rYlNqSsjGWsIO6CCc9tQxijjSkw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.7.tgz", + "integrity": "sha512-76zy5jAjPiXX/S3UvRgG85Bb0wy0zv/J2lel3KtHi4V7GUTBfhNUPt0E5bpSXJ6yMT7iThhnA5rOn+IJiUcslQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.7.tgz", + "integrity": "sha512-lSlYNLiqyzd7qCN5CEOmLxn7MhnGHPcu5KuUYOG1i+t5A6q7LgBmfYC9ZHJBoYyow3u4CNu79AWHbvVLpE/VQQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.7.tgz", + "integrity": "sha512-Vk28u409wVOXqTaT6ek0TnfQG4Ty1aWWfiysIaIRERkNLhzLhUf4i+qJBN8mMuGTYOkE40F0Wkbp6m+IidOp2A==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.7.tgz", + "integrity": "sha512-+Lvz6x+8OkRk3K2RtZwO+0a92jy9si9cUea5Zoru4yJ/6EQm9ENX5seZE0X9DTwk1dxJbjmLsJsd3IoowyzgVg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.7.tgz", + "integrity": "sha512-OzpXEBogbYdcBqE4uKynuSn5YSetCvK03Qv1HcOY1VN6HmReuatjJ21dCH+YPHSpMEF0afVCnNfffvsGEkxGJQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.7.tgz", + "integrity": "sha512-kJd5beWSqteSAW086qzCEsH6uwpi7QRIpzYWHzEYwKKu9DiG1TwIBegQJmLpPsLp4v5RAFjea0JAmAtpGtRpqg==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.7.tgz", + "integrity": "sha512-mFWpnDhZJmj/h7pxqn1GGDsKwRfqtV7fx6kTF5pr4PfXe8pIaTERpwcKkoCwZUkWAOmUEjMIUAvFM72A6hMZnA==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.7.tgz", + "integrity": "sha512-wM7f4M0bsQXfDL4JbbYD0wsr8cC8KaQ3RPWc/fV27KdErPW7YsqshZZSjDV0kbhzwpNNdhLItfbaRT8OE8OaKA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.7.tgz", + "integrity": "sha512-J/afS7woKyzGgAL5FlgvMyqgt5wQ597lgsT+xc2yJ9/7BIyezeXutXqfh05vszy2k3kSvhLesugsxIA71WsqBw==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.7.tgz", + "integrity": "sha512-7CcxgdlCD+zAPyveKoznbgr3i0Wnh0L8BDGRCjE/5UGkm5P/NQko51tuIDaYof8zbmXjjl0OIt9lSo4W7I8mrw==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.7.tgz", + "integrity": "sha512-GKCafP2j/KUljVC3nesw1wLFSZktb2FGCmoT1+730zIF5O6hNroo0bSEofm6ZK5mNPnLiSaiLyRB9YFgtkd5Xg==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.7.tgz", + "integrity": "sha512-5I1GeL/gZoUUdTPA0ws54bpYdtyeA2t6MNISalsHpY269zK8Jia/AXB3ta/KcDHv2SvNwabpImeIPXC/k0YW6A==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.7.tgz", + "integrity": "sha512-CIGKCFpQOSlYsLMbxt8JjxxvVw9MlF1Rz2ABLVfFyHUF5OeqHD5fPhGrCVNaVrhO8Xrm+yFmtjcZudUGr5/WYQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.7.tgz", + "integrity": "sha512-eOs1eSivOqN7cFiRIukEruWhaCf75V0N8P0zP7dh44LIhLl8y6/z++vv9qQVbkBm5/D7M7LfCfCTmt1f1wHOCw==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + } + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + } + } + }, + "eslint-loader": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", + "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", + "dev": true, + "requires": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "eslint-plugin-vue": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz", + "integrity": "sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw==", + "dev": true, + "requires": { + "vue-eslint-parser": "^5.0.0" + }, + "dependencies": { + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "espree": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "vue-eslint-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz", + "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.1.0", + "esquery": "^1.0.1", + "lodash": "^4.17.11" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "optional": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "optional": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "eventsource": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.1.tgz", + "integrity": "sha512-qV5ZC0h7jYIAOhArFJgSfdyz6rALJyb270714o7ZtNnw2WSJ+eexhKtE0O8LYPRsHZHf2osHKZBxGPvm3kPkCA==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "optional": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "optional": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", + "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "dev": true, + "requires": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "optional": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz", + "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "foreach": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", + "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "generic-names": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", + "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "requires": { + "ini": "1.3.7" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + } + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + } + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hogan.js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz", + "integrity": "sha1-TNnhq9QpQUbnZ55B14mHMrAse/0=", + "dev": true, + "requires": { + "mkdirp": "0.3.0", + "nopt": "1.0.10" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + } + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } + } + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + } + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "dependencies": { + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "optional": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "dependencies": { + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + } + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "dependencies": { + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + } + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-md5": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz", + "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + }, + "js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true + }, + "js-queue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz", + "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", + "dev": true, + "requires": { + "easy-stack": "^1.0.1" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "dev": true, + "requires": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "launch-editor": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.3.0.tgz", + "integrity": "sha512-3QrsCXejlWYHjBPFXTyGNhPj4rrQdB+5+r5r3wArpLH201aR+nWUgw/zKKkTmilCfY/sv6u8qo98pNvtg8LUTA==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.6.1" + } + }, + "launch-editor-middleware": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.3.0.tgz", + "integrity": "sha512-GJR64trLdFFwCoL9DMn/d1SZX0OzTDPixu4mcfWTShQ4tIqCHCGvlg9fOEYQXyBlrSMQwylsJfUWncheShfV2w==", + "dev": true, + "requires": { + "launch-editor": "^2.3.0" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=", + "dev": true + }, + "loader-fs-cache": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "loglevel": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-it": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", + "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + } + } + }, + "markdown-it-anchor": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", + "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", + "dev": true + }, + "markdown-it-chain": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/markdown-it-chain/-/markdown-it-chain-1.3.0.tgz", + "integrity": "sha512-XClV8I1TKy8L2qsT9iX3qiV+50ZtcInGXI80CA+DP62sMs7hXlyV/RM3hfwy5O3Ad0sJm9xIwQELgANfESo8mQ==", + "dev": true, + "requires": { + "webpack-chain": "^4.9.0" + }, + "dependencies": { + "javascript-stringify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", + "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", + "dev": true + }, + "webpack-chain": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-4.12.1.tgz", + "integrity": "sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^1.6.0" + } + } + } + }, + "markdown-it-container": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-2.0.0.tgz", + "integrity": "sha1-ABm0P9Au7+zi8ZYKKJX7qBpARpU=", + "dev": true + }, + "markdown-it-emoji": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz", + "integrity": "sha1-m+4OmpkKljupbfaYDE/dsF37Tcw=", + "dev": true + }, + "markdown-it-table-of-contents": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.4.4.tgz", + "integrity": "sha512-TAIHTHPwa9+ltKvKPWulm/beozQU41Ab+FIefRaQV1NRnpzwcV9QOe6wXQS5WLivm5Q/nlo0rl6laGkMDZE7Gw==", + "dev": true + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "mini-css-extract-plugin": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-ipc": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz", + "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", + "dev": true, + "requires": { + "event-pubsub": "4.3.0", + "js-message": "1.0.7", + "js-queue": "2.0.2" + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", + "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "dev": true + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=", + "dev": true + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.8.tgz", + "integrity": "sha512-mgFS1JdOtEGzD8l+EuISqL57cKO+We9GcoiQEmdCWRqqck+FGNmYJtx9qfAPzEz+lRrlThWMuGDaRkI/yWNx/Q==", + "dev": true, + "requires": { + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-2.0.0.tgz", + "integrity": "sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true, + "optional": true + }, + "pnp-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-2.0.0.tgz", + "integrity": "sha512-eqp+Bva+U2cwQO7dECJ8/V+X+uH1HduNeITB0CPPFAu6d/8LKQ32/j+p9rQ2YL1QytVcrNU0X+fBqgGmQIA1Rw==", + "dev": true, + "requires": { + "css-modules-loader-core": "^1.1.0", + "generic-names": "^2.0.1", + "lodash.camelcase": "^4.3.0", + "postcss": "^7.0.1", + "string-hash": "^1.1.1" + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-sync": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-sync/-/postcss-modules-sync-1.0.0.tgz", + "integrity": "sha1-YZpxnPeN0WpINBNRQLMkz3czS+E=", + "dev": true, + "requires": { + "generic-names": "^1.0.2", + "icss-replace-symbols": "^1.0.2", + "postcss": "^5.2.5", + "postcss-modules-local-by-default": "^1.1.1", + "postcss-modules-scope": "^1.0.2", + "string-hash": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "generic-names": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-1.0.3.tgz", + "integrity": "sha1-LXhqEhruUIh2eWk56OO/+DbCCRc=", + "dev": true, + "requires": { + "loader-utils": "^0.2.16" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "dev": true, + "requires": { + "postcss": "^7.0.26" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "dev": true, + "optional": true + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "dev": true + }, + "prismjs": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", + "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise.series": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", + "integrity": "sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "reduce": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce/-/reduce-1.0.2.tgz", + "integrity": "sha512-xX7Fxke/oHO5IfZSk77lvPa/7bjMh9BuCk4OOoX5XTXrM7s0Z+MkPfSDfz0q7r91BhhGSs8gii/VEN/7zhCPpQ==", + "dev": true, + "requires": { + "object-keys": "^1.1.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true, + "optional": true + }, + "regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "dev": true, + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "optional": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "reselect": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", + "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=", + "dev": true + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true, + "optional": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rollup": { + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", + "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "rollup-plugin-babel": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-buble": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/rollup-plugin-buble/-/rollup-plugin-buble-0.19.8.tgz", + "integrity": "sha512-8J4zPk2DQdk3rxeZvxgzhHh/rm5nJkjwgcsUYisCQg1QbT5yagW+hehYEW7ZNns/NVbDCTv4JQ7h4fC8qKGOKw==", + "dev": true, + "requires": { + "buble": "^0.19.8", + "rollup-pluginutils": "^2.3.3" + } + }, + "rollup-plugin-commonjs": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz", + "integrity": "sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==", + "dev": true, + "requires": { + "estree-walker": "^0.6.0", + "magic-string": "^0.25.2", + "resolve": "^1.10.0", + "rollup-pluginutils": "^2.6.0" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, + "rollup-plugin-hashbang": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-hashbang/-/rollup-plugin-hashbang-2.2.2.tgz", + "integrity": "sha512-Yxw9ogeK3KncG1e4CvK0I0IKVBNeJP+DTZS3bExGTfGjw0WP1C7xxbY7LtRd8IKx4fFf53hz7XR1XG7UV6xqCw==", + "dev": true, + "requires": { + "magic-string": "^0.22.4" + }, + "dependencies": { + "magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "requires": { + "vlq": "^0.2.2" + } + } + } + }, + "rollup-plugin-json": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz", + "integrity": "sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw==", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.3.1" + } + }, + "rollup-plugin-node-resolve": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.4.tgz", + "integrity": "sha512-t/64I6l7fZ9BxqD3XlX4ZeO6+5RLKyfpwE2CiPNUKa+GocPlQhf/C208ou8y3AwtNsc6bjSk/8/6y/YAyxCIvw==", + "dev": true, + "requires": { + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.10.0" + } + }, + "rollup-plugin-postcss": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-2.9.0.tgz", + "integrity": "sha512-Y7qDwlqjZMBexbB1kRJf+jKIQL8HR6C+ay53YzN+nNJ64hn1PNZfBE3c61hFUhD//zrMwmm7uBW30RuTi+CD0w==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "concat-with-sourcemaps": "^1.1.0", + "cssnano": "^4.1.10", + "import-cwd": "^3.0.0", + "p-queue": "^6.3.0", + "pify": "^5.0.0", + "postcss": "^7.0.27", + "postcss-load-config": "^2.1.0", + "postcss-modules": "^2.0.0", + "promise.series": "^0.2.0", + "resolve": "^1.16.0", + "rollup-pluginutils": "^2.8.2", + "safe-identifier": "^0.4.1", + "style-inject": "^0.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "requires": { + "import-from": "^3.0.0" + } + }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "rollup-plugin-replace": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz", + "integrity": "sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA==", + "dev": true, + "requires": { + "magic-string": "^0.25.2", + "rollup-pluginutils": "^2.6.0" + } + }, + "rollup-plugin-terser": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", + "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^4.0.0", + "terser": "^4.6.2" + } + }, + "rollup-plugin-typescript2": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.19.3.tgz", + "integrity": "sha512-lsRqfBCZhMl/tq9AT5YnQvzQWzXtnx3EQYFcHD72gul7nyyoOrzx5yCEH20smpw58v6UkHHZz03FbdLEPoHWjA==", + "dev": true, + "requires": { + "fs-extra": "7.0.1", + "resolve": "1.8.1", + "rollup-pluginutils": "2.3.3", + "tslib": "1.9.3" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "rollup-pluginutils": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", + "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "micromatch": "^2.3.11" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + } + } + }, + "rollup-plugin-vue": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-vue/-/rollup-plugin-vue-4.7.2.tgz", + "integrity": "sha512-RuAK+YTL81/iccOWoadqQz2TXqOogivjbvtCuU6EfVP9/E5XIjuMNVsVWHkSelZQblI1z2b5tshWL7XoiOfABQ==", + "dev": true, + "requires": { + "@vue/component-compiler": "^3.6", + "@vue/component-compiler-utils": "^2.1.0", + "debug": "^4.1.1", + "hash-sum": "^1.0.2", + "magic-string": "^0.25.2", + "querystring": "^0.2.0", + "rollup-pluginutils": "^2.0.1", + "source-map": "0.7.3", + "vue-runtime-helpers": "1.0.0" + }, + "dependencies": { + "@vue/component-compiler-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz", + "integrity": "sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^5.0.0", + "prettier": "1.16.3", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "prettier": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz", + "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true, + "optional": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "optional": true, + "requires": { + "rx-lite": "*" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "optional": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "smoothscroll-polyfill": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz", + "integrity": "sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "sockjs-client": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.0.tgz", + "integrity": "sha512-qVHJlyfdHFht3eBFZdKEXKTlb7I4IV41xnVNo8yUKA1UHcPJwgW2SvTq9LhnjjCywSkSK7c/e4nghU0GOoMCRQ==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "eventsource": "^1.1.0", + "faye-websocket": "^0.11.4", + "inherits": "^2.0.4", + "url-parse": "^1.5.10" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "stackframe": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz", + "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "std-env": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.1.tgz", + "integrity": "sha512-eOsoKTWnr6C8aWrqJJ2KAReXoa7Vn5Ywyw6uCXgA/xDhxPoaIsBa5aNJmISY04dLwXPBnDHW4diGM7Sn5K4R/g==", + "dev": true, + "requires": { + "ci-info": "^3.1.1" + }, + "dependencies": { + "ci-info": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz", + "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==", + "dev": true + } + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.padstart": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.3.tgz", + "integrity": "sha512-NZydyOMtYxpTjGqp0VN5PYUF/tsU15yDMZnUdj16qRUIUiMJkHHSDElYyQFrMu+/WloTpA7MQSiADhBicDfaoA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-inject": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", + "dev": true + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "stylus": { + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", + "dev": true, + "requires": { + "css-parse": "~2.0.0", + "debug": "~3.1.0", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "semver": "^6.3.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "stylus-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", + "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "when": "~3.6.x" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "optional": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", + "dev": true, + "optional": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha512-ZFztHzVRdGLAzJmpUT9LNFLe1YiVOEylcaNpEutM26PVTCtOD919IMfD01CgbRouB42Dd9atjx1HseC15DgOZA==", + "dev": true, + "optional": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true, + "optional": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true, + "optional": true + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz", + "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", + "dev": true, + "requires": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-factory": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-factory/-/to-factory-1.0.0.tgz", + "integrity": "sha1-hzivi9lxIK0dQEeXKtpVY7+UebE=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "dev": true + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", + "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vue": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz", + "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==", + "dev": true + }, + "vue-cli-plugin-p11n": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/vue-cli-plugin-p11n/-/vue-cli-plugin-p11n-0.3.0.tgz", + "integrity": "sha512-tsVNKc/t6nJyXOm3yzvAxFNf+ZHP1FJ3XmxmpUMFXjXJSH7nAqu0FzZy1XV4zqSXEXPS/iZozL6g3NY/GdqY0g==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "debug": "^4.1.1", + "rimraf": "^2.6.3", + "rollup": "^1.1.0", + "rollup-plugin-babel": "^4.0.3", + "rollup-plugin-commonjs": "^9.2.0", + "rollup-plugin-node-resolve": "^4.0.0", + "rollup-plugin-replace": "^2.1.0", + "rollup-plugin-typescript2": "^0.19.2", + "rollup-plugin-vue": "^4.7.2", + "uglify-js": "^2.7.5", + "vuepress": "^1.0.0-alpha.31" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "vue-eslint-parser": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", + "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "dev": true, + "optional": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-json-tree-view": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/vue-json-tree-view/-/vue-json-tree-view-2.1.6.tgz", + "integrity": "sha512-gs7VDd1dC5SFQmyMdIq3O0w2IsITZfzyNFe6lsTeQwhFkh0nwWxhKWrS6opNmdOYFYmy52D9DVto78v8mF7IXQ==", + "dev": true, + "requires": { + "lodash": "^4.17.4", + "vue": "^2.5.16" + } + }, + "vue-loader": { + "version": "15.9.8", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz", + "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.8.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "vue-router": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.4.tgz", + "integrity": "sha512-x+/DLAJZv2mcQ7glH2oV9ze8uPwcI+H+GgTgTmb5I55bCgY3+vXWIsqbYUzbBSZnwFHEJku4eoaH/x98veyymQ==", + "dev": true + }, + "vue-runtime-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vue-runtime-helpers/-/vue-runtime-helpers-1.0.0.tgz", + "integrity": "sha512-DgwCNgIXkq1GJsWwtFOjA/K2nxpjyon/QqAut0EiwrMHBatAPbfdqksDdRoK15b5YrSJRa59rx3pc0L6V4udUA==", + "dev": true + }, + "vue-server-renderer": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.6.14.tgz", + "integrity": "sha512-HifYRa/LW7cKywg9gd4ZtvtRuBlstQBao5ZCWlg40fyB4OPoGfEXAzxb0emSLv4pBDOHYx0UjpqvxpiQFEuoLA==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "hash-sum": "^1.0.2", + "he": "^1.1.0", + "lodash.template": "^4.5.0", + "lodash.uniq": "^4.5.0", + "resolve": "^1.2.0", + "serialize-javascript": "^3.1.0", + "source-map": "0.5.6" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "serialize-javascript": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "vue-template-compiler": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz", + "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "vuepress": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-1.9.7.tgz", + "integrity": "sha512-aSXpoJBGhgjaWUsT1Zs/ZO8JdDWWsxZRlVme/E7QYpn+ZB9iunSgPMozJQNFaHzcRq4kPx5A4k9UhzLRcvtdMg==", + "dev": true, + "requires": { + "@vuepress/core": "1.9.7", + "@vuepress/theme-default": "1.9.7", + "@vuepress/types": "1.9.7", + "cac": "^6.5.6", + "envinfo": "^7.2.0", + "opencollective-postinstall": "^2.0.2", + "update-notifier": "^4.0.0" + } + }, + "vuepress-html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vuepress-html-webpack-plugin/-/vuepress-html-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-BebAEl1BmWlro3+VyDhIOCY6Gef2MCBllEVAP3NUAtMguiyOwo/dClbwJ167WYmcxHJKLl7b0Chr9H7fpn1d0A==", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + } + } + }, + "vuepress-plugin-container": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/vuepress-plugin-container/-/vuepress-plugin-container-2.1.5.tgz", + "integrity": "sha512-TQrDX/v+WHOihj3jpilVnjXu9RcTm6m8tzljNJwYhxnJUW0WWQ0hFLcDTqTBwgKIFdEiSxVOmYE+bJX/sq46MA==", + "dev": true, + "requires": { + "@vuepress/shared-utils": "^1.2.0", + "markdown-it-container": "^2.0.0" + } + }, + "vuepress-plugin-smooth-scroll": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/vuepress-plugin-smooth-scroll/-/vuepress-plugin-smooth-scroll-0.0.3.tgz", + "integrity": "sha512-qsQkDftLVFLe8BiviIHaLV0Ea38YLZKKonDGsNQy1IE0wllFpFIEldWD8frWZtDFdx6b/O3KDMgVQ0qp5NjJCg==", + "dev": true, + "requires": { + "smoothscroll-polyfill": "^0.4.3" + } + }, + "vuex": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz", + "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==", + "dev": true + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.19", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", + "dev": true, + "requires": { + "ansi-html-community": "0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "webpackbar": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-3.2.0.tgz", + "integrity": "sha512-PC4o+1c8gWWileUfwabe0gqptlXUDJd5E0zbpr2xHP1VSOVlZVPBZ8j6NCR8zM5zbKdxPhctHXahgpNK1qFDPw==", + "dev": true, + "requires": { + "ansi-escapes": "^4.1.0", + "chalk": "^2.4.1", + "consola": "^2.6.0", + "figures": "^3.0.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "optional": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "requires": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "zepto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zepto/-/zepto-1.2.0.tgz", + "integrity": "sha1-4Se9nmb9hGvl6rSME5SIL3wOT5g=", + "dev": true + } + } +} diff --git a/package.json b/package.json index 0b4e05db..7976cfd8 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,12 @@ { "name": "voicenter-events-sdk", - "version": "0.8.7", + "version": "0.8.33", "scripts": { "serve": "npm run docs", "build": "bili", "lint": "vue-cli-service lint", "docs": "vue-cli-service docs --mode serve", "build:docs": "vue-cli-service docs --mode build", - "prepublish": "vue-cli-service lint && vue-cli-service docs --mode build && npm run build", "start": "npm run docs" }, "dependencies": { diff --git a/src/sdk.js b/src/sdk.js index a05fd162..af8a10ee 100644 --- a/src/sdk.js +++ b/src/sdk.js @@ -27,10 +27,10 @@ const defaultOptions = { token: null, loginType: 'token', forceNew: true, - reconnectionDelay: 10000, - reconnectionDelayMax: 10000, - maxReconnectAttempts: 2, - timeout: 10000, + reconnectionDelay: 200, //10000 + reconnectionDelayMax: 200, //10000 + maxReconnectAttempts: 5, + timeout: 200,//10000 keepAliveTimeout: 60000, idleInterval: 60000 * 5, // 5 minutes protocol: 'https', @@ -59,7 +59,7 @@ class EventsSDK { if (!this.options.loginType) { throw new Error('A login type should be provided'); } - this.Logger = new Logger(this.options); + //this.Logger = new Logger(this.options); this.servers = []; this.server = null; this.socket = null; @@ -138,7 +138,7 @@ class EventsSDK { _onConnect() { this._initReconnectDelays(); this.connected = true; - this.Logger.log(eventTypes.CONNECT, this.reconnectOptions); + console.log(eventTypes.CONNECT, this.reconnectOptions); } _initReconnectDelays() { @@ -152,21 +152,22 @@ class EventsSDK { _onConnectError(data) { this._retryConnection('next', true); this.connected = false; - this.Logger.log(eventTypes.CONNECT_ERROR, data) + console.error(eventTypes.CONNECT_ERROR, data) } _onError(err) { - this.Logger.log(eventTypes.ERROR, err); + console.error(eventTypes.ERROR, err); } _onReconnectFailed() { this._retryConnection('next',true); - this.Logger.log(eventTypes.RECONNECT_FAILED, this.reconnectOptions); + console.error(eventTypes.RECONNECT_FAILED, this.reconnectOptions); } _onConnectTimeout() { + console.log('_onConnectTimeout RETRY connection with next') this._retryConnection('next',true); - this.Logger.log(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions) + console.error(eventTypes.CONNECT_TIMEOUT, this.reconnectOptions) } _onReconnectAttempt() { @@ -181,13 +182,13 @@ class EventsSDK { this.socket.io.reconnectionDelay(newDelay); this.socket.io.reconnectionDelayMax(newDelay); } - this.reconnectOptions.retryCount++; - this.Logger.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions) + //this.reconnectOptions.retryCount++; // TODO: Uncomment + console.log(eventTypes.RECONNECT_ATTEMPT, this.reconnectOptions) } _onDisconnect(reason) { this.connected = false; - this.Logger.log(eventTypes.DISCONNECT, reason); + console.log(eventTypes.DISCONNECT, reason); this._connect('next', true) } @@ -197,7 +198,7 @@ class EventsSDK { return } if (data && this.connected) { - this.Logger.log(eventTypes.KEEP_ALIVE_RESPONSE); + console.log(eventTypes.KEEP_ALIVE_RESPONSE); this._lastEventTimestamp = new Date().getTime() } else { this._initSocketConnection(); @@ -206,7 +207,9 @@ class EventsSDK { async _onLoginResponse(data) { if (data.Client) { + console.log('before loadExternalScript') await loadExternalScript(data.Client, this.options.environment, this.options.getSocketIOFunction) + console.log('after loadExternalScript') } if (data.URL) { this.server = { @@ -221,11 +224,14 @@ class EventsSDK { Domain: url.replace('https://', '') } }) + console.log("_onLoginResponse servers", this.servers) } if (data.Token) { this.options.token = data.Token; this.token = data.Token + console.log('before _onLoginResponse _connect') await this._connect('default', true) + console.log('after _onLoginResponse _connect') } if (data.TokenExpiry) { this.options.tokenExpiry = data.TokenExpiry @@ -270,14 +276,18 @@ class EventsSDK { let serverToConnect = null; if (server === 'default') { serverToConnect = this._findCurrentServer(); + console.log('SDK current default server', serverToConnect) } else if (server === 'next') { serverToConnect = this._findNextAvailableServer() + console.log('SDK current next server', serverToConnect) } else if (server === 'prev') { serverToConnect = this._findMaxPriorityServer() + console.log('SDK current prev server', serverToConnect) } else { throw new Error(`Incorrect 'server' parameter passed to connect function ${server}. Should be 'default' or 'next'`) } if (!serverToConnect) { + console.log('!serverToConnect') this.server = this._findCurrentServer(); } this._initSocketConnection(); @@ -287,7 +297,9 @@ class EventsSDK { if (skipLogin) { return } + console.log('before login') await this.login(this.options.loginType) + console.log('after login') } _checkInit() { @@ -297,27 +309,35 @@ class EventsSDK { } _initSocketConnection() { - let domain = this.server.Domain; - let protocol = this.options.protocol; - let url = `${protocol}://${domain}`; - this.Logger.log('Connecting to..', url); - this.closeAllConnections(); - const options = { - reconnection: false, - perMessageDeflate: false, - upgrade: false, - transports: ['websocket'], - debug: false - } - if (this.token) { - options.query = { - token: this.token + try { + let domain = this.server.Domain; + let protocol = this.options.protocol; + let url = `${protocol}://${domain}`; + console.log('Connecting to..', url); + //console.log('allConnections', allConnections) + this.closeAllConnections(); + console.log("closed all connections") + const options = { + reconnection: false, + perMessageDeflate: false, + upgrade: false, + transports: ['websocket'], + debug: false } - } - this.socket = self.io(url, options) + if (this.token) { + options.query = { + token: this.token + } + } + console.log('before self.io') + this.socket = self.io(url, options) + console.log('after self.io') - allConnections.push(this.socket); - this.connectionEstablished = true; + allConnections.push(this.socket); + this.connectionEstablished = true; + } catch (e) { + console.error("INIT CONNECTION", e) + } } _initSocketEvents() { this.socket @@ -379,7 +399,7 @@ class EventsSDK { _findNextAvailableServer() { let currentServerPriority = this.server.Priority; - this.Logger.log(`Failover -> Trying to find another server`); + console.log(`Failover -> Trying to find another server`); if (currentServerPriority === this.servers.length - 1) { return this._findMaxPriorityServer() } @@ -392,23 +412,29 @@ class EventsSDK { } } if (this.server.Domain !== nextServer.Domain) { + console.log('_findNextAvailableServer return new server', nextServer) this.server = nextServer; return this.server } - this.Logger.log(`Failover -> Found new server. Connecting to it...`, this.server); + console.log(`Failover -> Found new server. Connecting to it...`, this.server); return null } _findMaxPriorityServer() { - this.Logger.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer'); + //console.log(`Fallback -> Trying to find previous server`, '_findMaxPriorityServer'); + //console.log('SDK _findMaxPriorityServer servers', this.servers) let maxPriorityServer = getServerWithHighestPriority(this.servers); + console.log('_findMaxPriorityServer, maxPriorityServer', maxPriorityServer) if (!this.server) { this.server = maxPriorityServer; + console.log('!this.server this.server = maxPriorityServer') return this.server } if (this.server && maxPriorityServer.Domain !== this.server.Domain) { + console.log('_findMaxPriorityServer this.server', this.server) + console.log('_findMaxPriorityServer maxPriorityServer.Domain !== this.server.Domain') this.server = maxPriorityServer; - this.Logger.log(`Fallback -> Trying to find previous server`, this.server); + //console.log(`Fallback -> Trying to find previous server`, this.server); return this.server } return null @@ -418,6 +444,7 @@ class EventsSDK { // Ignore server fetch if we have a list of servers passed via options if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) { this.servers = this.argumentOptions.servers + console.log("SDK _getServers", this.servers) } } @@ -426,7 +453,7 @@ class EventsSDK { return; } let evt = this._parsePacket(packet); - this.Logger.log(`New event -> ${evt.name}`, evt); + console.log(`New event -> ${evt.name}`, evt); this._lastEventTimestamp = new Date().getTime() this._listenersMap.forEach((callback, eventName) => { if (eventName === '*') { @@ -464,7 +491,9 @@ class EventsSDK { * @return {Promise} */ async init() { + console.log('IN INIT') if (this.connectionEstablished) { + console.log('this.connectionEstablished', this.connectionEstablished, 'return') return true; } if (this.socket) { @@ -529,7 +558,7 @@ class EventsSDK { emit(eventName, data = {}) { this._checkInit(); - this.Logger.log(`EMIT -> ${eventName}`, data); + console.log(`EMIT -> ${eventName}`, data); this.socket.emit(eventName, data); } @@ -569,32 +598,107 @@ class EventsSDK { } } _getTabsSession() { - if (this.options.environment !== environments.BROWSER) { + console.log('IN _getTabsSession') + /*console.log("SDK window", window) + console.log("SDK sessionStorage", sessionStorage)*/ + + /*if (this.options.environment !== environments.BROWSER) { + console.log('this.options.environment return', this.options.environment) return Promise.resolve() - } + } else { + console.log('_getTabsSession continue') + }*/ + + /*if (!window) { + return new Promise(resolve => setTimeout((resolve), 200)) + }*/ - if (!window.sessionStorage.length) { + //if (!window.sessionStorage.length) { + /*if (!Object.keys(sessionStorageObj).length) { // Ask other tabs for session storage localStorage.setItem('getSessionStorage', Date.now()); - } + }*/ + + if (this.options.environment === environments.CHROME_EXTENSION && chrome) { + chrome.storage.sync.get(['loginSessionData'], (result) => { + //console.log('Value currently is ' + result.key); + const loginSessionData = result.loginSessionData || '{}' + let sessionStorageObj = JSON.parse(loginSessionData) + + console.log('IN CHROME _getTabsSession') + if (!Object.keys(sessionStorageObj).length) { + // Ask other tabs for session storage + chrome.storage.local.set({'getSessionStorage': Date.now()}) + //localStorage.setItem('getSessionStorage', Date.now()); + } - window.addEventListener('storage', (event) => { - if (event.key === 'getSessionStorage') { - // Some tab asked for the sessionStorage -> send it - localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); - localStorage.removeItem('sessionStorage'); - } else if (event.key === 'sessionStorage' && !sessionStorage.length) { - // sessionStorage is empty -> fill it - const data = JSON.parse(event.newValue) + chrome.storage.onChanged.addListener((changes, namespace) => { + let sessionStorage + chrome.storage.sync.get(['loginSessionData'], (result) => { + //console.log('Value currently is ' + result.key); + const loginSessionData = result.loginSessionData || '{}' + sessionStorage = JSON.parse(loginSessionData) + + for (let [key, { oldValue, newValue }] of Object.entries(changes)) { + //console.log('_getTabsSession KEY', key) + if (key === 'getSessionStorage') { + // Some tab asked for the sessionStorage -> send it + //localStorage.setItem('sessionStorage', JSON.stringify(sessionStorageObj)); + /*chrome.storage.sync.get(['key'], function(result) { + console.log('Value currently is ' + result.key); + });*/ + + chrome.storage.local.set({'sessionStorage': JSON.stringify(sessionStorage)}) + //localStorage.removeItem('sessionStorage'); + chrome.storage.local.remove(["sessionStorage"]) + } else if (key === 'sessionStorage' && !Object.keys(sessionStorage).length) { + // sessionStorage is empty -> fill it + const data = JSON.parse(newValue) + + for (let sKey in data) { + if (data.hasOwnProperty(sKey)) { + //window.sessionStorage.setItem(key, data[key]); + //sessionStorageObj[sKey] = data[sKey] + + const storageObject = { + ...sessionStorage, + [sKey]: data[sKey] + } + + console.log('SYYYNNCC STORAGE', storageObject) + chrome.storage.sync.set({'loginSessionData': JSON.stringify(storageObject)}); + } + } + } + } + }); + }) + }); + } else if (this.options.environment === environments.BROWSER && window) { + window.addEventListener('storage', (event) => { + if (!window.sessionStorage.length) { + // Ask other tabs for session storage + localStorage.setItem('getSessionStorage', Date.now()); + } - for (let key in data) { - if (data.hasOwnProperty(key)) { - window.sessionStorage.setItem(key, data[key]); + if (event.key === 'getSessionStorage') { + // Some tab asked for the sessionStorage -> send it + localStorage.setItem('sessionStorage', JSON.stringify(window.sessionStorage)); + localStorage.removeItem('sessionStorage'); + } else if (event.key === 'sessionStorage' && !sessionStorage.length) { + // sessionStorage is empty -> fill it + const data = JSON.parse(event.newValue) + + for (let key in data) { + if (data.hasOwnProperty(key)) { + window.sessionStorage.setItem(key, data[key]); + } } } - } - }) + }) + } + console.log("IN THE END OF _getTabsSession") return new Promise(resolve => setTimeout((resolve), 200)) } @@ -615,37 +719,91 @@ class EventsSDK { const delay = 1000; if (this._lastLoginTimestamp + delay > new Date().getTime()) { + console.log('this._lastLoginTimestamp + delay', this._lastLoginTimestamp + delay) + console.log('new Date().getTime()', new Date().getTime()) + console.log('return promise') return Promise.resolve() } this._lastLoginTimestamp = new Date().getTime() + console.log('this._lastLoginTimestamp', this._lastLoginTimestamp) return new Promise(async (resolve, reject) => { try { - let loginSession = window.sessionStorage.getItem(key); + let loginSession + if (this.options.environment === environments.BROWSER && window) { + loginSession = window.sessionStorage.getItem(key); + if (loginSession) { + loginSession = JSON.parse(loginSession) + console.log('got data from session', loginSession); + console.log('before _onLoginResponse 1') + await this._onLoginResponse(loginSession) + console.log('after _onLoginResponse 1') + return resolve(loginSession); + } + } else if (this.options.environment === environments.CHROME_EXTENSION && chrome) { + chrome.storage.sync.get(['loginSessionData'], async (result) => { + //console.log('Value currently is ' + result.key); + const loginSessionData = result.loginSessionData || '{}' + let sessionStorageObj = JSON.parse(loginSessionData) + + if (sessionStorageObj) loginSession = sessionStorageObj[key]; + if (loginSession) { + loginSession = JSON.parse(loginSession) + console.log('got data from session', loginSession); + console.log('before _onLoginResponse 1') + await this._onLoginResponse(loginSession) + console.log('after _onLoginResponse 1') + return resolve(loginSession); + } + }); + } + - if (loginSession) { + /*if (loginSession) { loginSession = JSON.parse(loginSession) - this.Logger.log('got data from session', loginSession); + console.log('got data from session', loginSession); + console.log('before _onLoginResponse 1') await this._onLoginResponse(loginSession) + console.log('after _onLoginResponse 1') return resolve(loginSession); - } + }*/ } catch (err) { - this.Logger.log('Error on getting session', err) + console.error("Error on getting session", err) } try { const url = getExternalLoginUrl(this.options.loginUrl, type) + console.log('before externalLogin') const res = await externalLogin(url, payload) + console.log('after externalLogin') + console.log('after _onLoginResponse 2') await this._onLoginResponse(res) + console.log('before _onLoginResponse 2') if (this.options.environment === environments.BROWSER) { window.sessionStorage.setItem(key, JSON.stringify(res)); + resolve(res) + } else if (this.options.environment === environments.CHROME_EXTENSION) { + chrome.storage.sync.get(['loginSessionData'], (result) => { + //console.log('Value currently is ' + result.key); + const loginSessionData = result.loginSessionData || '{}' + let sessionStorageObj = JSON.parse(loginSessionData) + + const storageObject = { + ...sessionStorageObj, + [key]: JSON.stringify(res) + } + + console.log('SYYYNNCC STORAGE', storageObject) + chrome.storage.sync.set({'loginSessionData': JSON.stringify(storageObject)}); + resolve(res) + //sessionStorageObj[key] = JSON.stringify(res) + }) } - - resolve(res) } catch (err) { this.servers = this.argumentOptions.servers || defaultServers; + console.log("SDK LOGIN CATCH servers", this.servers) reject(err) } }); From 468d09876d634738d72316e182b1d873acf52b59 Mon Sep 17 00:00:00 2001 From: "serhii.ku" Date: Mon, 6 Jun 2022 20:13:08 +0300 Subject: [PATCH 17/27] update: socket fixes --- dist/voicenter-events-sdk.cjs.js | 4267 ++++++++++++++++++++++++++ dist/voicenter-events-sdk.esm.js | 4263 +++++++++++++++++++++++++ dist/voicenter-events-sdk.umd.js | 12 + dist/voicenter-events-sdk.umd.js.map | 1 + package.json | 2 +- src/helpers/socketLibrary/s1_3_7.js | 2083 +++++++++++++ src/sdk.js | 212 +- src/utils/loadExternalScript.js | 22 +- 8 files changed, 10704 insertions(+), 158 deletions(-) create mode 100644 dist/voicenter-events-sdk.cjs.js create mode 100644 dist/voicenter-events-sdk.esm.js create mode 100644 dist/voicenter-events-sdk.umd.js create mode 100644 dist/voicenter-events-sdk.umd.js.map create mode 100644 src/helpers/socketLibrary/s1_3_7.js diff --git a/dist/voicenter-events-sdk.cjs.js b/dist/voicenter-events-sdk.cjs.js new file mode 100644 index 00000000..852b46cf --- /dev/null +++ b/dist/voicenter-events-sdk.cjs.js @@ -0,0 +1,4267 @@ +'use strict'; + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var debounce = _interopDefault(require('lodash/debounce')); +var md5 = _interopDefault(require('js-md5')); + +function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); +} + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; +} + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} + +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); +} + +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +var eventTypes = { + LOGIN_STATUS: 'loginStatus', + LOGIN: 'login', + LOGIN_USER: 'loginUser', + LOGIN_CODE: 'loginUserCode', + LOGIN_ACCOUNT: 'loginAccount', + LOGIN_RESPONSE: 'loginResponse', + QUEUE_EVENT: 'QueueEvent', + QUEUES_UPDATED: 'QueuesUpdated', + DIALERS_UPDATED: 'DialersUpdated', + EXTENSION_EVENT: 'ExtensionEvent', + EXTENSION_UPDATED: 'ExtensionsUpdated', + ALL_EXTENSION_STATUS: 'AllExtensionsStatus', + CONNECT: 'connect', + CONNECT_ERROR: 'connect_error', + CONNECT_TIMEOUT: 'connect_timeout', + DISCONNECT: 'disconnect', + PONG: 'pong', + RECONNECT: 'reconnect', + RECONNECT_ATTEMPT: 'reconnect_attempt', + RESYNC: 'resync', + RECONNECTING: 'reconnecting', + RECONNECT_ERROR: 'reconnect_error', + RECONNECT_FAILED: 'reconnect_failed', + KEEP_ALIVE: 'keepalive', + KEEP_ALIVE_RESPONSE: 'keepaliveResponse', + CLOSE: 'closeme', + ERROR: 'error', + ALL_DIALERS_STATUS: 'AllDialersStatus', + DIALER_EVENT: 'DialerEvent' +}; + +var environments = { + BROWSER: 'browser', + CHROME_EXTENSION: 'chrome-extension' +}; + +var defaultServers = [{ + 'URLID': 59, + 'Priority': 5, + 'Version': 2, + 'Domain': 'monitor1.voicenter.co' +}, { + 'URLID': 3, + 'Priority': 4, + 'Version': 2, + 'Domain': 'monitor3.voicenter.co.il' +}, { + 'URLID': 4, + 'Priority': 3, + 'Version': 2, + 'Domain': 'monitor4.voicenter.co.il' +}, { + 'URLID': 11, + 'Priority': 2, + 'Version': 2, + 'Domain': 'monitor11.voicenter.co' +}, { + 'URLID': 5, + 'Priority': 0, + 'Version': 2, + 'Domain': 'monitor5.voicenter.co.il' +}]; + +var sdkEventReasons = { + NEWCALL: 'NEWCALL', + ANSWER: 'ANSWER', + HANGUP: 'HANGUP' +}; +var offlineEvents = [eventTypes.CONNECT_ERROR, eventTypes.CONNECT_TIMEOUT, eventTypes.DISCONNECT, eventTypes.RECONNECT_ATTEMPT, eventTypes.RECONNECTING, eventTypes.RECONNECT_ERROR, eventTypes.RECONNECT_FAILED, sdkEventReasons.CLOSE]; + +function isSocketOffline(event) { + var name = event.name; + return offlineEvents.includes(name); +} + +function onNewEvent(_ref) { + var eventData = _ref.eventData, + store = _ref.store, + extensionsModuleName = _ref.extensionsModuleName, + queuesModuleName = _ref.queuesModuleName, + dialersModuleName = _ref.dialersModuleName; + var name = eventData.name, + data = eventData.data; + store.commit("".concat(extensionsModuleName, "/SET_IS_SOCKET_OFFLINE"), isSocketOffline(eventData)); + + switch (name) { + case eventTypes.ALL_EXTENSION_STATUS: + store.dispatch("".concat(extensionsModuleName, "/setExtensions"), data.extensions); + break; + + case eventTypes.EXTENSION_EVENT: + var extension = data.data; // Event reason: NEWCALL/ANSWER/HANGUP + + extension['lastEvent'] = { + reason: data.reason, + ivrid: data.ivruniqueid + }; + var extensions = store.state[extensionsModuleName].extensions; + var extensionIndex = extensions.findIndex(function (e) { + return e.userID === extension.userID; + }); + + if (extensionIndex !== -1) { + store.dispatch("".concat(extensionsModuleName, "/updateExtension"), { + index: extensionIndex, + extension: extension + }); + } + + break; + + case eventTypes.LOGIN_STATUS: + store.commit("".concat(extensionsModuleName, "/SET_SERVER_TIME"), data); + store.dispatch("".concat(queuesModuleName, "/setQueues"), data.queues); + break; + + case eventTypes.QUEUE_EVENT: + var queue = data.data; + var allQueues = store.state[queuesModuleName].all || []; + var queueIndex = allQueues.findIndex(function (e) { + return e.QueueID === queue.QueueID; + }); + + if (queueIndex !== -1) { + store.dispatch("".concat(queuesModuleName, "/updateQueue"), { + index: queueIndex, + queue: queue + }); + } + + break; + + case eventTypes.ALL_DIALERS_STATUS: + store.dispatch("".concat(dialersModuleName, "/setDialers"), data.dialers); + break; + + case eventTypes.DIALER_EVENT: + var dialer = data.data; + var allDialers = store.state[dialersModuleName].all || []; + var dialerIndex = allDialers.findIndex(function (e) { + return e.campaignID === dialer.campaignID; + }); + + if (dialerIndex !== -1) { + store.dispatch("".concat(dialersModuleName, "/updateDialers"), { + index: dialerIndex, + dialer: dialer + }); + } + + break; + } +} + +var callStatuses = { + CALLING: 100, + HOLD: 101 +}; + +var _mutations; +var ISRAEL_TIMEZONE_OFFSET = 180 * 60 * 1000; +var MINUTE = 60 * 1000; +var LOGOUT_STATUS = 2; +var HOLD_STATUS = 'hold'; +var types = { + SET_EXTENSIONS: 'SET_EXTENSIONS', + UPDATE_EXTENSIONS: 'UPDATE_EXTENSIONS', + SET_SERVER_TIME: 'SET_SERVER_TIME', + SET_IS_SOCKET_OFFLINE: 'SET_IS_SOCKET_OFFLINE' +}; +var state = { + extensions: [], + serverTime: null, + serverDelta: 0, + serverOffset: 0, + isSocketOffline: false, + offlineSocketTimestamp: null +}; +var mutations = (_mutations = {}, _defineProperty(_mutations, types.SET_EXTENSIONS, function (state, value) { + state.extensions = value; +}), _defineProperty(_mutations, types.UPDATE_EXTENSIONS, function (state, _ref) { + var index = _ref.index, + extension = _ref.extension; + state.extensions.splice(index, 1, extension); +}), _defineProperty(_mutations, types.SET_SERVER_TIME, function (state, value) { + state.serverOffset = value.servertimeoffset * 60 * 1000 || ISRAEL_TIMEZONE_OFFSET; + state.serverTime = value.servertime * 1000 - state.serverOffset; + state.serverDelta = new Date().getTime() - state.serverTime; +}), _defineProperty(_mutations, types.SET_IS_SOCKET_OFFLINE, function (state, value) { + state.isSocketOffline = value; + + if (value) { + state.offlineSocketTimestamp = new Date().getTime(); + } else { + state.offlineSocketTimestamp = null; + } +}), _mutations); +var actions = { + setExtensions: async function setExtensions(_ref2, value) { + var commit = _ref2.commit; + commit(types.SET_EXTENSIONS, value); + }, + updateExtension: async function updateExtension(_ref3, value) { + var commit = _ref3.commit; + commit(types.UPDATE_EXTENSIONS, value); + } +}; + +function isCallOnHold() { + var call = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var status = call.callstatus || ''; + status = status.toLowerCase(); + return call.answered && status === HOLD_STATUS; +} + +var getters = { + isSocketOffline: function isSocketOffline(state) { + if (!state.offlineSocketTimestamp || isNaN(state.offlineSocketTimestamp)) { + return false; + } + + var now = new Date().getTime(); // show after 1 minute of disconnect + + return state.isSocketOffline && now - state.offlineSocketTimestamp > MINUTE; + }, + extensionsWithCalls: function extensionsWithCalls(state) { + return function (hideLoggedOutUsers) { + var groupedExtensions = []; + state.extensions.forEach(function (extension) { + if (extension.calls.length > 0) { + if (extension.calls.filter(isCallOnHold).length) { + extension['representativeStatus'] = callStatuses.HOLD; + } else { + extension['representativeStatus'] = callStatuses.CALLING; + } + } + + groupedExtensions.push(extension); + }); + + if (hideLoggedOutUsers) { + return groupedExtensions.filter(function (e) { + return e.representativeStatus !== LOGOUT_STATUS; + }); + } + + return groupedExtensions; + }; + }, + extensionCountByStatus: function extensionCountByStatus(state, getters) { + return function (status) { + return getters.extensionsWithCalls.filter(function (el) { + return el.representativeStatus === status; + }).length || 0; + }; + } +}; +var extensionsModule = { + namespaced: true, + state: state, + mutations: mutations, + actions: actions, + getters: getters +}; + +var _mutations$1; + +var types$1 = { + SET_QUEUES: 'SET_QUEUES', + UPDATE_QUEUES: 'UPDATE_QUEUES' +}; +var state$1 = { + all: [] +}; +var mutations$1 = (_mutations$1 = {}, _defineProperty(_mutations$1, types$1.SET_QUEUES, function (state, value) { + state.all = value; +}), _defineProperty(_mutations$1, types$1.UPDATE_QUEUES, function (state, _ref) { + var index = _ref.index, + queue = _ref.queue; + state.all.splice(index, 1, queue); +}), _mutations$1); +var actions$1 = { + setQueues: async function setQueues(_ref2, value) { + var commit = _ref2.commit; + commit(types$1.SET_QUEUES, value); + }, + updateQueue: async function updateQueue(_ref3, value) { + var commit = _ref3.commit; + commit(types$1.UPDATE_QUEUES, value); + } +}; +var getters$1 = { + queueWithActiveCalls: function queueWithActiveCalls(state) { + return state.all.filter(function (el) { + return el.Calls.length; + }); + }, + allQueueCalls: function allQueueCalls(state, getters) { + var allCalls = []; + getters.queueWithActiveCalls.forEach(function (queue) { + var calls = queue.Calls || []; + allCalls.push.apply(allCalls, _toConsumableArray(calls)); + }); + return allCalls; + }, + filterQueuesByIds: function filterQueuesByIds(state) { + return function (queueIds) { + if (!queueIds || !Array.isArray(queueIds)) { + return state.all; + } + + return state.all.filter(function (e) { + return queueIds.includes(e.QueueID); + }); + }; + } +}; +var queuesModule = { + namespaced: true, + state: state$1, + mutations: mutations$1, + actions: actions$1, + getters: getters$1 +}; + +var _mutations$2; + +var types$2 = { + SET_DIALERS: 'SET_DIALERS', + UPDATE_DIALERS: 'UPDATE_DIALERS' +}; +var state$2 = { + all: [] +}; +var mutations$2 = (_mutations$2 = {}, _defineProperty(_mutations$2, types$2.SET_DIALERS, function (state, value) { + state.all = value; +}), _defineProperty(_mutations$2, types$2.UPDATE_DIALERS, function (state, _ref) { + var index = _ref.index, + dialer = _ref.dialer; + state.all.splice(index, 1, dialer); +}), _mutations$2); +var actions$2 = { + setDialers: async function setDialers(_ref2, value) { + var commit = _ref2.commit; + commit(types$2.SET_DIALERS, value); + }, + updateDialers: async function updateDialers(_ref3, value) { + var commit = _ref3.commit; + commit(types$2.UPDATE_DIALERS, value); + } +}; +var getters$2 = { + getAllDialers: function getAllDialers(state) { + return state.all; + }, + getAllDialersWithTypeIVR: function getAllDialersWithTypeIVR(state) { + return state.all.filter(function (el) { + return el.type === 'IVR'; + }); + }, + getAllDialersWithTypeAUTOMATIC: function getAllDialersWithTypeAUTOMATIC(state) { + return state.all.filter(function (el) { + return el.type === 'Automatic'; + }); + } +}; +var dialersModule = { + namespaced: true, + state: state$2, + mutations: mutations$2, + actions: actions$2, + getters: getters$2 +}; + +function getServerWithHighestPriority(servers) { + // Highest priority server is the one with lowest Priority value + var chosenServer = null; + var maxPriority = Number.MAX_SAFE_INTEGER; + servers.forEach(function (server) { + if (server.Priority < maxPriority) { + maxPriority = server.Priority; + chosenServer = server; + } + }); + return chosenServer; +} +function isValidDate(date) { + return !isNaN(date.getTime()); +} + +async function externalLogin(url, _ref) { + var email = _ref.email, + password = _ref.password, + token = _ref.token, + username = _ref.username; + var body = null; + + if (token) { + body = JSON.stringify({ + token: token + }); + } else if (username) { + body = JSON.stringify({ + username: username, + password: password + }); + } else { + body = JSON.stringify({ + email: email, + pin: password + }); + } + + var res = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: body + }); + var data = await res.json(); + + if (data.error) { + throw new Error(data.error); + } + + return data.Data.Socket; +} +function getExternalLoginUrl(baseUrl, loginType) { + if (loginType === 'user') { + return "".concat(baseUrl, "/User"); + } else if (loginType === 'token') { + return "".concat(baseUrl, "/Token"); + } else if (loginType === 'account') { + return "".concat(baseUrl, "/Account"); + } + + return baseUrl; +} +async function refreshToken(url, oldRefreshToken) { + var res = await fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + 'Authorization': "Bearer ".concat(oldRefreshToken) + } + }); + return res.json(); +} + +/* eslint-disable */ +function s1_3_7 () { + return function e(t, n, r) { + function o(s, a) { + if (!n[s]) { + if (!t[s]) { + var c = "function" == typeof require && require; + if (!a && c) return c(s, !0); + if (i) return i(s, !0); + throw new Error("Cannot find module '" + s + "'"); + } + + var p = n[s] = { + exports: {} + }; + t[s][0].call(p.exports, function (e) { + var n = t[s][1][e]; + return o(n ? n : e); + }, p, p.exports, e, t, n, r); + } + + return n[s].exports; + } + + for (var i = "function" == typeof require && require, s = 0; s < r.length; s++) { + o(r[s]); + } + + return o; + }({ + 1: [function (t, e) { + e.exports = t("./lib/"); + }, { + "./lib/": 2 + }], + 2: [function (t, e, n) { + function r(t, e) { + "object" == _typeof(t) && (e = t, t = void 0), e = e || {}; + var n, + r = o(t), + i = r.source, + p = r.id; + return e.forceNew || e["force new connection"] || !1 === e.multiplex ? (a("ignoring socket cache for %s", i), n = s(i, e)) : (c[p] || (a("new io instance for %s", i), c[p] = s(i, e)), n = c[p]), n.socket(r.path); + } + + var o = t("./url"), + i = t("socket.io-parser"), + s = t("./manager"), + a = t("debug")("socket.io-client"); + e.exports = n = r; + var c = n.managers = {}; + n.protocol = i.protocol, n.connect = r, n.Manager = t("./manager"), n.Socket = t("./socket"); + }, { + "./manager": 3, + "./socket": 5, + "./url": 6, + debug: 10, + "socket.io-parser": 44 + }], + 3: [function (t, e) { + function n(t, e) { + return this instanceof n ? (t && "object" == _typeof(t) && (e = t, t = void 0), e = e || {}, e.path = e.path || "/socket.io", this.nsps = {}, this.subs = [], this.opts = e, this.reconnection(e.reconnection !== !1), this.reconnectionAttempts(e.reconnectionAttempts || 1 / 0), this.reconnectionDelay(e.reconnectionDelay || 1e3), this.reconnectionDelayMax(e.reconnectionDelayMax || 5e3), this.randomizationFactor(e.randomizationFactor || .5), this.backoff = new f({ + min: this.reconnectionDelay(), + max: this.reconnectionDelayMax(), + jitter: this.randomizationFactor() + }), this.timeout(null == e.timeout ? 2e4 : e.timeout), this.readyState = "closed", this.uri = t, this.connected = [], this.encoding = !1, this.packetBuffer = [], this.encoder = new s.Encoder(), this.decoder = new s.Decoder(), this.autoConnect = e.autoConnect !== !1, void (this.autoConnect && this.open())) : new n(t, e); + } + + var r = (t("./url"), t("engine.io-client")), + o = t("./socket"), + i = t("component-emitter"), + s = t("socket.io-parser"), + a = t("./on"), + c = t("component-bind"), + p = (t("object-component"), t("debug")("socket.io-client:manager")), + u = t("indexof"), + f = t("backo2"); + e.exports = n, n.prototype.emitAll = function () { + this.emit.apply(this, arguments); + + for (var t in this.nsps) { + this.nsps[t].emit.apply(this.nsps[t], arguments); + } + }, n.prototype.updateSocketIds = function () { + for (var t in this.nsps) { + this.nsps[t].id = this.engine.id; + } + }, i(n.prototype), n.prototype.reconnection = function (t) { + return arguments.length ? (this._reconnection = !!t, this) : this._reconnection; + }, n.prototype.reconnectionAttempts = function (t) { + return arguments.length ? (this._reconnectionAttempts = t, this) : this._reconnectionAttempts; + }, n.prototype.reconnectionDelay = function (t) { + return arguments.length ? (this._reconnectionDelay = t, this.backoff && this.backoff.setMin(t), this) : this._reconnectionDelay; + }, n.prototype.randomizationFactor = function (t) { + return arguments.length ? (this._randomizationFactor = t, this.backoff && this.backoff.setJitter(t), this) : this._randomizationFactor; + }, n.prototype.reconnectionDelayMax = function (t) { + return arguments.length ? (this._reconnectionDelayMax = t, this.backoff && this.backoff.setMax(t), this) : this._reconnectionDelayMax; + }, n.prototype.timeout = function (t) { + return arguments.length ? (this._timeout = t, this) : this._timeout; + }, n.prototype.maybeReconnectOnOpen = function () { + !this.reconnecting && this._reconnection && 0 === this.backoff.attempts && this.reconnect(); + }, n.prototype.open = n.prototype.connect = function (t) { + if (p("readyState %s", this.readyState), ~this.readyState.indexOf("open")) return this; + p("opening %s", this.uri), this.engine = r(this.uri, this.opts); + var e = this.engine, + n = this; + this.readyState = "opening", this.skipReconnect = !1; + var o = a(e, "open", function () { + n.onopen(), t && t(); + }), + i = a(e, "error", function (e) { + if (p("connect_error"), n.cleanup(), n.readyState = "closed", n.emitAll("connect_error", e), t) { + var r = new Error("Connection error"); + r.data = e, t(r); + } else n.maybeReconnectOnOpen(); + }); + + if (!1 !== this._timeout) { + var s = this._timeout; + p("connect attempt will timeout after %d", s); + var c = setTimeout(function () { + p("connect attempt timed out after %d", s), o.destroy(), e.close(), e.emit("error", "timeout"), n.emitAll("connect_timeout", s); + }, s); + this.subs.push({ + destroy: function destroy() { + clearTimeout(c); + } + }); + } + + return this.subs.push(o), this.subs.push(i), this; + }, n.prototype.onopen = function () { + p("open"), this.cleanup(), this.readyState = "open", this.emit("open"); + var t = this.engine; + this.subs.push(a(t, "data", c(this, "ondata"))), this.subs.push(a(this.decoder, "decoded", c(this, "ondecoded"))), this.subs.push(a(t, "error", c(this, "onerror"))), this.subs.push(a(t, "close", c(this, "onclose"))); + }, n.prototype.ondata = function (t) { + this.decoder.add(t); + }, n.prototype.ondecoded = function (t) { + this.emit("packet", t); + }, n.prototype.onerror = function (t) { + p("error", t), this.emitAll("error", t); + }, n.prototype.socket = function (t) { + var e = this.nsps[t]; + + if (!e) { + e = new o(this, t), this.nsps[t] = e; + var n = this; + e.on("connect", function () { + e.id = n.engine.id, ~u(n.connected, e) || n.connected.push(e); + }); + } + + return e; + }, n.prototype.destroy = function (t) { + var e = u(this.connected, t); + ~e && this.connected.splice(e, 1), this.connected.length || this.close(); + }, n.prototype.packet = function (t) { + p("writing packet %j", t); + var e = this; + e.encoding ? e.packetBuffer.push(t) : (e.encoding = !0, this.encoder.encode(t, function (t) { + for (var n = 0; n < t.length; n++) { + e.engine.write(t[n]); + } + + e.encoding = !1, e.processPacketQueue(); + })); + }, n.prototype.processPacketQueue = function () { + if (this.packetBuffer.length > 0 && !this.encoding) { + var t = this.packetBuffer.shift(); + this.packet(t); + } + }, n.prototype.cleanup = function () { + for (var t; t = this.subs.shift();) { + t.destroy(); + } + + this.packetBuffer = [], this.encoding = !1, this.decoder.destroy(); + }, n.prototype.close = n.prototype.disconnect = function () { + this.skipReconnect = !0, this.backoff.reset(), this.readyState = "closed", this.engine && this.engine.close(); + }, n.prototype.onclose = function (t) { + p("close"), this.cleanup(), this.backoff.reset(), this.readyState = "closed", this.emit("close", t), this._reconnection && !this.skipReconnect && this.reconnect(); + }, n.prototype.reconnect = function () { + if (this.reconnecting || this.skipReconnect) return this; + var t = this; + if (this.backoff.attempts >= this._reconnectionAttempts) p("reconnect failed"), this.backoff.reset(), this.emitAll("reconnect_failed"), this.reconnecting = !1;else { + var e = this.backoff.duration(); + p("will wait %dms before reconnect attempt", e), this.reconnecting = !0; + var n = setTimeout(function () { + t.skipReconnect || (p("attempting reconnect"), t.emitAll("reconnect_attempt", t.backoff.attempts), t.emitAll("reconnecting", t.backoff.attempts), t.skipReconnect || t.open(function (e) { + e ? (p("reconnect attempt error"), t.reconnecting = !1, t.reconnect(), t.emitAll("reconnect_error", e.data)) : (p("reconnect success"), t.onreconnect()); + })); + }, e); + this.subs.push({ + destroy: function destroy() { + clearTimeout(n); + } + }); + } + }, n.prototype.onreconnect = function () { + var t = this.backoff.attempts; + this.reconnecting = !1, this.backoff.reset(), this.updateSocketIds(), this.emitAll("reconnect", t); + }; + }, { + "./on": 4, + "./socket": 5, + "./url": 6, + backo2: 7, + "component-bind": 8, + "component-emitter": 9, + debug: 10, + "engine.io-client": 11, + indexof: 40, + "object-component": 41, + "socket.io-parser": 44 + }], + 4: [function (t, e) { + function n(t, e, n) { + return t.on(e, n), { + destroy: function destroy() { + t.removeListener(e, n); + } + }; + } + + e.exports = n; + }, {}], + 5: [function (t, e, n) { + function r(t, e) { + this.io = t, this.nsp = e, this.json = this, this.ids = 0, this.acks = {}, this.io.autoConnect && this.open(), this.receiveBuffer = [], this.sendBuffer = [], this.connected = !1, this.disconnected = !0; + } + + var o = t("socket.io-parser"), + i = t("component-emitter"), + s = t("to-array"), + a = t("./on"), + c = t("component-bind"), + p = t("debug")("socket.io-client:socket"), + u = t("has-binary"); + e.exports = n = r; + var f = { + connect: 1, + connect_error: 1, + connect_timeout: 1, + disconnect: 1, + error: 1, + reconnect: 1, + reconnect_attempt: 1, + reconnect_failed: 1, + reconnect_error: 1, + reconnecting: 1 + }, + h = i.prototype.emit; + i(r.prototype), r.prototype.subEvents = function () { + if (!this.subs) { + var t = this.io; + this.subs = [a(t, "open", c(this, "onopen")), a(t, "packet", c(this, "onpacket")), a(t, "close", c(this, "onclose"))]; + } + }, r.prototype.open = r.prototype.connect = function () { + return this.connected ? this : (this.subEvents(), this.io.open(), "open" == this.io.readyState && this.onopen(), this); + }, r.prototype.send = function () { + var t = s(arguments); + return t.unshift("message"), this.emit.apply(this, t), this; + }, r.prototype.emit = function (t) { + if (f.hasOwnProperty(t)) return h.apply(this, arguments), this; + var e = s(arguments), + n = o.EVENT; + u(e) && (n = o.BINARY_EVENT); + var r = { + type: n, + data: e + }; + return "function" == typeof e[e.length - 1] && (p("emitting packet with ack id %d", this.ids), this.acks[this.ids] = e.pop(), r.id = this.ids++), this.connected ? this.packet(r) : this.sendBuffer.push(r), this; + }, r.prototype.packet = function (t) { + t.nsp = this.nsp, this.io.packet(t); + }, r.prototype.onopen = function () { + p("transport is open - connecting"), "/" != this.nsp && this.packet({ + type: o.CONNECT + }); + }, r.prototype.onclose = function (t) { + p("close (%s)", t), this.connected = !1, this.disconnected = !0, delete this.id, this.emit("disconnect", t); + }, r.prototype.onpacket = function (t) { + if (t.nsp == this.nsp) switch (t.type) { + case o.CONNECT: + this.onconnect(); + break; + + case o.EVENT: + this.onevent(t); + break; + + case o.BINARY_EVENT: + this.onevent(t); + break; + + case o.ACK: + this.onack(t); + break; + + case o.BINARY_ACK: + this.onack(t); + break; + + case o.DISCONNECT: + this.ondisconnect(); + break; + + case o.ERROR: + this.emit("error", t.data); + } + }, r.prototype.onevent = function (t) { + var e = t.data || []; + p("emitting event %j", e), null != t.id && (p("attaching ack callback to event"), e.push(this.ack(t.id))), this.connected ? h.apply(this, e) : this.receiveBuffer.push(e); + }, r.prototype.ack = function (t) { + var e = this, + n = !1; + return function () { + if (!n) { + n = !0; + var r = s(arguments); + p("sending ack %j", r); + var i = u(r) ? o.BINARY_ACK : o.ACK; + e.packet({ + type: i, + id: t, + data: r + }); + } + }; + }, r.prototype.onack = function (t) { + p("calling ack %s with %j", t.id, t.data); + var e = this.acks[t.id]; + e.apply(this, t.data), delete this.acks[t.id]; + }, r.prototype.onconnect = function () { + this.connected = !0, this.disconnected = !1, this.emit("connect"), this.emitBuffered(); + }, r.prototype.emitBuffered = function () { + var t; + + for (t = 0; t < this.receiveBuffer.length; t++) { + h.apply(this, this.receiveBuffer[t]); + } + + for (this.receiveBuffer = [], t = 0; t < this.sendBuffer.length; t++) { + this.packet(this.sendBuffer[t]); + } + + this.sendBuffer = []; + }, r.prototype.ondisconnect = function () { + p("server disconnect (%s)", this.nsp), this.destroy(), this.onclose("io server disconnect"); + }, r.prototype.destroy = function () { + if (this.subs) { + for (var t = 0; t < this.subs.length; t++) { + this.subs[t].destroy(); + } + + this.subs = null; + } + + this.io.destroy(this); + }, r.prototype.close = r.prototype.disconnect = function () { + return this.connected && (p("performing disconnect (%s)", this.nsp), this.packet({ + type: o.DISCONNECT + })), this.destroy(), this.connected && this.onclose("io client disconnect"), this; + }; + }, { + "./on": 4, + "component-bind": 8, + "component-emitter": 9, + debug: 10, + "has-binary": 36, + "socket.io-parser": 44, + "to-array": 48 + }], + 6: [function (t, e) { + (function (n) { + function r(t, e) { + var r = t, + e = e || n.location; + return null == t && (t = e.protocol + "//" + e.host), "string" == typeof t && ("/" == t.charAt(0) && (t = "/" == t.charAt(1) ? e.protocol + t : e.hostname + t), /^(https?|wss?):\/\//.test(t) || (i("protocol-less url %s", t), t = "undefined" != typeof e ? e.protocol + "//" + t : "https://" + t), i("parse %s", t), r = o(t)), r.port || (/^(http|ws)$/.test(r.protocol) ? r.port = "80" : /^(http|ws)s$/.test(r.protocol) && (r.port = "443")), r.path = r.path || "/", r.id = r.protocol + "://" + r.host + ":" + r.port, r.href = r.protocol + "://" + r.host + (e && e.port == r.port ? "" : ":" + r.port), r; + } + + var o = t("parseuri"), + i = t("debug")("socket.io-client:url"); + e.exports = r; + }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}); + }, { + debug: 10, + parseuri: 42 + }], + 7: [function (t, e) { + function n(t) { + t = t || {}, this.ms = t.min || 100, this.max = t.max || 1e4, this.factor = t.factor || 2, this.jitter = t.jitter > 0 && t.jitter <= 1 ? t.jitter : 0, this.attempts = 0; + } + + e.exports = n, n.prototype.duration = function () { + var t = this.ms * Math.pow(this.factor, this.attempts++); + + if (this.jitter) { + var e = Math.random(), + n = Math.floor(e * this.jitter * t); + t = 0 == (1 & Math.floor(10 * e)) ? t - n : t + n; + } + + return 0 | Math.min(t, this.max); + }, n.prototype.reset = function () { + this.attempts = 0; + }, n.prototype.setMin = function (t) { + this.ms = t; + }, n.prototype.setMax = function (t) { + this.max = t; + }, n.prototype.setJitter = function (t) { + this.jitter = t; + }; + }, {}], + 8: [function (t, e) { + var n = [].slice; + + e.exports = function (t, e) { + if ("string" == typeof e && (e = t[e]), "function" != typeof e) throw new Error("bind() requires a function"); + var r = n.call(arguments, 2); + return function () { + return e.apply(t, r.concat(n.call(arguments))); + }; + }; + }, {}], + 9: [function (t, e) { + function n(t) { + return t ? r(t) : void 0; + } + + function r(t) { + for (var e in n.prototype) { + t[e] = n.prototype[e]; + } + + return t; + } + + e.exports = n, n.prototype.on = n.prototype.addEventListener = function (t, e) { + return this._callbacks = this._callbacks || {}, (this._callbacks[t] = this._callbacks[t] || []).push(e), this; + }, n.prototype.once = function (t, e) { + function n() { + r.off(t, n), e.apply(this, arguments); + } + + var r = this; + return this._callbacks = this._callbacks || {}, n.fn = e, this.on(t, n), this; + }, n.prototype.off = n.prototype.removeListener = n.prototype.removeAllListeners = n.prototype.removeEventListener = function (t, e) { + if (this._callbacks = this._callbacks || {}, 0 == arguments.length) return this._callbacks = {}, this; + var n = this._callbacks[t]; + if (!n) return this; + if (1 == arguments.length) return delete this._callbacks[t], this; + + for (var r, o = 0; o < n.length; o++) { + if (r = n[o], r === e || r.fn === e) { + n.splice(o, 1); + break; + } + } + + return this; + }, n.prototype.emit = function (t) { + this._callbacks = this._callbacks || {}; + var e = [].slice.call(arguments, 1), + n = this._callbacks[t]; + + if (n) { + n = n.slice(0); + + for (var r = 0, o = n.length; o > r; ++r) { + n[r].apply(this, e); + } + } + + return this; + }, n.prototype.listeners = function (t) { + return this._callbacks = this._callbacks || {}, this._callbacks[t] || []; + }, n.prototype.hasListeners = function (t) { + return !!this.listeners(t).length; + }; + }, {}], + 10: [function (t, e) { + function n(t) { + return n.enabled(t) ? function (e) { + e = r(e); + var o = new Date(), + i = o - (n[t] || o); + n[t] = o, e = t + " " + e + " +" + n.humanize(i), window.console && console.log && Function.prototype.apply.call(console.log, console, arguments); + } : function () {}; + } + + function r(t) { + return t instanceof Error ? t.stack || t.message : t; + } + + e.exports = n, n.names = [], n.skips = [], n.enable = function (t) { + try { + localStorage.debug = t; + } catch (e) {} + + for (var r = (t || "").split(/[\s,]+/), o = r.length, i = 0; o > i; i++) { + t = r[i].replace("*", ".*?"), "-" === t[0] ? n.skips.push(new RegExp("^" + t.substr(1) + "$")) : n.names.push(new RegExp("^" + t + "$")); + } + }, n.disable = function () { + n.enable(""); + }, n.humanize = function (t) { + var e = 1e3, + n = 6e4, + r = 60 * n; + return t >= r ? (t / r).toFixed(1) + "h" : t >= n ? (t / n).toFixed(1) + "m" : t >= e ? (t / e | 0) + "s" : t + "ms"; + }, n.enabled = function (t) { + for (var e = 0, r = n.skips.length; r > e; e++) { + if (n.skips[e].test(t)) return !1; + } + + for (var e = 0, r = n.names.length; r > e; e++) { + if (n.names[e].test(t)) return !0; + } + + return !1; + }; + + try { + window.localStorage && n.enable(localStorage.debug); + } catch (o) {} + }, {}], + 11: [function (t, e) { + e.exports = t("./lib/"); + }, { + "./lib/": 12 + }], + 12: [function (t, e) { + e.exports = t("./socket"), e.exports.parser = t("engine.io-parser"); + }, { + "./socket": 13, + "engine.io-parser": 25 + }], + 13: [function (t, e) { + (function (n) { + function r(t, e) { + if (!(this instanceof r)) return new r(t, e); + + if (e = e || {}, t && "object" == _typeof(t) && (e = t, t = null), t && (t = u(t), e.host = t.host, e.secure = "https" == t.protocol || "wss" == t.protocol, e.port = t.port, t.query && (e.query = t.query)), this.secure = null != e.secure ? e.secure : n.location && "https:" == location.protocol, e.host) { + var o = e.host.split(":"); + e.hostname = o.shift(), o.length ? e.port = o.pop() : e.port || (e.port = this.secure ? "443" : "80"); + } + + this.agent = e.agent || !1, this.hostname = e.hostname || (n.location ? location.hostname : "localhost"), this.port = e.port || (n.location && location.port ? location.port : this.secure ? 443 : 80), this.query = e.query || {}, "string" == typeof this.query && (this.query = h.decode(this.query)), this.upgrade = !1 !== e.upgrade, this.path = (e.path || "/engine.io").replace(/\/$/, "") + "/", this.forceJSONP = !!e.forceJSONP, this.jsonp = !1 !== e.jsonp, this.forceBase64 = !!e.forceBase64, this.enablesXDR = !!e.enablesXDR, this.timestampParam = e.timestampParam || "t", this.timestampRequests = e.timestampRequests, this.transports = e.transports || ["polling", "websocket"], this.readyState = "", this.writeBuffer = [], this.callbackBuffer = [], this.policyPort = e.policyPort || 843, this.rememberUpgrade = e.rememberUpgrade || !1, this.binaryType = null, this.onlyBinaryUpgrades = e.onlyBinaryUpgrades, this.pfx = e.pfx || null, this.key = e.key || null, this.passphrase = e.passphrase || null, this.cert = e.cert || null, this.ca = e.ca || null, this.ciphers = e.ciphers || null, this.rejectUnauthorized = e.rejectUnauthorized || null, this.open(); + } + + function o(t) { + var e = {}; + + for (var n in t) { + t.hasOwnProperty(n) && (e[n] = t[n]); + } + + return e; + } + + var i = t("./transports"), + s = t("component-emitter"), + a = t("debug")("engine.io-client:socket"), + c = t("indexof"), + p = t("engine.io-parser"), + u = t("parseuri"), + f = t("parsejson"), + h = t("parseqs"); + e.exports = r, r.priorWebsocketSuccess = !1, s(r.prototype), r.protocol = p.protocol, r.Socket = r, r.Transport = t("./transport"), r.transports = t("./transports"), r.parser = t("engine.io-parser"), r.prototype.createTransport = function (t) { + a('creating transport "%s"', t); + var e = o(this.query); + e.EIO = p.protocol, e.transport = t, this.id && (e.sid = this.id); + var n = new i[t]({ + agent: this.agent, + hostname: this.hostname, + port: this.port, + secure: this.secure, + path: this.path, + query: e, + forceJSONP: this.forceJSONP, + jsonp: this.jsonp, + forceBase64: this.forceBase64, + enablesXDR: this.enablesXDR, + timestampRequests: this.timestampRequests, + timestampParam: this.timestampParam, + policyPort: this.policyPort, + socket: this, + pfx: this.pfx, + key: this.key, + passphrase: this.passphrase, + cert: this.cert, + ca: this.ca, + ciphers: this.ciphers, + rejectUnauthorized: this.rejectUnauthorized + }); + return n; + }, r.prototype.open = function () { + var t; + if (this.rememberUpgrade && r.priorWebsocketSuccess && -1 != this.transports.indexOf("websocket")) t = "websocket";else { + if (0 == this.transports.length) { + var e = this; + return void setTimeout(function () { + e.emit("error", "No transports available"); + }, 0); + } + + t = this.transports[0]; + } + this.readyState = "opening"; + var t; + + try { + t = this.createTransport(t); + } catch (n) { + return this.transports.shift(), void this.open(); + } + + t.open(), this.setTransport(t); + }, r.prototype.setTransport = function (t) { + a("setting transport %s", t.name); + var e = this; + this.transport && (a("clearing existing transport %s", this.transport.name), this.transport.removeAllListeners()), this.transport = t, t.on("drain", function () { + e.onDrain(); + }).on("packet", function (t) { + e.onPacket(t); + }).on("error", function (t) { + e.onError(t); + }).on("close", function () { + e.onClose("transport close"); + }); + }, r.prototype.probe = function (t) { + function e() { + if (h.onlyBinaryUpgrades) { + var e = !this.supportsBinary && h.transport.supportsBinary; + f = f || e; + } + + f || (a('probe transport "%s" opened', t), u.send([{ + type: "ping", + data: "probe" + }]), u.once("packet", function (e) { + if (!f) if ("pong" == e.type && "probe" == e.data) { + if (a('probe transport "%s" pong', t), h.upgrading = !0, h.emit("upgrading", u), !u) return; + r.priorWebsocketSuccess = "websocket" == u.name, a('pausing current transport "%s"', h.transport.name), h.transport.pause(function () { + f || "closed" != h.readyState && (a("changing transport and sending upgrade packet"), p(), h.setTransport(u), u.send([{ + type: "upgrade" + }]), h.emit("upgrade", u), u = null, h.upgrading = !1, h.flush()); + }); + } else { + a('probe transport "%s" failed', t); + var n = new Error("probe error"); + n.transport = u.name, h.emit("upgradeError", n); + } + })); + } + + function n() { + f || (f = !0, p(), u.close(), u = null); + } + + function o(e) { + var r = new Error("probe error: " + e); + r.transport = u.name, n(), a('probe transport "%s" failed because of error: %s', t, e), h.emit("upgradeError", r); + } + + function i() { + o("transport closed"); + } + + function s() { + o("socket closed"); + } + + function c(t) { + u && t.name != u.name && (a('"%s" works - aborting "%s"', t.name, u.name), n()); + } + + function p() { + u.removeListener("open", e), u.removeListener("error", o), u.removeListener("close", i), h.removeListener("close", s), h.removeListener("upgrading", c); + } + + a('probing transport "%s"', t); + var u = this.createTransport(t, { + probe: 1 + }), + f = !1, + h = this; + r.priorWebsocketSuccess = !1, u.once("open", e), u.once("error", o), u.once("close", i), this.once("close", s), this.once("upgrading", c), u.open(); + }, r.prototype.onOpen = function () { + if (a("socket open"), this.readyState = "open", r.priorWebsocketSuccess = "websocket" == this.transport.name, this.emit("open"), this.flush(), "open" == this.readyState && this.upgrade && this.transport.pause) { + a("starting upgrade probes"); + + for (var t = 0, e = this.upgrades.length; e > t; t++) { + this.probe(this.upgrades[t]); + } + } + }, r.prototype.onPacket = function (t) { + if ("opening" == this.readyState || "open" == this.readyState) switch (a('socket receive: type "%s", data "%s"', t.type, t.data), this.emit("packet", t), this.emit("heartbeat"), t.type) { + case "open": + this.onHandshake(f(t.data)); + break; + + case "pong": + this.setPing(); + break; + + case "error": + var e = new Error("server error"); + e.code = t.data, this.emit("error", e); + break; + + case "message": + this.emit("data", t.data), this.emit("message", t.data); + } else a('packet received with socket readyState "%s"', this.readyState); + }, r.prototype.onHandshake = function (t) { + this.emit("handshake", t), this.id = t.sid, this.transport.query.sid = t.sid, this.upgrades = this.filterUpgrades(t.upgrades), this.pingInterval = t.pingInterval, this.pingTimeout = t.pingTimeout, this.onOpen(), "closed" != this.readyState && (this.setPing(), this.removeListener("heartbeat", this.onHeartbeat), this.on("heartbeat", this.onHeartbeat)); + }, r.prototype.onHeartbeat = function (t) { + clearTimeout(this.pingTimeoutTimer); + var e = this; + e.pingTimeoutTimer = setTimeout(function () { + "closed" != e.readyState && e.onClose("ping timeout"); + }, t || e.pingInterval + e.pingTimeout); + }, r.prototype.setPing = function () { + var t = this; + clearTimeout(t.pingIntervalTimer), t.pingIntervalTimer = setTimeout(function () { + a("writing ping packet - expecting pong within %sms", t.pingTimeout), t.ping(), t.onHeartbeat(t.pingTimeout); + }, t.pingInterval); + }, r.prototype.ping = function () { + this.sendPacket("ping"); + }, r.prototype.onDrain = function () { + for (var t = 0; t < this.prevBufferLen; t++) { + this.callbackBuffer[t] && this.callbackBuffer[t](); + } + + this.writeBuffer.splice(0, this.prevBufferLen), this.callbackBuffer.splice(0, this.prevBufferLen), this.prevBufferLen = 0, 0 == this.writeBuffer.length ? this.emit("drain") : this.flush(); + }, r.prototype.flush = function () { + "closed" != this.readyState && this.transport.writable && !this.upgrading && this.writeBuffer.length && (a("flushing %d packets in socket", this.writeBuffer.length), this.transport.send(this.writeBuffer), this.prevBufferLen = this.writeBuffer.length, this.emit("flush")); + }, r.prototype.write = r.prototype.send = function (t, e) { + return this.sendPacket("message", t, e), this; + }, r.prototype.sendPacket = function (t, e, n) { + if ("closing" != this.readyState && "closed" != this.readyState) { + var r = { + type: t, + data: e + }; + this.emit("packetCreate", r), this.writeBuffer.push(r), this.callbackBuffer.push(n), this.flush(); + } + }, r.prototype.close = function () { + function t() { + r.onClose("forced close"), a("socket closing - telling transport to close"), r.transport.close(); + } + + function e() { + r.removeListener("upgrade", e), r.removeListener("upgradeError", e), t(); + } + + function n() { + r.once("upgrade", e), r.once("upgradeError", e); + } + + if ("opening" == this.readyState || "open" == this.readyState) { + this.readyState = "closing"; + var r = this; + this.writeBuffer.length ? this.once("drain", function () { + this.upgrading ? n() : t(); + }) : this.upgrading ? n() : t(); + } + + return this; + }, r.prototype.onError = function (t) { + a("socket error %j", t), r.priorWebsocketSuccess = !1, this.emit("error", t), this.onClose("transport error", t); + }, r.prototype.onClose = function (t, e) { + if ("opening" == this.readyState || "open" == this.readyState || "closing" == this.readyState) { + a('socket close with reason: "%s"', t); + var n = this; + clearTimeout(this.pingIntervalTimer), clearTimeout(this.pingTimeoutTimer), setTimeout(function () { + n.writeBuffer = [], n.callbackBuffer = [], n.prevBufferLen = 0; + }, 0), this.transport.removeAllListeners("close"), this.transport.close(), this.transport.removeAllListeners(), this.readyState = "closed", this.id = null, this.emit("close", t, e); + } + }, r.prototype.filterUpgrades = function (t) { + for (var e = [], n = 0, r = t.length; r > n; n++) { + ~c(this.transports, t[n]) && e.push(t[n]); + } + + return e; + }; + }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}); + }, { + "./transport": 14, + "./transports": 15, + "component-emitter": 9, + debug: 22, + "engine.io-parser": 25, + indexof: 40, + parsejson: 32, + parseqs: 33, + parseuri: 34 + }], + 14: [function (t, e) { + function n(t) { + this.path = t.path, this.hostname = t.hostname, this.port = t.port, this.secure = t.secure, this.query = t.query, this.timestampParam = t.timestampParam, this.timestampRequests = t.timestampRequests, this.readyState = "", this.agent = t.agent || !1, this.socket = t.socket, this.enablesXDR = t.enablesXDR, this.pfx = t.pfx, this.key = t.key, this.passphrase = t.passphrase, this.cert = t.cert, this.ca = t.ca, this.ciphers = t.ciphers, this.rejectUnauthorized = t.rejectUnauthorized; + } + + var r = t("engine.io-parser"), + o = t("component-emitter"); + e.exports = n, o(n.prototype), n.timestamps = 0, n.prototype.onError = function (t, e) { + var n = new Error(t); + return n.type = "TransportError", n.description = e, this.emit("error", n), this; + }, n.prototype.open = function () { + return ("closed" == this.readyState || "" == this.readyState) && (this.readyState = "opening", this.doOpen()), this; + }, n.prototype.close = function () { + return ("opening" == this.readyState || "open" == this.readyState) && (this.doClose(), this.onClose()), this; + }, n.prototype.send = function (t) { + if ("open" != this.readyState) throw new Error("Transport not open"); + this.write(t); + }, n.prototype.onOpen = function () { + this.readyState = "open", this.writable = !0, this.emit("open"); + }, n.prototype.onData = function (t) { + var e = r.decodePacket(t, this.socket.binaryType); + this.onPacket(e); + }, n.prototype.onPacket = function (t) { + this.emit("packet", t); + }, n.prototype.onClose = function () { + this.readyState = "closed", this.emit("close"); + }; + }, { + "component-emitter": 9, + "engine.io-parser": 25 + }], + 15: [function (t, e, n) { + (function (e) { + function r(t) { + var n, + r = !1, + a = !1, + c = !1 !== t.jsonp; + + if (e.location) { + var p = "https:" == location.protocol, + u = location.port; + u || (u = p ? 443 : 80), r = t.hostname != location.hostname || u != t.port, a = t.secure != p; + } + + if (t.xdomain = r, t.xscheme = a, n = new o(t), "open" in n && !t.forceJSONP) return new i(t); + if (!c) throw new Error("JSONP disabled"); + return new s(t); + } + + var o = t("xmlhttprequest"), + i = t("./polling-xhr"), + s = t("./polling-jsonp"), + a = t("./websocket"); + n.polling = r, n.websocket = a; + }).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}); + }, { + "./polling-jsonp": 16, + "./polling-xhr": 17, + "./websocket": 19, + xmlhttprequest: 20 + }], + 16: [function (t, e) { + (function (n) { + function r() {} + + function o(t) { + i.call(this, t), this.query = this.query || {}, a || (n.___eio || (n.___eio = []), a = n.___eio), this.index = a.length; + var e = this; + a.push(function (t) { + e.onData(t); + }), this.query.j = this.index, n.document && n.addEventListener && n.addEventListener("beforeunload", function () { + e.script && (e.script.onerror = r); + }, !1); + } + + var i = t("./polling"), + s = t("component-inherit"); + e.exports = o; + var a, + c = /\n/g, + p = /\\n/g; + s(o, i), o.prototype.supportsBinary = !1, o.prototype.doClose = function () { + this.script && (this.script.parentNode.removeChild(this.script), this.script = null), this.form && (this.form.parentNode.removeChild(this.form), this.form = null, this.iframe = null), i.prototype.doClose.call(this); + }, o.prototype.doPoll = function () { + var t = this, + e = document.createElement("script"); + this.script && (this.script.parentNode.removeChild(this.script), this.script = null), e.async = !0, e.src = this.uri(), e.onerror = function (e) { + t.onError("jsonp poll error", e); + }; + var n = document.getElementsByTagName("script")[0]; + n.parentNode.insertBefore(e, n), this.script = e; + var r = "undefined" != typeof navigator && /gecko/i.test(navigator.userAgent); + r && setTimeout(function () { + var t = document.createElement("iframe"); + document.body.appendChild(t), document.body.removeChild(t); + }, 100); + }, o.prototype.doWrite = function (t, e) { + function n() { + r(), e(); + } + + function r() { + if (o.iframe) try { + o.form.removeChild(o.iframe); + } catch (t) { + o.onError("jsonp polling iframe removal error", t); + } + + try { + var e = '