-
Notifications
You must be signed in to change notification settings - Fork 0
/
verto11.js
339 lines (272 loc) · 213 KB
/
verto11.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
(function(e, a) { for(var i in a) e[i] = a[i]; }(this, /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "../../verto.js");
/******/ })
/************************************************************************/
/******/ ({
/***/ "../../media-device-id.js":
/*!**********************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/media-device-id.js ***!
\**********************************************************************************/
/*! exports provided: assureMediaInputId */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"assureMediaInputId\", function() { return assureMediaInputId; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"../../node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"../../node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction assureMediaInputId(_x, _x2, _x3) {\n return _assureMediaInputId.apply(this, arguments);\n}\n\nfunction _assureMediaInputId() {\n _assureMediaInputId = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.mark(function _callee(label, possibleId, fallbackId) {\n var deviceIsInput, result, devices, hasAnAvailableLabel, labelsAreAvailable, hasTheLabel, hasTheId, whichByIdOnly, foundByIdOnly, whichByIdOrLabel, foundByIdOrLabel;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default.a.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n deviceIsInput = function deviceIsInput(device) {\n return device.kind.indexOf('input') > -1;\n };\n\n _context.next = 3;\n return navigator.mediaDevices.enumerateDevices().then(function (devices) {\n return {\n ok: devices.filter(deviceIsInput)\n };\n }).catch(function (exception) {\n return {\n err: exception\n };\n });\n\n case 3:\n result = _context.sent;\n\n if (!result.err) {\n _context.next = 6;\n break;\n }\n\n throw String(result.err);\n\n case 6:\n devices = result.ok;\n\n hasAnAvailableLabel = function hasAnAvailableLabel(device) {\n return device && device.label;\n };\n\n labelsAreAvailable = devices.every(hasAnAvailableLabel);\n\n hasTheLabel = function hasTheLabel(device) {\n return device.label && device.label === label;\n };\n\n hasTheId = function hasTheId(device) {\n return device.deviceId === possibleId;\n };\n\n whichByIdOnly = function whichByIdOnly(device) {\n return hasTheId(device);\n };\n\n foundByIdOnly = devices.find(whichByIdOnly);\n\n whichByIdOrLabel = function whichByIdOrLabel(device) {\n return hasTheId(device) || hasTheLabel(device);\n };\n\n foundByIdOrLabel = devices.find(whichByIdOrLabel);\n\n if (!(!foundByIdOnly && !labelsAreAvailable)) {\n _context.next = 19;\n break;\n }\n\n if (!(fallbackId !== undefined)) {\n _context.next = 18;\n break;\n }\n\n return _context.abrupt(\"return\", fallbackId);\n\n case 18:\n throw new Error('Could not assure device, id is wrong and labels are unavailable');\n\n case 19:\n if (!(!foundByIdOnly && !foundByIdOrLabel)) {\n _context.next = 23;\n break;\n }\n\n if (!(fallbackId !== undefined)) {\n _context.next = 22;\n break;\n }\n\n return _context.abrupt(\"return\", fallbackId);\n\n case 22:\n throw new Error('Could not assure device, not found by label nor id');\n\n case 23:\n return _context.abrupt(\"return\", foundByIdOnly ? foundByIdOnly.deviceId : foundByIdOrLabel.deviceId);\n\n case 24:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return _assureMediaInputId.apply(this, arguments);\n}\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/media-device-id.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/assertThisInitialized.js":
/*!****************************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/assertThisInitialized.js ***!
\****************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/assertThisInitialized.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/asyncToGenerator.js":
/*!***********************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/asyncToGenerator.js ***!
\***********************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/asyncToGenerator.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/classCallCheck.js":
/*!*********************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/classCallCheck.js ***!
\*********************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/classCallCheck.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/createClass.js":
/*!******************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/createClass.js ***!
\******************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/createClass.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/defineProperty.js":
/*!*********************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/defineProperty.js ***!
\*********************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/defineProperty.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/get.js":
/*!**********************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/get.js ***!
\**********************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var superPropBase = __webpack_require__(/*! ./superPropBase.js */ \"../../node_modules/@babel/runtime/helpers/superPropBase.js\");\n\nfunction _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n module.exports = _get = Reflect.get;\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n } else {\n module.exports = _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n }\n\n return _get(target, property, receiver || target);\n}\n\nmodule.exports = _get;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/get.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/getPrototypeOf.js":
/*!*********************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/getPrototypeOf.js ***!
\*********************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/getPrototypeOf.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/inherits.js":
/*!***************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/inherits.js ***!
\***************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ \"../../node_modules/@babel/runtime/helpers/setPrototypeOf.js\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/inherits.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js":
/*!********************************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***!
\********************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"../../node_modules/@babel/runtime/helpers/typeof.js\")[\"default\"];\n\nvar assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized.js */ \"../../node_modules/@babel/runtime/helpers/assertThisInitialized.js\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/setPrototypeOf.js":
/*!*********************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/setPrototypeOf.js ***!
\*********************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/setPrototypeOf.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/superPropBase.js":
/*!********************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/superPropBase.js ***!
\********************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var getPrototypeOf = __webpack_require__(/*! ./getPrototypeOf.js */ \"../../node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nmodule.exports = _superPropBase;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/superPropBase.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/helpers/typeof.js":
/*!*************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/typeof.js ***!
\*************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/helpers/typeof.js?");
/***/ }),
/***/ "../../node_modules/@babel/runtime/regenerator/index.js":
/*!****************************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/regenerator/index.js ***!
\****************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__(/*! regenerator-runtime */ \"../../node_modules/regenerator-runtime/runtime.js\");\n\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/@babel/runtime/regenerator/index.js?");
/***/ }),
/***/ "../../node_modules/regenerator-runtime/runtime.js":
/*!***********************************************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/regenerator-runtime/runtime.js ***!
\***********************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n true ? module.exports : undefined\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/node_modules/regenerator-runtime/runtime.js?");
/***/ }),
/***/ "../../verto-callcenter.js":
/*!***********************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-callcenter.js ***!
\***********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return VertoCallcenter; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"../../node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"../../node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\n/*\n * Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n * Copyright (C) 2005-2017, Anthony Minessale II <[email protected]>\n *\n * Version: MPL 1.1\n *\n * The contents of this file are subject to the Mozilla Public License Version\n * 1.1 (the \"License\"); you may not use this file except in compliance with\n * the License. You may obtain a copy of the License at\n * http://www.mozilla.org/MPL/\n *\n * Software distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n * for the specific language governing rights and limitations under the\n * License.\n *\n * The Original Code is Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n *\n * The Initial Developer of the Original Code is\n * Anthony Minessale II <[email protected]>\n * Portions created by the Initial Developer are Copyright (C)\n * the Initial Developer. All Rights Reserved.\n *\n * Contributor(s):\n *\n * Seven Du <[email protected]>\n *\n * verto-callcenter.js - Verto Conference Manager\n *\n */\nvar VertoCallcenter = /*#__PURE__*/function () {\n function VertoCallcenter(verto, params) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, VertoCallcenter);\n\n this.params = Object.assign({}, params);\n this.verto = verto;\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(VertoCallcenter, [{\n key: \"setGroup\",\n value: function setGroup(group) {\n this.params.group = group;\n }\n }, {\n key: \"agentName\",\n value: function agentName(agent) {\n if (this.params.group) {\n return this.params.group + '.' + agent;\n } else {\n return agent;\n }\n }\n }, {\n key: \"eventChannel\",\n value: function eventChannel(agent) {\n // agent can be undefined then returns the group or \"vcc\"\n var c = \"vcc\";\n if (this.params.group) c = c + '.' + this.params.group;\n\n if (agent) {\n return c + '.' + agent;\n } else {\n return c;\n }\n }\n }, {\n key: \"ccLogin\",\n value: function ccLogin(queue, agent, extn, success_cb, failed_cb) {\n this.execute(\"ccLogin\", {\n queue: queue,\n agent: this.agentName(agent),\n extn: extn\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccLogout\",\n value: function ccLogout(queue, agent, success_cb, failed_cb) {\n this.execute(\"ccLogout\", {\n queue: queue,\n agent: this.agentName(agent)\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccGoReady\",\n value: function ccGoReady(queue, agent, success_cb, failed_cb) {\n this.execute(\"ccGoReady\", {\n queue: queue,\n agent: this.agentName(agent)\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccGoBreak\",\n value: function ccGoBreak(queue, agent, reason, success_cb, failed_cb) {\n this.execute(\"ccGoBreak\", {\n queue: queue,\n agent: this.agentName(agent),\n reason: reason\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccAnswer\",\n value: function ccAnswer(destUUID, success_cb, failed_cb) {\n this.execute(\"ccAnswer\", {\n destUUID: destUUID\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccKill\",\n value: function ccKill(destUUID, success_cb, failed_cb) {\n this.execute(\"ccKill\", {\n destUUID: destUUID\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccHold\",\n value: function ccHold(callID, success_cb, failed_cb) {\n this.execute(\"ccHold\", {\n callID: callID\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccUnHold\",\n value: function ccUnHold(callID, success_cb, failed_cb) {\n this.execute(\"ccUnHold\", {\n callID: callID\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccTransfer\",\n value: function ccTransfer(callID, callerNumber, destNumber, earlyMedia, type, success_cb, failed_cb) {\n this.execute(\"ccTransfer\", {\n destNumber: destNumber,\n callerNumber: callerNumber,\n callID: callID,\n earlyMedia: earlyMedia,\n type: type\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccDial\",\n value: function ccDial(agent, extn, callerNumber, destNumber, earlyMedia, success_cb, failed_cb) {\n this.execute(\"ccDial\", {\n agent: this.agentName(agent),\n extn: extn,\n destNumber: destNumber,\n callerNumber: callerNumber,\n earlyMedia: earlyMedia\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccThreeWay\",\n value: function ccThreeWay(agent, extn, destAgent, callID, success_cb, failed_cb) {\n this.execute(\"ccThreeWay\", {\n agent: this.agentName(agent),\n callID: callID,\n destAgent: this.agentName(destAgent),\n destExtn: extn\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccMonitor\",\n value: function ccMonitor(agent, extn, destAgent, destUUID, success_cb, failed_cb) {\n this.execute(\"ccMonitor\", {\n agent: this.agentName(agent),\n extn: extn,\n destUUID: destUUID,\n destAgent: destAgent\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccIntercept\",\n value: function ccIntercept(agent, extn, destAgent, destUUID, success_cb, failed_cb) {\n this.execute(\"ccIntercept\", {\n agent: this.agentName(agent),\n extn: extn,\n destUUID: destUUID,\n destAgent: destAgent\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccConsult\",\n value: function ccConsult(agent, extn, destAgent, callID, success_cb, failed_cb) {\n this.execute(\"ccConsult\", {\n agent: this.agentName(agent),\n destExtn: extn,\n callID: callID,\n destAgent: destAgent\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccTransferConsult\",\n value: function ccTransferConsult(callID, success_cb, failed_cb) {\n this.execute(\"ccTransferConsult\", {\n callID: callID\n }, success_cb, failed_cb);\n }\n }, {\n key: \"ccCancelConsult\",\n value: function ccCancelConsult(callID, success_cb, failed_cb) {\n this.execute(\"ccCancelConsult\", {\n callID: callID\n }, success_cb, failed_cb);\n }\n }, {\n key: \"execute\",\n value: function execute(func, data, success_cb, failed_cb) {\n this.verto.sendMethod(\"jsapi\", {\n command: \"lua\",\n data: {\n method: \"ccc\",\n func: func,\n data: data\n }\n }, success_cb, failed_cb);\n }\n }]);\n\n return VertoCallcenter;\n}(); // window.VertoCallcenter = VertoCallcenter;\n\n/* For Emacs:\n * Local Variables:\n * mode:c\n * indent-tabs-mode:t\n * tab-width:4\n * c-basic-offset:4\n * End:\n * For VIM:\n * vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:\n */\n\n\n\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-callcenter.js?");
/***/ }),
/***/ "../../verto-confman.js":
/*!********************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-confman.js ***!
\********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return VertoConfMan; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"../../node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"../../node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _verto_livearray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./verto-livearray */ \"../../verto-livearray.js\");\n\n\n\n/*\n * Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n * Copyright (C) 2005-2017, Anthony Minessale II <[email protected]>\n *\n * Version: MPL 1.1\n *\n * The contents of this file are subject to the Mozilla Public License Version\n * 1.1 (the \"License\"); you may not use this file except in compliance with\n * the License. You may obtain a copy of the License at\n * http://www.mozilla.org/MPL/\n *\n * Software distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n * for the specific language governing rights and limitations under the\n * License.\n *\n * The Original Code is Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n *\n * The Initial Developer of the Original Code is\n * Anthony Minessale II <[email protected]>\n * Portions created by the Initial Developer are Copyright (C)\n * the Initial Developer. All Rights Reserved.\n *\n * Contributor(s):\n *\n * Seven Du <[email protected]>\n * Xueyun Jiang <[email protected]>\n *\n * verto-confman.js - Verto Conference Manager\n *\n */\n\nvar CONFMAN_SERNO = 0;\n\nvar VertoConfMan = /*#__PURE__*/function () {\n function VertoConfMan(verto, params) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, VertoConfMan);\n\n this.params = Object.assign({\n dialog: null,\n hasVid: false,\n laData: null,\n onBroadcast: null,\n onLaChange: null,\n onLaRow: null\n }, params);\n this.verto = verto;\n this.serno = CONFMAN_SERNO++;\n this.canvasCount = this.params.laData.canvasCount;\n\n var _this = this;\n\n var laData = this.params.laData;\n this.liveArray = new _verto_livearray__WEBPACK_IMPORTED_MODULE_2__[\"default\"](verto, laData.laChannel, laData.laName, {\n onChange: typeof _this.params.onLaChange === \"function\" ? _this.params.onLaChange : null\n });\n\n if (typeof _this.params.onInfo === \"function\") {\n verto.subscribe(this.params.laData.infoChannel, {\n handler: _this.params.onInfo\n });\n this.params.laData.onInfo = _this.params.onInfo;\n }\n\n if (typeof _this.params.onChat === \"function\") {\n verto.subscribe(this.params.laData.chatChannel, {\n handler: _this.params.onChat\n });\n this.params.laData.onChat = _this.params.onChat;\n }\n\n if (typeof _this.params.onXUIEvent === \"function\") {\n var xui_channel = this.params.laData.infoChannel.replace(/^conference-info/, \"conference-xui\");\n verto.subscribe(xui_channel, {\n handler: _this.params.onXUIEvent\n });\n this.params.laData.onXUI = _this.params.onXUIEvent;\n }\n\n if (this.params.laData.role === \"moderator\") {\n verto.subscribe(this.params.laData.modChannel, {\n handler: function handler(v, e) {\n // console.error(\"MODDATA:\", e.data);\n if (_this.params.onBroadcast) {\n _this.params.onBroadcast(verto, _this, e.data);\n }\n\n if (e.data[\"conf-command\"] === \"list-videoLayouts\") {}\n }\n });\n\n if (this.params.hasVid) {\n this.modCommand(\"list-videoLayouts\", null, null);\n }\n }\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(VertoConfMan, [{\n key: \"modCommand\",\n value: function modCommand(cmd, id, value) {\n this.verto.call(\"verto.broadcast\", {\n \"eventChannel\": this.params.laData.modChannel,\n \"data\": {\n \"application\": \"conf-control\",\n \"command\": cmd,\n \"id\": id,\n \"value\": value\n }\n });\n }\n }, {\n key: \"modCommand2\",\n value: function modCommand2(cmd, data, success_cb, failed_cb) {\n data.application = \"conf-control\";\n data.command = cmd;\n this.verto.call(\"verto.broadcast\", {\n \"eventChannel\": this.params.laData.modChannel,\n \"data\": data\n }, success_cb, failed_cb);\n }\n }, {\n key: \"sendChat\",\n value: function sendChat(message, type) {\n this.verto.call(\"verto.broadcast\", {\n \"eventChannel\": this.params.laData.chatChannel,\n \"data\": {\n \"action\": \"send\",\n \"message\": message,\n \"type\": type\n }\n });\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.destroyed = true;\n\n if (this.params.laData.onChat) {\n this.verto.unsubscribe(this.params.laData.chatChannel);\n this.params.laData.onChat = null;\n }\n\n if (this.params.laData.onInfo) {\n this.verto.unsubscribe(this.params.laData.infoChannel);\n this.params.laData.onInfo = null;\n }\n\n if (this.params.laData.onXUI) {\n var xui_channel = this.params.laData.infoChannel.replace(/^conference-info/, \"conference-xui\");\n this.verto.unsubscribe(xui_channel);\n this.params.laData.onXUI = null;\n }\n\n if (this.params.laData.role === \"moderator\") {\n this.verto.unsubscribe(this.params.laData.modChannel);\n }\n\n if (this.liveArray) {\n this.liveArray.destroy();\n }\n }\n }, {\n key: \"listVideoLayouts\",\n value: function listVideoLayouts() {\n this.modCommand(\"list-videoLayouts\", null, null);\n }\n }, {\n key: \"canvasInfo\",\n value: function canvasInfo(memberID) {\n var data = {};\n\n if (memberID) {\n data.memberID = memberID;\n }\n\n this.modCommand2(\"canvasInfo\", data);\n }\n }, {\n key: \"play\",\n value: function play(file) {\n this.modCommand(\"play\", null, file);\n }\n }, {\n key: \"stop\",\n value: function stop() {\n this.modCommand(\"stop\", null, \"all\");\n }\n }, {\n key: \"deaf\",\n value: function deaf(memberID) {\n this.modCommand(\"deaf\", parseInt(memberID));\n }\n }, {\n key: \"undeaf\",\n value: function undeaf(memberID) {\n this.modCommand(\"undeaf\", parseInt(memberID));\n }\n }, {\n key: \"record\",\n value: function record(file) {\n this.modCommand(\"recording\", null, [\"start\", file]);\n }\n }, {\n key: \"stopRecord\",\n value: function stopRecord() {\n this.modCommand(\"recording\", null, [\"stop\", \"all\"]);\n }\n }, {\n key: \"snapshot\",\n value: function snapshot(file) {\n if (!this.params.hasVid) {\n throw new Error('Conference has no video');\n }\n\n this.modCommand(\"vid-write-png\", null, file);\n }\n }, {\n key: \"setVideoLayout\",\n value: function setVideoLayout(layout, canvasID) {\n if (!this.params.hasVid) {\n throw new Error('Conference has no video');\n }\n\n if (canvasID) {\n this.modCommand(\"vid-layout\", null, [layout, canvasID]);\n } else {\n this.modCommand(\"vid-layout\", null, layout);\n }\n }\n }, {\n key: \"kick\",\n value: function kick(memberID) {\n this.modCommand(\"kick\", parseInt(memberID));\n }\n }, {\n key: \"flip\",\n value: function flip(memberID) {\n this.modCommand(\"vid-flip\", parseInt(memberID));\n }\n }, {\n key: \"muteAll\",\n value: function muteAll() {\n this.modCommand(\"mute\", \"all\");\n }\n }, {\n key: \"muteMic\",\n value: function muteMic(memberID) {\n this.modCommand(\"tmute\", parseInt(memberID));\n }\n }, {\n key: \"muteVideo\",\n value: function muteVideo(memberID) {\n if (!this.params.hasVid) {\n throw new Error('Conference has no video');\n }\n\n this.modCommand(\"tvmute\", parseInt(memberID));\n }\n }, {\n key: \"presenter\",\n value: function presenter(memberID) {\n if (!this.params.hasVid) {\n throw new Error('Conference has no video');\n }\n\n this.modCommand(\"vid-res-id\", parseInt(memberID), \"presenter\");\n }\n }, {\n key: \"videoFloor\",\n value: function videoFloor(memberID) {\n if (!this.params.hasVid) {\n throw new Error('Conference has no video');\n }\n\n this.modCommand(\"vid-floor\", parseInt(memberID), \"force\");\n }\n }, {\n key: \"banner\",\n value: function banner(memberID, text) {\n if (!this.params.hasVid) {\n throw new Error('Conference has no video');\n }\n\n this.modCommand(\"vid-banner\", parseInt(memberID), escape(text));\n }\n }, {\n key: \"volumeDown\",\n value: function volumeDown(memberID) {\n this.modCommand(\"volume_out\", parseInt(memberID), \"down\");\n }\n }, {\n key: \"volumeUp\",\n value: function volumeUp(memberID) {\n this.modCommand(\"volume_out\", parseInt(memberID), \"up\");\n }\n }, {\n key: \"gainDown\",\n value: function gainDown(memberID) {\n this.modCommand(\"volume_in\", parseInt(memberID), \"down\");\n }\n }, {\n key: \"gainUp\",\n value: function gainUp(memberID) {\n this.modCommand(\"volume_in\", parseInt(memberID), \"up\");\n }\n }, {\n key: \"transfer\",\n value: function transfer(memberID, exten) {\n this.modCommand(\"transfer\", parseInt(memberID), exten);\n }\n }, {\n key: \"lock\",\n value: function lock() {\n this.modCommand(\"lock\"); // this.execute2(\"lock\");\n }\n }, {\n key: \"unlock\",\n value: function unlock() {\n this.modCommand(\"unlock\"); // this.execute2(\"unlock\");\n }\n }, {\n key: \"setReservation\",\n value: function setReservation(memberID, resID) {\n this.modCommand(\"vid-res-id\", parseInt(memberID), resID);\n }\n }, {\n key: \"setLayer\",\n value: function setLayer(memberID, layer) {\n this.modCommand(\"vid-layer\", parseInt(memberID), layer);\n }\n }, {\n key: \"info\",\n value: function info(success_cb, failed_cb) {\n var data = {};\n data.conferenceName = this.params.laData.infoChannel.substr(\"confernece-info.\".length).split('@').shift();\n data.conferenceModChannel = this.params.laData.modChannel;\n this.execute(\"conferenceInfo\", data, success_cb, failed_cb);\n }\n }, {\n key: \"recording\",\n value: function recording(action, success_cb, failed_cb) {\n // this.modCommand(\"recording\", null, [action]);\n this.execute2(\"recording\", {\n action: action\n }, success_cb, failed_cb);\n }\n }, {\n key: \"execute\",\n value: function execute(func, data, success_cb, failed_cb) {\n // find the conference name\n if (!data) data = {};\n data.conferenceName = this.params.laData.infoChannel.substr(\"confernece-info.\".length).split('@').shift();\n data.conferenceModChannel = this.params.laData.modChannel;\n this.verto.sendMethod(\"jsapi\", {\n command: func,\n data: data\n }, success_cb, failed_cb);\n }\n }, {\n key: \"execute2\",\n value: function execute2(func, data, success_cb, failed_cb) {\n // lua\n // find the conference name\n if (!data) data = {};\n data.conferenceName = this.params.laData.infoChannel.substr(\"confernece-info.\".length).split('@').shift();\n data.conferenceModChannel = this.params.laData.modChannel;\n this.verto.sendMethod(\"jsapi\", {\n command: \"lua\",\n data: {\n method: \"conference\",\n func: func,\n data: data\n }\n }, success_cb, failed_cb);\n }\n }]);\n\n return VertoConfMan;\n}(); // window.VertoConfMan = VertoConfMan;\n\n/* For Emacs:\n * Local Variables:\n * mode:c\n * indent-tabs-mode:t\n * tab-width:4\n * c-basic-offset:4\n * End:\n * For VIM:\n * vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:\n */\n\n\n\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-confman.js?");
/***/ }),
/***/ "../../verto-dialog.js":
/*!*******************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-dialog.js ***!
\*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return VertoDialog; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"../../node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"../../node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _verto_rtc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./verto-rtc */ \"../../verto-rtc.js\");\n/* harmony import */ var _verto__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./verto */ \"../../verto.js\");\n\n\n\n/*\n * Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n * Copyright (C) 2005-2017, Anthony Minessale II <[email protected]>\n *\n * Version: MPL 1.1\n *\n * The contents of this file are subject to the Mozilla Public License Version\n * 1.1 (the \"License\"); you may not use this file except in compliance with\n * the License. You may obtain a copy of the License at\n * http://www.mozilla.org/MPL/\n *\n * Software distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n * for the specific language governing rights and limitations under the\n * License.\n *\n * The Original Code is Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n *\n * The Initial Developer of the Original Code is\n * Anthony Minessale II <[email protected]>\n * Portions created by the Initial Developer are Copyright (C)\n * the Initial Developer. All Rights Reserved.\n *\n * Contributor(s):\n *\n * Seven Du <[email protected]>\n * Xueyun Jiang <[email protected]>\n *\n * verto-dialog.js - Verto Dialog\n *\n */\n\n\n\nvar VertoDialog = /*#__PURE__*/function () {\n function VertoDialog(direction, verto, params) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, VertoDialog);\n\n var dialog = this;\n dialog.params = Object.assign({\n useVideo: verto.options.useVideo,\n useStereo: verto.options.useStereo,\n screenShare: false,\n useCamera: params.screenShare ? false : verto.options.deviceParams.useCamera,\n useCameraLabel: params.screenShare ? undefined : verto.options.deviceParams.useCameraLabel,\n useMic: verto.options.deviceParams.useMic,\n useMicLabel: verto.options.deviceParams.useMicLabel,\n useSpeak: verto.options.deviceParams.useSpeak,\n tag: verto.options.tag,\n localTag: verto.options.localTag,\n login: verto.options.login,\n videoParams: verto.options.videoParams\n }, params);\n dialog.verto = verto;\n dialog.direction = direction;\n dialog.lastState = null;\n dialog.state = dialog.lastState = _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.new;\n dialog.callbacks = verto.callbacks;\n dialog.answered = false;\n dialog.attach = params.attach || false;\n dialog.screenShare = params.screenShare || false;\n dialog.useCamera = dialog.params.useCamera;\n dialog.useCameraLabel = dialog.params.useCameraLabel;\n dialog.useMic = dialog.params.useMic;\n dialog.useMicLabel = dialog.params.useMicLabel;\n dialog.useSpeak = dialog.params.useSpeak;\n dialog.rtc = null;\n\n if (dialog.params.callID) {\n dialog.callID = dialog.params.callID;\n } else {\n dialog.callID = dialog.params.callID = verto.generateGUID();\n }\n\n if (typeof dialog.params.tag === \"function\") {\n dialog.params.tag = dialog.params.tag();\n }\n\n if (dialog.params.tag) {\n dialog.audioStream = document.getElementById(dialog.params.tag);\n\n if (dialog.params.useVideo) {\n dialog.videoStream = dialog.audioStream;\n }\n }\n\n if (dialog.params.localTag) {\n dialog.localVideo = document.getElementById(dialog.params.localTag);\n }\n\n dialog.verto.dialogs[dialog.callID] = dialog;\n var RTCcallbacks = {};\n\n if (dialog.direction === _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.direction.inbound) {\n if (dialog.params.display_direction === \"outbound\") {\n dialog.params.remote_caller_id_name = dialog.params.caller_id_name;\n dialog.params.remote_caller_id_number = dialog.params.caller_id_number;\n } else {\n dialog.params.remote_caller_id_name = dialog.params.callee_id_name;\n dialog.params.remote_caller_id_number = dialog.params.callee_id_number;\n }\n\n if (!dialog.params.remote_caller_id_name) {\n dialog.params.remote_caller_id_name = \"Nobody\";\n }\n\n if (!dialog.params.remote_caller_id_number) {\n dialog.params.remote_caller_id_number = \"UNKNOWN\";\n }\n\n RTCcallbacks.onMessage = function (rtc, msg) {\n console.debug(msg);\n };\n\n RTCcallbacks.onAnswerSDP = function (rtc, sdp) {\n console.error(\"answer sdp\", sdp);\n };\n } else {\n dialog.params.remote_caller_id_name = \"Outbound Call\";\n dialog.params.remote_caller_id_number = dialog.params.destination_number;\n }\n\n RTCcallbacks.onICESDP = function (rtc) {\n console.log(\"RECV \" + rtc.type + \" SDP\", rtc.mediaData.SDP);\n\n if (dialog.state === _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.requesting || dialog.state === _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.answering || dialog.state === _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.active) {\n // location.reload();\n return;\n }\n\n if (rtc.type === \"offer\") {\n if (dialog.state === _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.active) {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.requesting);\n dialog.sendMethod(\"verto.attach\", {\n sdp: rtc.mediaData.SDP\n });\n } else {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.requesting);\n dialog.sendMethod(\"verto.invite\", {\n sdp: rtc.mediaData.SDP\n });\n }\n } else {\n //answer\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.answering);\n dialog.sendMethod(dialog.attach ? \"verto.attach\" : \"verto.answer\", {\n sdp: dialog.rtc.mediaData.SDP\n });\n }\n };\n\n RTCcallbacks.onICE = function (rtc) {\n //console.log(\"cand\", rtc.mediaData.candidate);\n if (rtc.type === \"offer\") {\n console.log(\"offer\", rtc.mediaData.candidate);\n return;\n }\n };\n\n RTCcallbacks.onStream = function (rtc, stream) {\n if (dialog.callbacks.permissionCallback && typeof dialog.callbacks.permissionCallback.onGranted === 'function') {\n dialog.callbacks.permissionCallback.onGranted(stream);\n } else if (dialog.verto.options.permissionCallback && typeof dialog.verto.options.permissionCallback.onGranted === 'function') {\n dialog.verto.options.permissionCallback.onGranted(stream);\n }\n\n console.log(\"stream started\");\n };\n\n RTCcallbacks.onRemoteStream = function (rtc, stream) {\n if (typeof dialog.callbacks.onRemoteStream === 'function') {\n dialog.callbacks.onRemoteStream(stream, dialog);\n }\n\n console.log(\"remote stream started\");\n };\n\n RTCcallbacks.onError = function (e) {\n if (dialog.callbacks.permissionCallback && typeof dialog.callbacks.permissionCallback.onDenied === 'function') {\n dialog.callbacks.permissionCallback.onDenied(e);\n } else if (dialog.verto.options.permissionCallback && typeof dialog.verto.options.permissionCallback.onDenied === 'function') {\n dialog.verto.options.permissionCallback.onDenied(e);\n }\n\n console.error(\"ERROR:\", e);\n dialog.hangup({\n cause: \"Device or Permission Error\"\n });\n };\n\n dialog.rtc = new _verto_rtc__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n callbacks: RTCcallbacks,\n localVideo: dialog.screenShare ? null : dialog.localVideo,\n useVideo: dialog.params.useVideo ? dialog.videoStream : null,\n useAudio: dialog.audioStream,\n useStereo: dialog.params.useStereo || false,\n videoParams: dialog.params.videoParams || {},\n audioParams: verto.options.audioParams || {},\n iceServers: verto.options.iceServers,\n screenShare: dialog.screenShare,\n useCamera: dialog.useCamera,\n useCameraLabel: dialog.useCameraLabel,\n useMic: dialog.useMic,\n useMicLabel: dialog.useMicLabel,\n useSpeak: dialog.useSpeak,\n turnServer: verto.options.turnServer,\n useStream: dialog.params.useStream,\n videoBandwidth: dialog.params.videoBandwidth\n });\n\n if (dialog.direction === _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.direction.inbound) {\n if (dialog.attach) {\n dialog.answer();\n } else {\n dialog.ring();\n }\n }\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(VertoDialog, [{\n key: \"invite\",\n value: function invite() {\n var dialog = this;\n dialog.rtc.call();\n }\n }, {\n key: \"sendMethod\",\n value: function sendMethod(method, obj) {\n var dialog = this;\n obj.dialogParams = {};\n\n if (dialog.node_uuid) {\n obj.node_uuid = dialog.node_uuid;\n }\n\n for (var i in dialog.params) {\n if (i === \"sdp\" && method !== \"verto.invite\" && method !== \"verto.attach\") {\n continue;\n }\n\n if (obj.noDialogParams && i !== \"callID\") {\n continue;\n }\n\n obj.dialogParams[i] = dialog.params[i];\n }\n\n delete obj.noDialogParams;\n dialog.verto.call(method, obj, function (e) {\n /* Success */\n dialog.processReply(method, true, e);\n }, function (e) {\n /* Error */\n dialog.processReply(method, false, e);\n });\n }\n }, {\n key: \"setAudioPlaybackDevice\",\n value: function setAudioPlaybackDevice(sinkId, callback, arg) {\n var dialog = this;\n var element = dialog.audioStream;\n\n if (typeof element.sinkId !== 'undefined') {\n var devname = dialog.find_name(sinkId);\n console.info(\"Dialog: \" + dialog.callID + \" Setting speaker:\", element, devname);\n element.setSinkId(sinkId).then(function () {\n console.log(\"Dialog: \" + dialog.callID + ' Success, audio output device attached: ' + sinkId);\n\n if (callback) {\n callback(true, devname, arg);\n }\n }).catch(function (error) {\n var errorMessage = error;\n\n if (error.name === 'SecurityError') {\n errorMessage = \"Dialog: \" + dialog.callID + ' You need to use HTTPS for selecting audio output ' + 'device: ' + error;\n }\n\n if (callback) {\n callback(false, null, arg);\n }\n\n console.error(errorMessage);\n });\n } else {\n console.warn(\"Dialog: \" + dialog.callID + ' Browser does not support output device selection.');\n\n if (callback) {\n callback(false, null, arg);\n }\n }\n }\n }, {\n key: \"setState\",\n value: function setState(state) {\n var dialog = this;\n\n if (dialog.state === _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.ringing) {\n dialog.stopRinging();\n }\n\n if (dialog.state === state || !dialog.checkStateChange(dialog.state, state)) {\n console.error(\"Dialog \" + dialog.callID + \": INVALID state change from \" + dialog.state.name + \" to \" + state.name);\n dialog.hangup();\n return false;\n }\n\n console.log(\"Dialog \" + dialog.callID + \": state change from \" + dialog.state.name + \" to \" + state.name);\n dialog.lastState = dialog.state;\n dialog.state = state;\n\n if (dialog.callbacks.onDialogState) {\n dialog.callbacks.onDialogState(this);\n }\n\n switch (dialog.state) {\n case _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.early:\n case _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.active:\n var speaker = dialog.useSpeak;\n console.info(\"Using Speaker: \", speaker);\n\n if (speaker && speaker !== \"any\" && speaker !== \"none\") {\n setTimeout(function () {\n dialog.setAudioPlaybackDevice(speaker);\n }, 500);\n }\n\n break;\n\n case _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.trying:\n setTimeout(function () {\n if (dialog.state === _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.trying) {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.hangup);\n }\n }, 30000);\n break;\n\n case _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.purge:\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.destroy);\n break;\n\n case _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.hangup:\n if (dialog.lastState.val > _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.requesting.val && dialog.lastState.val < _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.hangup.val) {\n dialog.sendMethod(\"verto.bye\", {});\n }\n\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.destroy);\n break;\n\n case _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.destroy:\n if (typeof dialog.verto.options.tag === \"function\") {\n // $('#' + dialog.params.tag).remove();\n console.error(\"FIXME\", \"!!!!!\");\n }\n\n dialog.resetRinger();\n delete dialog.verto.dialogs[dialog.callID];\n\n if (dialog.params.screenShare) {\n dialog.rtc.stopPeer();\n } else {\n dialog.rtc.stop();\n }\n\n break;\n\n default:\n break;\n }\n\n return true;\n }\n }, {\n key: \"processReply\",\n value: function processReply(method, success, e) {\n var dialog = this;\n console.log(\"Response: \" + method + \" State:\" + dialog.state.name, success, e);\n\n switch (method) {\n case \"verto.answer\":\n case \"verto.attach\":\n if (success) {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.active);\n } else {\n dialog.hangup();\n }\n\n break;\n\n case \"verto.invite\":\n if (success) {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.trying);\n } else {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.destroy);\n }\n\n break;\n\n case \"verto.bye\":\n dialog.hangup();\n break;\n\n case \"verto.modify\":\n if (e.holdState) {\n if (e.holdState === \"held\") {\n if (dialog.state !== _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.held) {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.held);\n }\n } else if (e.holdState === \"active\") {\n if (dialog.state !== _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.active) {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.active);\n }\n }\n }\n\n if (success) {}\n\n break;\n\n default:\n break;\n }\n }\n }, {\n key: \"hangup\",\n value: function hangup(params) {\n var dialog = this;\n\n if (params) {\n if (params.causeCode) {\n dialog.causeCode = params.causeCode;\n }\n\n if (params.cause) {\n dialog.cause = params.cause;\n }\n }\n\n if (!dialog.cause && !dialog.causeCode) {\n dialog.cause = \"NORMAL_CLEARING\";\n }\n\n if (dialog.state.val >= _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.new.val && dialog.state.val < _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.hangup.val) {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.hangup);\n } else if (dialog.state.val < _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.destroy) {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.destroy);\n }\n }\n }, {\n key: \"stopRinging\",\n value: function stopRinging() {\n if (this.verto.ringer) {\n this.rtc.stopRinger(this.verto.ringer);\n }\n }\n }, {\n key: \"indicateRing\",\n value: function indicateRing() {\n var dialog = this;\n\n if (dialog.verto.ringer) {\n dialog.verto.ringer.src = dialog.verto.options.ringFile;\n dialog.verto.ringer.play();\n setTimeout(function () {\n dialog.stopRinging();\n\n if (dialog.state === _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.ringing) {\n dialog.indicateRing();\n }\n }, dialog.verto.options.ringSleep);\n }\n } // clear ringer's media stream and reset time\n\n }, {\n key: \"resetRinger\",\n value: function resetRinger() {\n var dialog = this;\n\n if (dialog.verto.ringer) {\n var ringer = dialog.verto.ringer;\n ringer.srcObject = null; //stop ring \n\n dialog.stopRinging();\n }\n }\n }, {\n key: \"ring\",\n value: function ring() {\n var dialog = this;\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.ringing);\n dialog.indicateRing();\n }\n }, {\n key: \"useVideo\",\n value: function useVideo(on) {\n var dialog = this;\n dialog.params.useVideo = on;\n\n if (on) {\n dialog.videoStream = dialog.audioStream;\n } else {\n dialog.videoStream = null;\n }\n\n dialog.rtc.useVideo(dialog.videoStream, dialog.localVideo);\n }\n }, {\n key: \"setMute\",\n value: function setMute(what) {\n var dialog = this;\n return dialog.rtc.setMute(what);\n }\n }, {\n key: \"getMute\",\n value: function getMute() {\n var dialog = this;\n return dialog.rtc.getMute();\n }\n }, {\n key: \"setVideoMute\",\n value: function setVideoMute(what) {\n var dialog = this;\n return dialog.rtc.setVideoMute(what);\n }\n }, {\n key: \"$getVideoMute\",\n value: function $getVideoMute() {\n var dialog = this;\n return dialog.rtc.getVideoMute();\n }\n }, {\n key: \"useStereo\",\n value: function useStereo(on) {\n var dialog = this;\n dialog.params.useStereo = on;\n dialog.rtc.useStereo(on);\n }\n }, {\n key: \"dtmf\",\n value: function dtmf(digits) {\n var dialog = this;\n\n if (digits) {\n dialog.sendMethod(\"verto.info\", {\n dtmf: digits\n });\n }\n }\n }, {\n key: \"click\",\n value: function click(position) {\n var dialog = this;\n console.log('clicked position', position);\n\n if (position) {\n dialog.sendMethod(\"verto.info\", {\n clicked: position\n });\n }\n }\n }, {\n key: \"rtt\",\n value: function rtt(obj) {\n var dialog = this;\n var pobj = {};\n\n if (!obj) {\n return false;\n }\n\n pobj.code = obj.code;\n pobj.chars = obj.chars;\n\n if (pobj.chars || pobj.code) {\n dialog.sendMethod(\"verto.info\", {\n txt: obj,\n noDialogParams: true\n });\n }\n }\n }, {\n key: \"transfer\",\n value: function transfer(dest, params) {\n var dialog = this;\n\n if (dest) {\n dialog.sendMethod(\"verto.modify\", {\n action: \"transfer\",\n destination: dest,\n params: params\n });\n }\n }\n }, {\n key: \"replace\",\n value: function replace(replaceCallID, params) {\n var dialog = this;\n\n if (replaceCallID) {\n dialog.sendMethod(\"verto.modify\", {\n action: \"replace\",\n replaceCallID: replaceCallID,\n params: params\n });\n }\n }\n }, {\n key: \"hold\",\n value: function hold(params) {\n var dialog = this;\n dialog.sendMethod(\"verto.modify\", {\n action: \"hold\",\n params: params\n });\n }\n }, {\n key: \"unhold\",\n value: function unhold(params) {\n var dialog = this;\n dialog.sendMethod(\"verto.modify\", {\n action: \"unhold\",\n params: params\n });\n }\n }, {\n key: \"toggleHold\",\n value: function toggleHold(params) {\n var dialog = this;\n dialog.sendMethod(\"verto.modify\", {\n action: \"toggleHold\",\n params: params\n });\n }\n }, {\n key: \"message\",\n value: function message(msg) {\n var dialog = this;\n var err = 0;\n msg.from = dialog.params.login;\n\n if (!msg.to) {\n console.error(\"Missing To\");\n err++;\n }\n\n if (!msg.body) {\n console.error(\"Missing Body\");\n err++;\n }\n\n if (err) {\n return false;\n }\n\n dialog.sendMethod(\"verto.info\", {\n msg: msg\n });\n return true;\n }\n }, {\n key: \"answer\",\n value: function answer(params) {\n var dialog = this;\n if (dialog.answered) return;\n if (!params) params = {};\n params.sdp = dialog.params.sdp;\n\n if (params) {\n if (params.useVideo) {\n dialog.useVideo(true);\n }\n\n dialog.params.callee_id_name = params.callee_id_name;\n dialog.params.callee_id_number = params.callee_id_number;\n\n if (params.useCamera) {\n dialog.useCamera = params.useCamera;\n dialog.useCameraLabel = params.useCameraLabel;\n }\n\n if (params.useMic) {\n dialog.useMic = params.useMic;\n dialog.useMic = params.useMicLabel;\n }\n\n if (params.useSpeak) {\n dialog.useSpeak = params.useSpeak;\n }\n }\n\n dialog.rtc.createAnswer(params);\n dialog.answered = true;\n }\n }, {\n key: \"handleAnswer\",\n value: function handleAnswer(params) {\n var dialog = this;\n dialog.gotAnswer = true;\n\n if (dialog.state.val >= _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.active.val) {\n return;\n }\n\n if (dialog.state.val >= _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.early.val) {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.active);\n } else {\n if (dialog.gotEarly) {\n console.log(\"Dialog \" + dialog.callID + \" Got answer while still establishing early media, delaying...\");\n } else {\n console.log(\"Dialog \" + dialog.callID + \" Answering Channel\");\n dialog.rtc.answer(params.sdp, function () {\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.active);\n }, function (e) {\n console.error(e);\n dialog.hangup();\n });\n console.log(\"Dialog \" + dialog.callID + \"ANSWER SDP\", params.sdp);\n }\n }\n }\n }, {\n key: \"cidString\",\n value: function cidString(enc) {\n var dialog = this;\n var party = dialog.params.remote_caller_id_name + (enc ? \" <\" : \" <\") + dialog.params.remote_caller_id_number + (enc ? \">\" : \">\");\n return party;\n }\n }, {\n key: \"sendMessage\",\n value: function sendMessage(msg, params) {\n var dialog = this;\n\n if (dialog.callbacks.onMessage) {\n dialog.callbacks.onMessage(dialog.verto, dialog, msg, params);\n }\n }\n }, {\n key: \"handleInfo\",\n value: function handleInfo(params) {\n var dialog = this;\n dialog.sendMessage(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.message.info, params);\n }\n }, {\n key: \"handleDisplay\",\n value: function handleDisplay(params) {\n var dialog = this;\n\n if (params.display_name) {\n dialog.params.remote_caller_id_name = params.display_name;\n }\n\n if (params.display_number) {\n dialog.params.remote_caller_id_number = params.display_number;\n }\n\n dialog.sendMessage(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.message.display, {});\n }\n }, {\n key: \"handleMedia\",\n value: function handleMedia(params) {\n var dialog = this;\n\n if (dialog.state.val >= _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.early.val) {\n return;\n }\n\n dialog.gotEarly = true;\n dialog.rtc.answer(params.sdp, function () {\n console.log(\"Dialog \" + dialog.callID + \"Establishing early media\");\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.early);\n\n if (dialog.gotAnswer) {\n console.log(\"Dialog \" + dialog.callID + \"Answering Channel\");\n dialog.setState(_verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.active);\n }\n }, function (e) {\n console.error(e);\n dialog.hangup();\n });\n console.log(\"Dialog \" + dialog.callID + \"EARLY SDP\", params.sdp);\n }\n }, {\n key: \"checkStateChange\",\n value: function checkStateChange(oldS, newS) {\n if (newS === _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.state.purge || _verto__WEBPACK_IMPORTED_MODULE_3__[\"Verto\"].enum.states[oldS.name][newS.name]) {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"find_name\",\n value: function find_name(id) {\n for (var i in this.verto.audioOutDevices) {\n var source = this.verto.audioOutDevices[i];\n\n if (source.id === id) {\n return source.label;\n }\n }\n\n return id;\n }\n }]);\n\n return VertoDialog;\n}();\n/* For Emacs:\n * Local Variables:\n * mode:c\n * indent-tabs-mode:t\n * tab-width:4\n * c-basic-offset:4\n * End:\n * For VIM:\n * vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:\n */\n\n\n\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-dialog.js?");
/***/ }),
/***/ "../../verto-livearray.js":
/*!**********************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-livearray.js ***!
\**********************************************************************************/
/*! exports provided: VertoHashArray, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VertoHashArray\", function() { return VertoHashArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return VertoLiveArray; });\n/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ \"../../node_modules/@babel/runtime/helpers/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \"../../node_modules/@babel/runtime/helpers/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \"../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/get */ \"../../node_modules/@babel/runtime/helpers/get.js\");\n/* harmony import */ var _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \"../../node_modules/@babel/runtime/helpers/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"../../node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"../../node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/*\n * Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n * Copyright (C) 2005-2017, Anthony Minessale II <[email protected]>\n *\n * Version: MPL 1.1\n *\n * The contents of this file are subject to the Mozilla Public License Version\n * 1.1 (the \"License\"); you may not use this file except in compliance with\n * the License. You may obtain a copy of the License at\n * http://www.mozilla.org/MPL/\n *\n * Software distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n * for the specific language governing rights and limitations under the\n * License.\n *\n * The Original Code is Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n *\n * The Initial Developer of the Original Code is\n * Anthony Minessale II <[email protected]>\n * Portions created by the Initial Developer are Copyright (C)\n * the Initial Developer. All Rights Reserved.\n *\n * Contributor(s):\n *\n * Seven Du <[email protected]>\n * Xueyun Jiang <[email protected]>\n *\n * verto-livearray.js - Verto LiveArray\n *\n */\nfunction del_array(array, name) {\n var r = [];\n var len = array.length;\n\n for (var i = 0; i < len; i++) {\n if (array[i] !== name) {\n r.push(array[i]);\n }\n }\n\n return r;\n}\n\nvar VertoHashArray = /*#__PURE__*/function () {\n function VertoHashArray() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5___default()(this, VertoHashArray);\n\n this.hash = {};\n this.array = [];\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6___default()(VertoHashArray, [{\n key: \"reorder\",\n value: function reorder(a) {\n var array = a;\n var h = this.hash;\n var hash = {};\n var len = array.length;\n\n for (var i = 0; i < len; i++) {\n var key = array[i];\n\n if (h[key]) {\n hash[key] = h[key];\n delete h[key];\n }\n }\n\n h = undefined;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.hash = undefined;\n this.array = undefined;\n this.hash = {};\n this.array = [];\n }\n }, {\n key: \"add\",\n value: function add(name, val, insertAt) {\n var redraw = false;\n\n if (!this.hash[name]) {\n if (insertAt === undefined || insertAt < 0 || insertAt >= this.array.length) {\n this.array.push(name);\n } else {\n var x = 0;\n var n = [];\n var len = this.array.length;\n\n for (var i = 0; i < len; i++) {\n if (x++ === insertAt) {\n n.push(name);\n }\n\n n.push(this.array[i]);\n }\n\n this.array = undefined;\n this.array = n;\n n = undefined;\n redraw = true;\n }\n }\n\n this.hash[name] = val;\n return redraw;\n }\n }, {\n key: \"del\",\n value: function del(name) {\n var r = false;\n\n if (this.hash[name]) {\n this.array = del_array(this.array, name);\n delete this.hash[name];\n r = true;\n } else {\n console.error(\"can't del nonexistant key \" + name);\n }\n\n return r;\n }\n }, {\n key: \"get\",\n value: function get(name) {\n return this.hash[name];\n }\n }, {\n key: \"order\",\n value: function order() {\n return this.array;\n }\n }, {\n key: \"hash\",\n value: function hash() {\n return this.hash;\n }\n }, {\n key: \"indexOf\",\n value: function indexOf(name) {\n var len = this.array.length;\n\n for (var i = 0; i < len; i++) {\n if (this.array[i] === name) {\n return i;\n }\n }\n }\n }, {\n key: \"arrayLen\",\n value: function arrayLen() {\n return this.array.length;\n }\n }, {\n key: \"asArray\",\n value: function asArray() {\n var r = [];\n var len = this.array.length;\n\n for (var i = 0; i < len; i++) {\n var key = this.array[i];\n r.push(this.hash[key]);\n }\n\n return r;\n }\n }, {\n key: \"each\",\n value: function each(cb) {\n var len = this.array.length;\n\n for (var i = 0; i < len; i++) {\n cb(this.array[i], this.hash[this.array[i]]);\n }\n }\n }, {\n key: \"dump\",\n value: function dump(html) {\n var str = \"\";\n this.each(function (name, val) {\n str += \"name: \" + name + \"val: \" + JSON.stringify(val) + (html ? \"<br>\" : \"\\n\");\n });\n return str;\n }\n }]);\n\n return VertoHashArray;\n}();\n\nvar VertoLiveArray = /*#__PURE__*/function (_VertoHashArray) {\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_1___default()(VertoLiveArray, _VertoHashArray);\n\n var _super = _createSuper(VertoLiveArray);\n\n function VertoLiveArray(verto, context, name, config) {\n var _thisSuper, _thisSuper2, _thisSuper3, _thisSuper4, _this;\n\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_5___default()(this, VertoLiveArray);\n\n _this = _super.call(this);\n _this.verto = verto;\n _this.lastSerno = 0;\n _this.binding = null;\n _this.user_obj = config.userObj;\n _this.config = config;\n _this.local = false; // Save the hashArray add, del, reorder, clear methods so we can make our own.\n\n _this._add = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_3___default()((_thisSuper = _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0___default()(_this), _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(VertoLiveArray.prototype)), \"add\", _thisSuper);\n _this._del = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_3___default()((_thisSuper2 = _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0___default()(_this), _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(VertoLiveArray.prototype)), \"del\", _thisSuper2);\n _this._reorder = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_3___default()((_thisSuper3 = _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0___default()(_this), _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(VertoLiveArray.prototype)), \"reorder\", _thisSuper3);\n _this._clear = _babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_3___default()((_thisSuper4 = _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0___default()(_this), _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(VertoLiveArray.prototype)), \"clear\", _thisSuper4);\n _this.context = context;\n _this.name = name;\n _this.errs = 0;\n _this.onChange = config.onChange;\n console.log(\"VertoLiveArray init....\");\n\n if (context) {\n _this.binding = verto.subscribe(context, {\n handler: _this.eventHandler.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0___default()(_this)),\n userData: _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_0___default()(_this),\n subParams: config.subParams\n });\n }\n\n _this.bootstrap(config);\n\n return _this;\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_6___default()(VertoLiveArray, [{\n key: \"broadcast\",\n value: function broadcast(channel, obj) {\n console.log(\"broadcast\", obj);\n this.verto.broadcast(channel, obj);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this._clear();\n\n this.lastSerno = 0;\n\n if (this.onChange) {\n this.onChange(this, {\n action: \"clear\"\n });\n }\n }\n }, {\n key: \"checkSerno\",\n value: function checkSerno(serno) {\n if (serno < 0) {\n return true;\n }\n\n var la = this;\n\n if (this.lastSerno > 0 && serno !== this.lastSerno + 1) {\n if (this.onErr) {\n this.onErr(la, {\n lastSerno: this.lastSerno,\n serno: serno\n });\n }\n\n this.errs++;\n console.debug(this.errs);\n\n if (this.errs < 3) {\n this.bootstrap(this.user_obj);\n }\n\n return false;\n } else {\n this.lastSerno = serno;\n return true;\n }\n }\n }, {\n key: \"reorder\",\n value: function reorder(serno, a) {\n if (this.checkSerno(serno)) {\n this._reorder(a);\n\n if (this.onChange) {\n this.onChange(this, {\n serno: serno,\n action: \"reorder\"\n });\n }\n }\n }\n }, {\n key: \"init\",\n value: function init(serno, val, key, index) {\n if (key === null || key === undefined) {\n key = serno;\n }\n\n if (this.checkSerno(serno)) {\n var la = this;\n\n if (la.onChange) {\n la.onChange(la, {\n serno: serno,\n action: \"init\",\n index: index,\n key: key,\n data: val\n });\n }\n }\n }\n }, {\n key: \"bootObj\",\n value: function bootObj(serno, val) {\n if (this.checkSerno(serno)) {\n this.clear();\n\n for (var i in val) {\n this._add(val[i][0], val[i][1]);\n }\n\n if (this.onChange) {\n this.onChange(this, {\n serno: serno,\n action: \"bootObj\",\n data: val,\n redraw: true\n });\n }\n }\n } // \t// @param serno La is the serial number for la particular request.\n // \t// @param key If looking at it as a hash table, la represents the key in the hashArray object where you want to store the val object.\n // \t// @param index If looking at it as an array, la represents the position in the array where you want to store the val object.\n // \t// @param val La is the object you want to store at the key or index location in the hash table / array.\n\n }, {\n key: \"add\",\n value: function add(serno, val, key, index) {\n if (key === null || key === undefined) {\n key = serno;\n }\n\n if (this.checkSerno(serno)) {\n var redraw = this._add(key, val, index);\n\n if (this.onChange) {\n this.onChange(this, {\n serno: serno,\n action: \"add\",\n index: index,\n key: key,\n data: val,\n redraw: redraw\n });\n }\n }\n }\n }, {\n key: \"modify\",\n value: function modify(serno, val, key, index) {\n if (key === null || key === undefined) {\n key = serno;\n }\n\n if (this.checkSerno(serno)) {\n this._add(key, val, index);\n\n if (this.onChange) {\n this.onChange(this, {\n serno: serno,\n action: \"modify\",\n key: key,\n data: val,\n index: index\n });\n }\n }\n }\n }, {\n key: \"del\",\n value: function del(serno, key, index) {\n if (key === null || key === undefined) {\n key = serno;\n }\n\n if (this.checkSerno(serno)) {\n if (index === null || index < 0 || index === undefined) {\n index = this.indexOf(key);\n }\n\n var ok = this._del(key);\n\n if (ok && this.onChange) {\n this.onChange(this, {\n serno: serno,\n action: \"del\",\n key: key,\n index: index\n });\n }\n }\n }\n }, {\n key: \"eventHandler\",\n value: function eventHandler(v, e, la) {\n var packet = e.data; // console.log(\"READ:\", packet);\n\n if (packet.name !== la.name) {\n return;\n }\n\n switch (packet.action) {\n case \"init\":\n this.init(packet.wireSerno, packet.data, packet.hashKey, packet.arrIndex);\n break;\n\n case \"bootObj\":\n this.bootObj(packet.wireSerno, packet.data);\n break;\n\n case \"add\":\n this.add(packet.wireSerno, packet.data, packet.hashKey, packet.arrIndex);\n break;\n\n case \"modify\":\n if (!(packet.arrIndex || packet.hashKey)) {\n console.error(\"Invalid Packet\", packet);\n } else {\n this.modify(packet.wireSerno, packet.data, packet.hashKey, packet.arrIndex);\n }\n\n break;\n\n case \"del\":\n if (!(packet.arrIndex || packet.hashKey)) {\n console.error(\"Invalid Packet\", packet);\n } else {\n this.del(packet.wireSerno, packet.hashKey, packet.arrIndex);\n }\n\n break;\n\n case \"clear\":\n this.clear();\n break;\n\n case \"reorder\":\n this.reorder(packet.wireSerno, packet.order);\n break;\n\n default:\n if (this.checkSerno(packet.wireSerno)) {\n if (this.onChange) {\n this.onChange(this, {\n serno: packet.wireSerno,\n action: packet.action,\n data: packet.data\n });\n }\n }\n\n break;\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this._clear();\n\n this.verto.unsubscribe(this.binding);\n }\n }, {\n key: \"sendCommand\",\n value: function sendCommand(cmd, obj) {\n var self = this;\n self.broadcast(self.context, {\n liveArray: {\n command: cmd,\n context: self.context,\n name: self.name,\n obj: obj\n }\n });\n }\n }, {\n key: \"bootstrap\",\n value: function bootstrap(obj) {\n this.sendCommand(\"bootstrap\", obj); //this.heartbeat();\n }\n }, {\n key: \"changepage\",\n value: function changepage(obj) {\n var la = this;\n var self = la;\n self.clear();\n self.broadcast(self.context, {\n liveArray: {\n command: \"changepage\",\n context: la.context,\n name: la.name,\n obj: obj\n }\n });\n }\n }, {\n key: \"heartbeat\",\n value: function heartbeat(obj) {\n var la = this;\n var self = la;\n\n var callback = function callback() {\n self.heartbeat.call(self, obj);\n };\n\n self.broadcast(self.context, {\n liveArray: {\n command: \"heartbeat\",\n context: self.context,\n name: self.name,\n obj: obj\n }\n });\n self.hb_pid = setTimeout(callback, 30000);\n }\n }]);\n\n return VertoLiveArray;\n}(VertoHashArray); // window.VertoLiveArray = VertoLiveArray;\n\n/* For Emacs:\n * Local Variables:\n * mode:c\n * indent-tabs-mode:t\n * tab-width:4\n * c-basic-offset:4\n * End:\n * For VIM:\n * vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:\n */\n\n\n\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-livearray.js?");
/***/ }),
/***/ "../../verto-rtc.js":
/*!****************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-rtc.js ***!
\****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return VertoRTC; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"../../node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"../../node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"../../node_modules/@babel/runtime/helpers/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"../../node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"../../node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _media_device_id__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./media-device-id */ \"../../media-device-id.js\");\n\n\n\n\n\n\n/*\n * Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n * Copyright (C) 2005-2017, Anthony Minessale II <[email protected]>\n *\n * Version: MPL 1.1\n *\n * The contents of this file are subject to the Mozilla Public License Version\n * 1.1 (the \"License\"); you may not use this file except in compliance with\n * the License. You may obtain a copy of the License at\n * http://www.mozilla.org/MPL/\n *\n * Software distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n * for the specific language governing rights and limitations under the\n * License.\n *\n * The Original Code is Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n *\n * The Initial Developer of the Original Code is\n * Anthony Minessale II <[email protected]>\n * Portions created by the Initial Developer are Copyright (C)\n * the Initial Developer. All Rights Reserved.\n *\n * Contributor(s):\n *\n * Seven Du <[email protected]>\n * Xueyun Jiang <[email protected]>\n *\n * verto-rtc.js - Verto RTC\n *\n */\n\n/**\n * Modify the SDP to increase video bitrate\n * @return the SDP modified\n */\n\nvar sdpBitrateHack = function sdpBitrateHack(sdp, max, min, start) {\n var endOfLine = '\\r\\n';\n var lines = sdp.split(endOfLine);\n lines.forEach(function (line, i) {\n if (/^a=fmtp:\\d*/.test(line)) {\n lines[i] += \";x-google-max-bitrate=\".concat(max, \";x-google-min-bitrate=\").concat(min, \";x-google-start-bitrate=\").concat(start);\n } else if (/^a=mid:(1|video)/.test(line)) {\n lines[i] += \"\\r\\nb=AS:\".concat(max);\n }\n });\n return lines.join(endOfLine);\n}; // Find the line in sdpLines that starts with |prefix|, and, if specified,\n// contains |substr| (case-insensitive search).\n\n\nfunction findLine(sdpLines, prefix, substr) {\n return findLineInRange(sdpLines, 0, -1, prefix, substr);\n} // Find the line in sdpLines[startLine...endLine - 1] that starts with |prefix|\n// and, if specified, contains |substr| (case-insensitive search).\n\n\nfunction findLineInRange(sdpLines, startLine, endLine, prefix, substr) {\n var realEndLine = endLine !== -1 ? endLine : sdpLines.length;\n\n for (var i = startLine; i < realEndLine; ++i) {\n if (sdpLines[i].indexOf(prefix) === 0) {\n if (!substr || sdpLines[i].toLowerCase().indexOf(substr.toLowerCase()) !== -1) {\n return i;\n }\n }\n }\n\n return null;\n} // Gets the codec payload type from an a=rtpmap:X line.\n\n\nfunction getCodecPayloadType(sdpLine) {\n var pattern = new RegExp('a=rtpmap:(\\\\d+) \\\\w+\\\\/\\\\d+');\n var result = sdpLine.match(pattern);\n return result && result.length === 2 ? result[1] : null;\n} // Returns a new m= line with the specified codec as the first one.\n// eslint-disable-next-line\n\n\nfunction setDefaultCodec(mLine, payload) {\n var elements = mLine.split(' ');\n var newLine = [];\n var index = 0;\n\n for (var i = 0; i < elements.length; i++) {\n if (index === 3) {\n // Format of media starts from the fourth.\n newLine[index++] = payload; // Put target payload to the first.\n }\n\n if (elements[i] !== payload) newLine[index++] = elements[i];\n }\n\n return newLine.join(' ');\n}\n\nfunction setCompat() {}\n\nfunction checkCompat() {\n return true;\n}\n\nfunction onStreamError(self, e) {\n console.log('There has been a problem retrieving the streams - did you allow access? Check Device Resolution', e);\n doCallback(self, \"onError\", e);\n}\n\nfunction onStreamSuccess(self, stream) {\n console.log(\"Stream Success\");\n doCallback(self, \"onStream\", stream);\n}\n\nfunction onRemoteStreamSuccess(self, stream) {\n console.log(\"Remote Stream Success\");\n doCallback(self, \"onRemoteStream\", stream);\n}\n\nfunction _onICE(self, candidate) {\n self.mediaData.candidate = candidate;\n self.mediaData.candidateList.push(self.mediaData.candidate);\n doCallback(self, \"onICE\");\n}\n\nfunction doCallback(self, func, arg) {\n if (func in self.options.callbacks) {\n self.options.callbacks[func](self, arg);\n }\n}\n\nfunction _onICEComplete(self) {\n console.log(\"ICE Complete\");\n doCallback(self, \"onICEComplete\");\n}\n\nfunction _onChannelError(self, e) {\n console.logor(\"Channel Error\", e);\n doCallback(self, \"onError\", e);\n}\n\nfunction _onICESDP(self, sdp) {\n self.mediaData.SDP = self.stereoHack(sdp.sdp);\n console.log(\"ICE SDP\");\n doCallback(self, \"onICESDP\");\n} // eslint-disable-next-line\n\n\nfunction onAnswerSDP(self, sdp) {\n self.answer.SDP = self.stereoHack(sdp.sdp);\n console.log(\"ICE ANSWER SDP\");\n doCallback(self, \"onAnswerSDP\", self.answer.SDP);\n} // eslint-disable-next-line\n\n\nfunction onMessage(self, msg) {\n console.log(\"Message\");\n doCallback(self, \"onICESDP\", msg);\n}\n\nfunction FSRTCattachMediaStream(element, stream) {\n if (element && typeof element.srcObject !== 'undefined') {\n element.srcObject = stream;\n } else {\n console.logor('Error attaching stream to element.');\n }\n}\n\nfunction _onRemoteStream(self, stream) {\n if (self.options.useVideo) {\n self.options.useVideo.style.display = 'block'; // Hacks for Mobile Safari\n\n var iOS = ['iPad', 'iPhone', 'iPod'].indexOf(navigator.platform) >= 0;\n\n if (iOS) {\n self.options.useVideo.setAttribute(\"playsinline\", true);\n }\n }\n\n var element = self.options.useAudio;\n console.log(\"REMOTE STREAM\", stream, element);\n FSRTCattachMediaStream(element, stream); // self.options.useAudio.play();\n\n self.remoteStream = stream;\n onRemoteStreamSuccess(self, stream);\n}\n\nfunction _onOfferSDP(self, sdp) {\n self.mediaData.SDP = self.stereoHack(sdp.sdp);\n console.log(\"Offer SDP\");\n doCallback(self, \"onOfferSDP\");\n}\n\nfunction FSRTCPeerConnection(_x) {\n return _FSRTCPeerConnection.apply(this, arguments);\n} // getUserMedia\n\n\nfunction _FSRTCPeerConnection() {\n _FSRTCPeerConnection = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee2(options) {\n var gathering, done, config, default_ice, plan, peer, x, ice_handler, streams, i, createOffer, createAnswer, _createAnswer, setBandwidth, getInteropSDP, serializeSdp, channel, openOffererChannel, _openOffererChannel, setChannelEvents, openAnswererChannel, useless, onSdpSuccess, onSdpError;\n\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n onSdpError = function _onSdpError(e) {\n if (options.onChannelError) {\n options.onChannelError(e);\n }\n\n console.log('sdp error:', e);\n };\n\n onSdpSuccess = function _onSdpSuccess() {};\n\n useless = function _useless() {\n console.log('Error in fake:true');\n };\n\n openAnswererChannel = function _openAnswererChannel() {\n peer.ondatachannel = function (event) {\n channel = event.channel;\n channel.binaryType = 'blob';\n setChannelEvents();\n };\n\n return;\n };\n\n setChannelEvents = function _setChannelEvents() {\n channel.onmessage = function (event) {\n if (options.onChannelMessage) options.onChannelMessage(event);\n };\n\n channel.onopen = function () {\n if (options.onChannelOpened) options.onChannelOpened(channel);\n };\n\n channel.onclose = function (event) {\n if (options.onChannelClosed) options.onChannelClosed(event);\n console.warn('WebRTC DataChannel closed', event);\n };\n\n channel.onerror = function (event) {\n if (options.onChannelError) options.onChannelError(event);\n console.logor('WebRTC DataChannel error', event);\n };\n };\n\n _openOffererChannel = function _openOffererChannel3() {\n channel = peer.createDataChannel(options.channel || 'RTCDataChannel', {\n reliable: false\n });\n setChannelEvents();\n };\n\n openOffererChannel = function _openOffererChannel2() {\n if (!options.onChannelMessage) return;\n\n _openOffererChannel();\n\n return;\n };\n\n serializeSdp = function _serializeSdp(sdp) {\n return sdp;\n };\n\n getInteropSDP = function _getInteropSDP(sdp) {\n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''),\n extractedChars = '';\n\n function getChars() {\n extractedChars += chars[parseInt(Math.random() * 40)] || '';\n if (extractedChars.length < 40) getChars();\n return extractedChars;\n } // usually audio-only streaming failure occurs out of audio-specific crypto line\n // a=crypto:1 AES_CM_128_HMAC_SHA1_32 --------- kAttributeCryptoVoice\n\n\n if (options.onAnswerSDP) sdp = sdp.replace(/(a=crypto:0 AES_CM_128_HMAC_SHA1_32)(.*?)(\\r\\n)/g, ''); // video-specific crypto line i.e. SHA1_80\n // a=crypto:1 AES_CM_128_HMAC_SHA1_80 --------- kAttributeCryptoVideo\n\n var inline = getChars() + '\\r\\n' + (extractedChars = '');\n sdp = sdp.indexOf('a=crypto') === -1 ? sdp.replace(/c=IN/g, 'a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:' + inline + 'c=IN') : sdp;\n return sdp;\n };\n\n setBandwidth = function _setBandwidth(sdp) {\n // remove existing bandwidth lines\n sdp = sdp.replace(/b=AS([^\\r\\n]+\\r\\n)/g, '');\n sdp = sdp.replace(/a=mid:data\\r\\n/g, 'a=mid:data\\r\\nb=AS:1638400\\r\\n');\n return sdp;\n };\n\n _createAnswer = function _createAnswer3() {\n _createAnswer = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.mark(function _callee() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default.a.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(options.type !== \"answer\")) {\n _context.next = 2;\n break;\n }\n\n return _context.abrupt(\"return\");\n\n case 2:\n _context.next = 4;\n return peer.createAnswer(function (sessionDescription) {\n sessionDescription.sdp = serializeSdp(sessionDescription.sdp);\n peer.setLocalDescription(sessionDescription);\n\n if (options.onAnswerSDP) {\n options.onAnswerSDP(sessionDescription);\n }\n }, onSdpError);\n\n case 4:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return _createAnswer.apply(this, arguments);\n };\n\n createAnswer = function _createAnswer2() {\n return _createAnswer.apply(this, arguments);\n };\n\n createOffer = function _createOffer(videoBandwidth) {\n console.log(\"createOffer315\"); // if (!options.onOfferSDP) return;\n\n console.log(\"createOffer317\"); // peer.createOffer(function (sessionDescription) {\n // \t// if (videoBandwidth) { // must be an object\n // \t// \tlet max = videoBandwidth.max;\n // \t// \tlet min = videoBandwidth.min;\n // \t// \tlet start = videoBandwidth.start;\n // \t// \tsessionDescription.sdp = serializeSdp(sdpBitrateHack(sessionDescription.sdp, max, min, start));\n // \t// } else {\n // \t\t// sessionDescription.sdp = serializeSdp(sessionDescription.sdp);\n // \t// }\n // \tconsole.log(\"createOffer328\");\n // \tpeer.setLocalDescription(sessionDescription);\n // \toptions.onOfferSDP(sessionDescription);\n // }, onSdpError);\n\n peer.createOffer().then(function (sessionDescription) {\n console.log(\"createOffer335\");\n var aaa = peer.setLocalDescription(sessionDescription);\n options.onOfferSDP(sessionDescription);\n return aaa;\n }).catch(function (e) {\n console.log(\"onSdpError\");\n onSdpError(e);\n });\n };\n\n ice_handler = function _ice_handler() {\n done = true;\n gathering = null;\n\n if (options.onICEComplete) {\n options.onICEComplete();\n }\n\n if (options.type === \"offer\") {\n options.onICESDP(peer.localDescription);\n } else {\n if (!x && options.onICESDP) {\n options.onICESDP(peer.localDescription);\n }\n }\n };\n\n gathering = false, done = false;\n config = {};\n default_ice = [{\n urls: ['stun:stun.l.google.com:19302']\n }];\n console.log(\"FSRTCPeerConnection\");\n\n if (options.turnServer) {\n default_ice.push(options.turnServer);\n }\n\n if (options.iceServers) {\n if (typeof options.iceServers === \"boolean\") {\n config.iceServers = default_ice;\n } else {\n config.iceServers = options.iceServers;\n }\n }\n\n config.bundlePolicy = \"max-compat\";\n plan = [\"unified-plan\", \"plan-b\"];\n config.sdpSemantics = plan[0]; //\"unified-plan\"//\"plan-b\";\n\n peer = new window.RTCPeerConnection(config);\n console.log(\"FSRTCPeerConnection2\"); // openOffererChannel();\n\n x = 0;\n\n peer.onicecandidate = function (event) {\n if (done) {\n return;\n }\n\n console.log(\"onicecandidate\");\n\n if (!gathering) {\n gathering = setTimeout(ice_handler, 1000);\n }\n\n if (event) {\n if (event.candidate) {\n options.onICE(event.candidate);\n }\n } else {\n done = true;\n\n if (gathering) {\n clearTimeout(gathering);\n gathering = null;\n }\n\n ice_handler();\n }\n }; //webrtc answer should first call setRemoteDescription\n\n\n if (!(options.type == \"answer\")) {\n _context2.next = 30;\n break;\n }\n\n _context2.next = 30;\n return peer.setRemoteDescription(new window.RTCSessionDescription(options.offerSDP), function () {\n console.log(\"answer remote sdp set ok!\");\n onSdpSuccess();\n }, onSdpError);\n\n case 30:\n // attachStream = MediaStream;\n if (options.attachStream) {\n // FreeSWITCH currently orders its answer SDP such that audio m-lines\n // always come first, adding the tracks to the peer in that order\n // prevents possible m-line ordering validation errors on the client.\n console.log(\"add track\");\n options.attachStream.getAudioTracks().forEach(function (track) {\n console.log(\"add audio track\");\n peer.addTrack(track, options.attachStream);\n });\n options.attachStream.getVideoTracks().forEach(function (track) {\n console.log(\"add video track\");\n peer.addTrack(track, options.attachStream);\n });\n } // attachStreams[0] = audio-stream;\n // attachStreams[1] = video-stream;\n // attachStreams[2] = screen-capturing-stream;\n\n\n if (options.attachStreams && options.attachStreams.length) {\n streams = options.attachStreams;\n\n for (i = 0; i < streams.length; i++) {\n peer.addStream(streams[i]);\n }\n }\n\n peer.onaddstream = function (event) {\n var remoteMediaStream = event.stream; // onRemoteStreamEnded(MediaStream)\n\n remoteMediaStream.oninactive = function () {\n if (options.onRemoteStreamEnded) options.onRemoteStreamEnded(remoteMediaStream);\n }; // onRemoteStream(MediaStream)\n\n\n if (options.onRemoteStream) options.onRemoteStream(remoteMediaStream); //console.debug('on:add:stream', remoteMediaStream);\n }; //var constraints = options.constraints || {\n //offerToReceiveAudio: true,\n //offerToReceiveVideo: true\n //};\n // onOfferSDP(RTCSessionDescription)\n\n\n console.log(\"createOffer1\");\n\n if (!(options.onChannelMessage || !options.onChannelMessage)) {\n _context2.next = 39;\n break;\n }\n\n console.log(\"createOffer351\");\n createOffer(options.videoBandwidth);\n _context2.next = 39;\n return createAnswer(options.videoBandwidth);\n\n case 39:\n return _context2.abrupt(\"return\", {\n addAnswerSDP: function addAnswerSDP(sdp, cbSuccess, cbError) {\n peer.setRemoteDescription(new window.RTCSessionDescription(sdp), cbSuccess ? cbSuccess : onSdpSuccess, cbError ? cbError : onSdpError);\n },\n addICE: function addICE(candidate) {\n peer.addIceCandidate(new window.RTCIceCandidate({\n sdpMLineIndex: candidate.sdpMLineIndex,\n candidate: candidate.candidate\n }));\n },\n peer: peer,\n channel: channel,\n sendData: function sendData(message) {\n if (channel) {\n channel.send(message);\n }\n },\n stop: function stop() {\n peer.close();\n\n if (options.attachStream) {\n if (typeof options.attachStream.stop == 'function') {\n options.attachStream.stop();\n }\n }\n }\n });\n\n case 40:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }));\n return _FSRTCPeerConnection.apply(this, arguments);\n}\n\nvar video_constraints = {//mandatory: {},\n //optional: []\n};\n\nfunction activateLocalVideo(el, stream) {\n el.srcObject = stream;\n el.style.display = 'block';\n}\n\nfunction deactivateLocalVideo(el) {\n el.srcObject = null;\n el.style.display = 'none';\n}\n\nfunction assureConstraintByLabel(constraint, fallbackLabel) {\n if (fallbackLabel === undefined && constraint === undefined) {\n return Promise.resolve(constraint);\n }\n\n if (typeof _media_device_id__WEBPACK_IMPORTED_MODULE_5__[\"assureMediaInputId\"] !== 'function') {\n console.warn('Tried to use constraint fallbacks but did not found vendor function `assureMediaInputId` on window scope. Did you forget to import `vendor/media-device-id.js` before Verto?');\n return Promise.resolve(constraint);\n }\n\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default()(constraint) === 'object' && !constraint.deviceId) {\n return Promise.resolve(constraint);\n }\n\n if (constraint.deviceId) {\n if (typeof constraint.deviceId === 'string') {\n return new Promise(function (resolve) {\n Object(_media_device_id__WEBPACK_IMPORTED_MODULE_5__[\"assureMediaInputId\"])(fallbackLabel, constraint.deviceId).then(function (id) {\n resolve(Object.assign({}, constraint, {\n deviceId: id\n }));\n }).catch(function () {\n resolve(constraint);\n });\n });\n }\n\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default()(constraint.deviceId) === 'object' && typeof constraint.deviceId.exact === 'string') {\n return new Promise(function (resolve) {\n Object(_media_device_id__WEBPACK_IMPORTED_MODULE_5__[\"assureMediaInputId\"])(fallbackLabel, constraint.deviceId.exact).then(function (id) {\n resolve(assignMediaIdToConstraint(id, constraint));\n }).catch(function () {\n resolve(constraint);\n });\n });\n }\n }\n\n return Promise.resolve(constraint);\n}\n\nfunction trustyGetUserMedia(options, constraints) {\n if (options.screen && navigator.mediaDevices.getDisplayMedia) {\n constraints.video = true;\n navigator.mediaDevices.getDisplayMedia(constraints).then(function (stream) {\n if (options.onsuccess) {\n options.onsuccess(stream);\n }\n }).catch(options.onerror || function (e) {\n console.logor(e);\n });\n return;\n }\n\n navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {\n if (options.localVideo) {\n activateLocalVideo(options.localVideo, stream);\n }\n\n if (options.onsuccess) {\n options.onsuccess(stream);\n }\n }).catch(options.onerror || function (e) {\n console.logor(e);\n });\n}\n\nfunction assignMediaIdToConstraint(mediaId, rest) {\n return Object.assign({}, rest || {}, {\n deviceId: {\n exact: mediaId\n }\n });\n}\n\nfunction getUserMedia(options) {\n var constraints = options.constraints || {\n audio: true,\n video: video_constraints\n };\n Promise.all([assureConstraintByLabel(constraints.audio, options.useMicLabel), assureConstraintByLabel(constraints.video, options.useCameraLabel)]).then(function (assurances) {\n trustyGetUserMedia(options, {\n audio: assurances[0],\n video: assurances[1]\n });\n }).catch(function (error) {\n console.logor('Unexpected error on media id assurance attempts:', error, 'Options:', options);\n });\n}\n\nvar resList = [[160, 120], [320, 180], [320, 240], [640, 360], [640, 480], [1280, 720], [1920, 1080]];\nvar resI = 0;\nvar ttl = 0;\n\nvar VertoRTC = /*#__PURE__*/function () {\n function VertoRTC(options) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, VertoRTC);\n\n this.validRes = [];\n this.options = Object.assign({\n useVideo: null,\n useStereo: false,\n userData: null,\n localVideo: null,\n screenShare: false,\n useCamera: \"any\",\n iceServers: false,\n videoParams: {},\n audioParams: {},\n callbacks: {\n onICEComplete: function onICEComplete() {},\n onICE: function onICE() {},\n onOfferSDP: function onOfferSDP() {}\n },\n userStream: null\n }, options);\n this.audioEnabled = true;\n this.videoEnabled = true;\n this.mediaData = {\n SDP: null,\n profile: {},\n candidateList: []\n };\n this.constraints = {\n offerToReceiveAudio: this.options.useSpeak === \"none\" ? false : true,\n offerToReceiveVideo: this.options.useVideo ? true : false\n };\n\n if (this.options.useVideo) {\n this.options.useVideo.style.display = 'none';\n }\n\n setCompat();\n checkCompat();\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(VertoRTC, [{\n key: \"useVideo\",\n value: function useVideo(obj, local) {\n if (obj) {\n this.options.useVideo = obj;\n this.options.localVideo = local;\n this.constraints.offerToReceiveVideo = true;\n } else {\n this.options.useVideo = null;\n this.options.localVideo = null;\n this.constraints.offerToReceiveVideo = false;\n }\n\n if (this.options.useVideo) {\n this.options.useVideo.style.display = 'none';\n }\n }\n }, {\n key: \"useStereo\",\n value: function useStereo(on) {\n var self = this;\n self.options.useStereo = on;\n } // Sets Opus in stereo if stereo is enabled, by adding the stereo=1 fmtp param.\n\n }, {\n key: \"stereoHack\",\n value: function stereoHack(sdp) {\n var self = this;\n\n if (!self.options.useStereo) {\n return sdp;\n }\n\n var sdpLines = sdp.split('\\r\\n'); // Find opus payload.\n\n var opusIndex = findLine(sdpLines, 'a=rtpmap', 'opus/48000'),\n opusPayload;\n\n if (!opusIndex) {\n return sdp;\n } else {\n opusPayload = getCodecPayloadType(sdpLines[opusIndex]);\n } // Find the payload in fmtp line.\n\n\n var fmtpLineIndex = findLine(sdpLines, 'a=fmtp:' + opusPayload.toString());\n\n if (fmtpLineIndex === null) {\n // create an fmtp line\n sdpLines[opusIndex] = sdpLines[opusIndex] + '\\r\\na=fmtp:' + opusPayload.toString() + \" stereo=1; sprop-stereo=1\";\n } else {\n // Append stereo=1 to fmtp line.\n sdpLines[fmtpLineIndex] = sdpLines[fmtpLineIndex].concat('; stereo=1; sprop-stereo=1');\n }\n\n sdp = sdpLines.join('\\r\\n');\n return sdp;\n }\n }, {\n key: \"answer\",\n value: function answer(sdp, onSuccess, onError) {\n this.peer.addAnswerSDP({\n type: \"answer\",\n sdp: sdp\n }, onSuccess, onError);\n }\n }, {\n key: \"stopPeer\",\n value: function stopPeer() {// if (self.peer) {\n // \tconsole.log(\"stopping peer\");\n // \tself.peer.stop();\n // }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var self = this;\n\n if (self.options.useVideo) {\n self.options.useVideo.style.display = 'none';\n self.options.useVideo['src'] = '';\n }\n\n if (self.localStream && !self.options.userStream) {\n if (typeof self.localStream.stop == 'function') {\n self.localStream.stop();\n } else {\n if (self.localStream.active) {\n var tracks = self.localStream.getTracks();\n console.log(tracks);\n tracks.forEach(function (track) {\n console.log(\"stopping track\", track);\n track.stop();\n });\n }\n }\n\n self.localStream = null;\n }\n\n if (self.options.localVideo) {\n deactivateLocalVideo(self.options.localVideo);\n }\n\n if (self.options.localVideoStream && !self.options.useStream) {\n if (typeof self.options.localVideoStream.stop == 'function') {\n self.options.localVideoStream.stop();\n } else {\n if (self.options.localVideoStream.active) {\n var _tracks = self.options.localVideoStream.getTracks();\n\n console.log(_tracks);\n\n _tracks.forEach(function (track) {\n console.log(track);\n track.stop();\n });\n }\n }\n }\n\n if (self.peer) {\n console.log(\"stopping peer\");\n self.peer.stop();\n }\n }\n }, {\n key: \"getMute\",\n value: function getMute() {\n var self = this;\n return self.audioEnabled;\n }\n }, {\n key: \"setMute\",\n value: function setMute(what) {\n var self = this;\n if (!self.localStream) return false;\n var audioTracks = self.localStream.getAudioTracks();\n\n for (var i = 0, len = audioTracks.length; i < len; i++) {\n switch (what) {\n case \"on\":\n audioTracks[i].enabled = true;\n break;\n\n case \"off\":\n audioTracks[i].enabled = false;\n break;\n\n case \"toggle\":\n audioTracks[i].enabled = !audioTracks[i].enabled;\n break;\n\n default:\n break;\n }\n\n self.audioEnabled = audioTracks[i].enabled;\n }\n\n return !self.audioEnabled;\n }\n }, {\n key: \"getVideoMute\",\n value: function getVideoMute() {\n var self = this;\n return self.videoEnabled;\n }\n }, {\n key: \"setVideoMute\",\n value: function setVideoMute(what) {\n var self = this;\n if (!self.localStream) return false;\n var videoTracks = self.localStream.getVideoTracks();\n\n for (var i = 0, len = videoTracks.length; i < len; i++) {\n switch (what) {\n case \"on\":\n videoTracks[i].enabled = true;\n break;\n\n case \"off\":\n videoTracks[i].enabled = false;\n break;\n\n case \"toggle\":\n videoTracks[i].enabled = !videoTracks[i].enabled;\n break;\n\n default:\n break;\n }\n\n self.videoEnabled = videoTracks[i].enabled;\n }\n\n return !self.videoEnabled;\n }\n }, {\n key: \"getMediaParams\",\n value: function getMediaParams() {\n var audio;\n var self = this;\n\n if (this.options.useMic && this.options.useMic === \"none\") {\n console.log(\"Microphone Disabled\");\n audio = false;\n } else if (this.options.videoParams && this.options.screenShare) {\n //this.options.videoParams.chromeMediaSource == 'desktop') {\n console.logfo(\"SCREEN SHARE\", this.options.videoParams);\n audio = false;\n } else {\n audio = {};\n\n if (this.options.audioParams) {\n audio = this.options.audioParams;\n }\n\n if (this.options.useMic !== \"any\") {\n audio.deviceId = assignMediaIdToConstraint(this.options.useMic);\n }\n }\n\n if (this.options.useVideo && this.options.localVideo) {\n getUserMedia({\n constraints: null,\n //todo use proper constraints\n localVideo: this.options.localVideo,\n useCameraLabel: this.options.useCameraLabel,\n useMicLabel: this.options.useMicLabel,\n onsuccess: function onsuccess(e) {\n self.options.localVideoStream = e;\n console.log(\"local video ready\");\n },\n onerror: function onerror(e) {\n console.logor(\"local video error!\", e);\n }\n });\n }\n\n var video = {};\n var bestFrameRate = this.options.videoParams.vertoBestFrameRate;\n var minFrameRate = this.options.videoParams.minFrameRate || 15;\n delete this.options.videoParams.vertoBestFrameRate;\n\n if (this.options.screenShare) {\n if (!this.options.useCamera && !!navigator.mozGetUserMedia) {\n //This is an issue, only FireFox needs to ask this additional question if its screen or window we need a better way\n var dowin = window.confirm(\"Do you want to share an application window? If not you can share an entire screen.\");\n video = {\n width: {\n min: this.options.videoParams.minWidth,\n max: this.options.videoParams.maxWidth\n },\n height: {\n min: this.options.videoParams.minHeight,\n max: this.options.videoParams.maxHeight\n },\n mediaSource: dowin ? \"window\" : \"screen\"\n };\n } else {\n var opt = [];\n\n if (this.options.useCamera) {\n opt.push({\n sourceId: this.options.useCamera\n });\n }\n\n if (bestFrameRate) {\n opt.push({\n minFrameRate: bestFrameRate\n });\n opt.push({\n maxFrameRate: bestFrameRate\n });\n }\n\n video = {\n mandatory: this.options.videoParams,\n optional: opt\n };\n }\n } else {\n video = {\n //mandatory: this.options.videoParams,\n width: {\n min: this.options.videoParams.minWidth,\n max: this.options.videoParams.maxWidth\n },\n height: {\n min: this.options.videoParams.minHeight,\n max: this.options.videoParams.maxHeight\n }\n };\n var useVideo = this.options.useVideo;\n\n if (useVideo && this.options.useCamera && this.options.useCamera !== \"none\") {\n //if (!video.optional) {\n //video.optional = [];\n //}\n if (this.options.useCamera !== \"any\") {\n //video.optional.push({sourceId: obj.options.useCamera});\n video = assignMediaIdToConstraint(this.options.useCamera, video);\n }\n\n if (bestFrameRate) {\n //video.optional.push({minFrameRate: bestFrameRate});\n //video.optional.push({maxFrameRate: bestFrameRate});\n video.frameRate = {\n ideal: bestFrameRate,\n min: minFrameRate,\n max: 30\n };\n }\n } else {\n console.log(\"Camera Disabled\");\n video = false;\n useVideo = false;\n }\n }\n\n return {\n audio: audio,\n video: video,\n useVideo: useVideo\n };\n }\n }, {\n key: \"createAnswer\",\n value: function createAnswer(params) {\n var self = this;\n self.type = \"answer\";\n self.remoteSDP = params.sdp;\n console.debug(\"inbound sdp: \", params.sdp);\n\n function onSuccess(stream) {\n self.localStream = stream;\n FSRTCPeerConnection({\n type: self.type,\n attachStream: self.localStream,\n onICE: function onICE(candidate) {\n return _onICE(self, candidate);\n },\n onICEComplete: function onICEComplete() {\n return _onICEComplete(self);\n },\n onRemoteStream: function onRemoteStream(stream) {\n return _onRemoteStream(self, stream);\n },\n onICESDP: function onICESDP(sdp) {\n return _onICESDP(self, sdp);\n },\n onChannelError: function onChannelError(e) {\n return _onChannelError(self, e);\n },\n constraints: self.constraints,\n iceServers: self.options.iceServers,\n offerSDP: {\n type: \"offer\",\n sdp: self.remoteSDP\n },\n turnServer: self.options.turnServer\n }).then(function (peer) {\n self.peer = peer;\n });\n onStreamSuccess(self, stream);\n }\n\n function onError(e) {\n onStreamError(self, e);\n } //the params passed in is null will cause problem \n //this.options.useCamera = params.useCamera;\n\n\n var mediaParams = this.getMediaParams();\n console.log(\"Audio constraints\", mediaParams.audio);\n console.log(\"Video constraints\", mediaParams.video);\n\n if (self.options.useVideo && self.options.localVideo && !self.options.useStream) {\n getUserMedia({\n constraints: {\n audio: false,\n video: {\n deviceId: params.useCamera\n }\n },\n localVideo: self.options.localVideo,\n useCameraLabel: self.options.useCameraLabel,\n useMicLabel: self.options.useMicLabel,\n onsuccess: function onsuccess(e) {\n self.options.localVideoStream = e;\n console.log(\"local video ready\");\n },\n onerror: function onerror(e) {\n console.logor(\"local video error!\", e);\n }\n });\n }\n\n if (self.options.useStream) {\n if (self.options.useVideo) {\n self.options.localVideoStream = self.options.useStream;\n\n if (self.options.localVideo) {\n activateLocalVideo(self.options.localVideo, self.options.useStream);\n }\n }\n\n onSuccess(self.options.useStream);\n } else {\n getUserMedia({\n constraints: {\n audio: mediaParams.audio,\n video: mediaParams.video\n },\n video: mediaParams.useVideo,\n useCameraLabel: self.options.useCameraLabel,\n useMicLabel: self.options.useMicLabel,\n onsuccess: onSuccess,\n onerror: onError\n });\n }\n }\n }, {\n key: \"stopRinger\",\n value: function stopRinger(ringer) {\n if (!ringer) return;\n\n if (typeof ringer.pause == 'function') {\n ringer.pause();\n ringer.currentTime = 0;\n } else if (typeof ringer.stop == 'function') {\n ringer.stop();\n } else {\n if (ringer.active) {\n var tracks = ringer.getTracks();\n tracks.forEach(function (track) {\n track.stop();\n });\n }\n }\n }\n }, {\n key: \"call\",\n value: function call() {\n checkCompat();\n var self = this;\n var screen = false;\n self.type = \"offer\";\n\n if (self.options.videoParams && self.options.screenShare) {\n //self.options.videoParams.chromeMediaSource == 'desktop') {\n screen = true;\n }\n\n function onSuccess(stream) {\n self.localStream = stream;\n\n if (screen) {\n self.constraints.offerToReceiveVideo = false;\n self.constraints.offerToReceiveAudio = false;\n self.constraints.offerToSendAudio = false;\n }\n\n console.log(\"got stream\");\n FSRTCPeerConnection({\n type: self.type,\n attachStream: self.localStream,\n onICE: function onICE(candidate) {\n return _onICE(self, candidate);\n },\n onICEComplete: function onICEComplete() {\n return _onICEComplete(self);\n },\n onRemoteStream: screen ? function () {} : function (stream) {\n return _onRemoteStream(self, stream);\n },\n onOfferSDP: function onOfferSDP(sdp) {\n return _onOfferSDP(self, sdp);\n },\n onICESDP: function onICESDP(sdp) {\n return _onICESDP(self, sdp);\n },\n onChannelError: function onChannelError(e) {\n return _onChannelError(self, e);\n },\n constraints: self.constraints,\n iceServers: self.options.iceServers,\n turnServer: self.options.turnServer,\n videoBandwidth: self.options.videoBandwidth\n }).then(function (p) {\n return self.peer = p;\n });\n onStreamSuccess(self, stream);\n }\n\n function onError(e) {\n onStreamError(self, e);\n }\n\n var mediaParams = this.getMediaParams();\n console.log(\"Audio constraints\", mediaParams.audio);\n console.log(\"Video constraints\", mediaParams.video);\n\n if (self.options.useStream) {\n if (self.options.useVideo) {\n self.options.localVideoStream = self.options.useStream;\n\n if (self.options.localVideo) {\n activateLocalVideo(self.options.localVideo, self.options.useStream);\n }\n }\n\n onSuccess(self.options.useStream);\n } else if (mediaParams.audio || mediaParams.video) {\n getUserMedia({\n constraints: {\n audio: mediaParams.audio,\n video: mediaParams.video\n },\n video: mediaParams.useVideo,\n onsuccess: onSuccess,\n onerror: onError,\n useCameraLabel: self.options.useCameraLabel,\n useMicLabel: self.options.useMicLabel,\n screen: screen\n });\n } else {\n onSuccess(null);\n }\n }\n }, {\n key: \"checkPerms\",\n value: function checkPerms(runtime, check_audio, check_video) {\n getUserMedia({\n constraints: {\n audio: check_audio,\n video: check_video\n },\n onsuccess: function onsuccess(e) {\n e.getTracks().forEach(function (track) {\n track.stop();\n });\n console.logfo(\"media perm init complete\");\n\n if (runtime) {\n setTimeout(runtime, 100, true);\n }\n },\n onerror: function onerror() {\n if (check_video && check_audio) {\n console.logor(\"error, retesting with audio params only\");\n return VertoRTC.checkPerms(runtime, check_audio, false);\n }\n\n console.logor(\"media perm init error\");\n\n if (runtime) {\n runtime(false);\n }\n }\n });\n }\n }], [{\n key: \"resSupported\",\n value: function resSupported(w, h) {\n for (var i in VertoRTC.validRes) {\n if (VertoRTC.validRes[i][0] === w && VertoRTC.validRes[i][1] === h) {\n return true;\n }\n }\n\n return false;\n }\n }, {\n key: \"bestResSupported\",\n value: function bestResSupported() {\n var w = 0,\n h = 0;\n\n for (var i in VertoRTC.validRes) {\n if (VertoRTC.validRes[i][0] >= w && VertoRTC.validRes[i][1] >= h) {\n w = VertoRTC.validRes[i][0];\n h = VertoRTC.validRes[i][1];\n }\n }\n\n return [w, h];\n }\n }, {\n key: \"getValidRes\",\n value: function getValidRes(cam, func) {\n // var used = [];\n var cached = localStorage.getItem(\"res_\" + cam);\n\n if (cached) {\n var cache = JSON.parse(cached);\n\n if (cache) {\n VertoRTC.validRes = cache.validRes;\n console.log(\"CACHED RES FOR CAM \" + cam, cache);\n } else {\n console.logor(\"INVALID CACHE\");\n }\n\n return func ? func(cache) : null;\n }\n\n VertoRTC.validRes = [];\n resI = 0;\n VertoRTC.checkRes(cam, func);\n }\n }, {\n key: \"toggleLocalVideo\",\n value: function toggleLocalVideo(tag, params, onError) {\n var videoTag = document.getElementById(tag);\n\n if (params === 'off' || videoTag.style.display === 'block') {\n if (videoTag.srcObject) {\n var stream = videoTag.srcObject;\n\n if (typeof stream.stop == 'function') {\n stream.stop();\n } else {\n if (stream.active) {\n var tracks = stream.getTracks();\n console.log('tracks', tracks);\n tracks.forEach(function (track) {\n console.log(track);\n track.stop();\n });\n }\n }\n }\n\n deactivateLocalVideo(videoTag);\n return;\n }\n\n if (params.videoDevice && params.videoDevice !== \"any\") {\n params = assignMediaIdToConstraint(params.videoDevice, params);\n } // \tdelete params.videoDevice;\n\n\n getUserMedia({\n constraints: {\n audio: false,\n video: params\n },\n useCameraLabel: params.useCameraLabel,\n onsuccess: function onsuccess(stream) {\n // self.options.localVideoStream = e;\n console.log(\"local video ready\");\n activateLocalVideo(videoTag, stream);\n },\n onerror: function onerror(e) {\n console.logor(\"local video error!\", e);\n\n if (typeof onError === \"function\") {\n onError(e);\n }\n }\n });\n }\n }, {\n key: \"checkRes\",\n value: function checkRes(cam, func) {\n if (resI >= resList.length) {\n var res = {\n 'validRes': VertoRTC.validRes,\n 'bestResSupported': VertoRTC.bestResSupported()\n };\n localStorage.setItem(\"res_\" + cam, JSON.stringify(res));\n if (func) return func(res);\n return;\n }\n\n var w = resList[resI][0];\n var h = resList[resI][1];\n resI++;\n var video = {\n width: {\n exact: w\n },\n height: {\n exact: h\n }\n };\n getUserMedia({\n constraints: {\n audio: ttl++ === 0,\n video: video\n },\n onsuccess: function onsuccess(e) {\n e.getTracks().forEach(function (track) {\n track.stop();\n });\n console.logfo(w + \"x\" + h + \" supported.\");\n VertoRTC.validRes.push([w, h]);\n VertoRTC.checkRes(cam, func);\n },\n onerror: function onerror() {\n console.warn(w + \"x\" + h + \" not supported.\");\n VertoRTC.checkRes(cam, func);\n }\n });\n }\n }]);\n\n return VertoRTC;\n}(); // window.VertoRTC = VertoRTC;\n\n/* For Emacs:\n * Local Variables:\n * mode:c\n * indent-tabs-mode:t\n * tab-width:4\n * c-basic-offset:4\n * End:\n * For VIM:\n * vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:\n */\n\n\n\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-rtc.js?");
/***/ }),
/***/ "../../verto-utils.js":
/*!******************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-utils.js ***!
\******************************************************************************/
/*! exports provided: generateGUID, drop_bad, mark_ready, ENUM */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"generateGUID\", function() { return generateGUID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"drop_bad\", function() { return drop_bad; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mark_ready\", function() { return mark_ready; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ENUM\", function() { return ENUM; });\n/*\n * Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n * Copyright (C) 2005-2017, Anthony Minessale II <[email protected]>\n *\n * Version: MPL 1.1\n *\n * The contents of this file are subject to the Mozilla Public License Version\n * 1.1 (the \"License\"); you may not use this file except in compliance with\n * the License. You may obtain a copy of the License at\n * http://www.mozilla.org/MPL/\n *\n * Software distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n * for the specific language governing rights and limitations under the\n * License.\n *\n * The Original Code is Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n *\n * The Initial Developer of the Original Code is\n * Anthony Minessale II <[email protected]>\n * Portions created by the Initial Developer are Copyright (C)\n * the Initial Developer. All Rights Reserved.\n *\n * Contributor(s):\n *\n * Seven Du <[email protected]>\n * Xueyun Jiang <[email protected]>\n * Stefan Yohansson <[email protected]>\n *\n * verto-utils.js - General purpose functions\n *\n */\nfunction prngGUID() {\n // If we have a cryptographically secure PRNG, use that\n // http://stackoverflow.com/questions/6906916/collisions-when-generating-uuids-in-javascript\n var buf = new Uint16Array(8);\n window.crypto.getRandomValues(buf);\n\n var S4 = function S4(num) {\n var ret = num.toString(16);\n\n while (ret.length < 4) {\n ret = \"0\" + ret;\n }\n\n return ret;\n };\n\n return S4(buf[0]) + S4(buf[1]) + \"-\" + S4(buf[2]) + \"-\" + S4(buf[3]) + \"-\" + S4(buf[4]) + \"-\" + S4(buf[5]) + S4(buf[6]) + S4(buf[7]);\n}\n\nfunction randomGUID() {\n // Otherwise, just use Math.random\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0,\n v = c === 'x' ? r : r & 0x3 | 0x8;\n return v.toString(16);\n });\n}\n\nfunction generateGUID() {\n return typeof window.crypto !== 'undefined' && typeof window.crypto.getRandomValues !== 'undefined' ? prngGUID : randomGUID;\n}\nfunction drop_bad(verto, channel) {\n console.error(\"drop unauthorized channel: \" + channel);\n delete verto.eventSUBS[channel];\n}\nfunction mark_ready(verto, channel) {\n for (var j in verto.eventSUBS[channel]) {\n verto.eventSUBS[channel][j].ready = true;\n console.log(\"subscribed to channel: \" + channel);\n\n if (verto.eventSUBS[channel][j].readyHandler) {\n verto.eventSUBS[channel][j].readyHandler(verto, channel);\n }\n }\n}\nfunction ENUM(s) {\n var i = 0,\n o = {};\n s.split(\" \").map(function (x) {\n o[x] = {\n name: x,\n val: i++\n };\n return o;\n });\n return Object.freeze(o);\n}\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto-utils.js?");
/***/ }),
/***/ "../../verto.js":
/*!************************************************************************!*\
!*** /Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto.js ***!
\************************************************************************/
/*! exports provided: default, Verto, VertoConfMan, VertoCallcenter, verto */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Verto\", function() { return Verto; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"verto\", function() { return verto; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"../../node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"../../node_modules/@babel/runtime/helpers/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"../../node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"../../node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! regenerator-runtime/runtime */ \"../../node_modules/regenerator-runtime/runtime.js\");\n/* harmony import */ var regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _verto_confman__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./verto-confman */ \"../../verto-confman.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VertoConfMan\", function() { return _verto_confman__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _verto_dialog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./verto-dialog */ \"../../verto-dialog.js\");\n/* harmony import */ var _verto_rtc__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./verto-rtc */ \"../../verto-rtc.js\");\n/* harmony import */ var _verto_callcenter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./verto-callcenter */ \"../../verto-callcenter.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VertoCallcenter\", function() { return _verto_callcenter__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _verto_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./verto-utils */ \"../../verto-utils.js\");\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/*\n * Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n * Copyright (C) 2005-2017, Anthony Minessale II <[email protected]>\n *\n * Version: MPL 1.1\n *\n * The contents of this file are subject to the Mozilla Public License Version\n * 1.1 (the \"License\"); you may not use this file except in compliance with\n * the License. You may obtain a copy of the License at\n * http://www.mozilla.org/MPL/\n *\n * Software distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n * for the specific language governing rights and limitations under the\n * License.\n *\n * The Original Code is Verto HTML5/Javascript Telephony Signaling and Control Protocol Stack for FreeSWITCH\n *\n * The Initial Developer of the Original Code is\n * Anthony Minessale II <[email protected]>\n * Portions created by the Initial Developer are Copyright (C)\n * the Initial Developer. All Rights Reserved.\n *\n * Contributor(s):\n *\n * Seven Du <[email protected]>\n * Xueyun Jiang <[email protected]>\n * Stefan Yohansson <[email protected]>\n *\n * verto.js - Main interface\n *\n */\n // import VertoLiveArray from './verto-livearray';\n\n\n\n\n\n\n/**\n * @typedef KeepAlive\n * @property {number} interval\n * @property {number} maxFailed\n */\n\nvar KEEPALIVE_INTERVAL = 10 * 1000;\nvar MAX_FAILED_PING = 2;\n/**\n * \n */\n\nvar Verto = /*#__PURE__*/function () {\n function Verto(params, callbacks) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Verto);\n\n this._ws_socket = null;\n this.q = [];\n this._ws_callbacks = {};\n this._current_id = 0;\n /**\n * @typedef VertoOptions\n * @property {string} login\n * @property {string} socketUrl\n * @property {Object} tag\n * @property {(boolean|KeepAlive)} keepAlive \n * @property {any} videoParams\n * @property {any} userVariables\n * @property {boolean} iceServers\n * @property {?string} sessid\n * @property {any} deviceParams\n * @property {any} useStream\n */\n\n /**\n * @type {VertoOptions}\n */\n\n this.options = {};\n this.SERNO = 1;\n this.dialog = null;\n this.dialogs = {};\n this.params = params;\n this.callbacks = callbacks;\n this.videoDevices = [];\n this.audioInDevices = [];\n this.audioOutDevices = [];\n this.rpcClient = this; // backward compatible\n\n this.eventSUBS = {};\n this.generateGUID = Object(_verto_utils__WEBPACK_IMPORTED_MODULE_9__[\"generateGUID\"])();\n this._heartbeat = null;\n this._failCount = 0;\n this.connect();\n }\n\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Verto, [{\n key: \"connect\",\n value: function connect(params, callbacks) {\n var _this = this;\n\n if (!params) params = this.params;\n if (!callbacks) callbacks = this.callbacks;\n\n if (!params || !params.socketUrl) {\n return;\n }\n\n this.options = Object.assign({\n login: null,\n passwd: null,\n socketUrl: null,\n autoReconnect: true,\n keepAlive: false,\n //or { interval, maxFailed}\n heartBeatCallBack: function heartBeatCallBack() {\n return _this.ping();\n },\n tag: null,\n localTag: null,\n videoParams: {},\n audioParams: {},\n loginParams: {},\n deviceParams: {\n onResCheck: null\n },\n userVariables: {},\n iceServers: false,\n ringSleep: 6000,\n sessid: null,\n useStream: null,\n // la: new VertoLiveArray(),\n onmessage: function onmessage(e) {\n return _this.handleMessage(e.eventData);\n },\n onWSConnect: function onWSConnect(o) {\n console.log(\"connected!!!!\");\n o.call('login', {});\n },\n onWSLogin: function onWSLogin() {},\n onWSClose: function onWSClose() {\n _this.purge();\n }\n }, params, callbacks);\n console.log(\"verto ws connect to :\", this.options.socketUrl);\n console.info(\"options\", this.options);\n console.info(\"verto_params\", params);\n\n if (this.options.deviceParams.useCamera) {\n _verto_rtc__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getValidRes(this.options.deviceParams.useCamera, this.options.deviceParams.onResCheck);\n }\n\n if (!this.options.deviceParams.useMic) {\n this.options.deviceParams.useMic = \"any\";\n }\n\n if (!this.options.deviceParams.useSpeak) {\n this.options.deviceParams.useSpeak = \"any\";\n }\n\n if (this.options.sessid) {\n this.sessid = this.options.sessid;\n } else {\n this.sessid = sessionStorage.getItem(\"verto_session_uuid\") || this.generateGUID();\n sessionStorage.setItem(\"verto_session_uuid\", this.sessid);\n }\n\n this.dialogs = {};\n this.callbacks = callbacks || {};\n this.eventSUBS = {};\n this.connectSocket();\n var tag = this.options.tag;\n\n if (typeof tag === \"function\") {\n tag = tag();\n }\n\n if (this.options.ringFile && this.options.tag) {\n this.ringer = document.getElementById(tag);\n } // this.call('login', {});\n\n }\n }, {\n key: \"connectSocket\",\n value: function connectSocket() {\n var self = this;\n\n if (self.to) {\n clearTimeout(self.to);\n }\n\n if (!self.socketReady()) {\n self.authing = false;\n\n if (self._ws_socket) {\n delete self._ws_socket;\n self._ws_socket = null;\n } // No socket, or dying socket, let's get a new one.\n\n\n self._ws_socket = new WebSocket(self.options.socketUrl);\n\n if (self._ws_socket) {\n // Set up onmessage handler.\n self._ws_socket.onmessage = function (event) {\n self._onMessage(event);\n };\n\n self._ws_socket.onclose = function () {\n if (!self.ws_sleep) {\n self.ws_sleep = 1000;\n }\n\n if (self.options.onWSClose) {\n self.options.onWSClose(self);\n }\n\n if (self._heartbeat) {\n clearInterval(self._heartbeat);\n self._heartbeat = null;\n }\n\n if (!self.options.autoReconnect) return;\n console.error(\"Websocket Lost \" + self.ws_cnt + \" sleep: \" + self.ws_sleep + \"msec\");\n self.to = setTimeout(function () {\n console.log(\"Attempting Reconnection....\");\n self.connectSocket();\n }, self.ws_sleep);\n self.ws_cnt++;\n\n if (self.ws_sleep < 3000 && self.ws_cnt % 10 === 0) {\n self.ws_sleep += 1000;\n }\n }; // Set up sending of message for when the socket is open.\n\n\n self._ws_socket.onopen = function () {\n if (self.to) {\n clearTimeout(self.to);\n }\n\n if (self._heartbeat) {\n clearTimeout(self._heartbeat);\n self._heartbeat = null;\n }\n\n if (self.options.keepAlive) {\n var interval = KEEPALIVE_INTERVAL;\n\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1___default()(self.options.keepAlive) == \"object\") {\n if (typeof self.options.keepAlive.interval == \"number\") {\n interval = self.options.keepAlive.interval;\n }\n }\n\n self._heartbeat = setInterval(function () {\n self._keepAlive();\n }, interval);\n }\n\n self.ws_sleep = 1000;\n self.ws_cnt = 0;\n\n if (self.options.onWSConnect) {\n self.options.onWSConnect(self);\n }\n\n var req;\n\n while (req = self.q.pop()) {\n self._ws_socket.send(req);\n }\n };\n }\n }\n\n return self._ws_socket ? true : false;\n }\n }, {\n key: \"_keepAlive\",\n value: function _keepAlive() {\n var self = this;\n this.options.heartBeatCallBack(self).then(function () {\n self._failCount = 0;\n }).catch(function () {\n self._failCount++;\n var maxFailed = MAX_FAILED_PING;\n\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1___default()(self.options.keepAlive) == \"object\") {\n if (typeof self.options.keepAlive.maxFailed == \"number\") {\n maxFailed = self.options.keepAlive.maxFailed;\n }\n }\n\n if (self._failCount == maxFailed) {\n self._failCount = 0;\n self.closeSocket(1001); // error code CLOSE_GOING_AWAY\n }\n });\n }\n }, {\n key: \"ping\",\n value: function ping() {\n var self = this;\n\n if (!this.socketReady()) {\n return;\n }\n\n return new Promise(function (resolve, reject) {\n self.call(\"Uas.Ping\", null, function () {\n resolve();\n }, function () {\n reject();\n });\n });\n }\n }, {\n key: \"socketReady\",\n value: function socketReady() {\n if (this._ws_socket === null || this._ws_socket.readyState > 1) {\n return false;\n }\n\n return true;\n }\n }, {\n key: \"purge\",\n value: function purge() {\n var verto = this;\n console.log(\"purging dialogs\");\n Object.keys(verto.dialogs).forEach(function (dialog) {\n verto.dialogs[dialog].setState(Verto.enum.state.purge);\n });\n verto.eventSUBS = {};\n }\n }, {\n key: \"call\",\n value: function call(method, params, success_cb, error_cb) {\n // Construct the JSON-RPC 2.0 request.\n if (!params) {\n params = {};\n }\n\n if (this.sessid) {\n params.sessid = this.sessid;\n }\n\n var request = {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: this._current_id++ // Increase the id counter to match request/response\n\n };\n\n if (!success_cb) {\n success_cb = function success_cb(e) {\n console.log(\"Success: \", e);\n };\n }\n\n if (!error_cb) {\n error_cb = function error_cb(e) {\n console.log(\"Error: \", e);\n };\n }\n\n var request_json = JSON.stringify(request);\n\n if (!this._ws_socket || this._ws_socket.readyState < 1) {\n // The websocket is not open yet; we have to set sending of the message in onopen.\n // self = this; // In closure below, this is set to the WebSocket. Use self instead.\n this.q.push(request_json);\n } else {\n // We have a socket and it should be ready to send on.\n // console.log(request_json);\n this._ws_socket.send(request_json);\n } // Setup callbacks. If there is an id, this is a call and not a notify.\n\n\n if ('id' in request && typeof success_cb !== 'undefined') {\n this._ws_callbacks[request.id] = {\n request: request_json,\n request_obj: request,\n success_cb: success_cb,\n error_cb: error_cb\n };\n }\n }\n }, {\n key: \"_onMessage\",\n value: function _onMessage(event) {\n // Check if this could be a JSON RPC message.\n var response;\n var self = this; // Special sub proto\n\n if (event.data[0] === \"#\" && event.data[1] === \"S\" && event.data[2] === \"P\") {\n if (event.data[3] === \"U\") {\n this.up_dur = parseInt(event.data.substring(4));\n } else if (this.speedCB && event.data[3] === \"D\") {\n this.down_dur = parseInt(event.data.substring(4));\n var up_kps = (this.speedBytes * 8 / (this.up_dur / 1000) / 1024).toFixed(0);\n var down_kps = (this.speedBytes * 8 / (this.down_dur / 1000) / 1024).toFixed(0);\n console.info(\"Speed Test: Up: \" + up_kps + \" Down: \" + down_kps);\n var cb = this.speedCB;\n this.speedCB = null;\n cb(event, {\n upDur: this.up_dur,\n downDur: this.down_dur,\n upKPS: up_kps,\n downKPS: down_kps\n });\n }\n\n return;\n }\n\n response = JSON.parse(event.data); /// @todo Make using the jsonrcp 2.0 check optional, to use this on JSON-RPC 1 backends.\n\n if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1___default()(response) === 'object' && 'jsonrpc' in response && response.jsonrpc === '2.0') {\n /// @todo Handle bad response (without id).\n // If this is an object with result, it is a response.\n if ('result' in response && this._ws_callbacks[response.id]) {\n // Get the success lcallback.\n var success_cb = this._ws_callbacks[response.id].success_cb; // set the sessid if present\n // if ('sessid' in response.result && !this.options.sessid || (this.options.sessid != response.result.sessid)) {\n // this.options.sessid = response.result.sessid;\n // if (this.options.sessid) {\n // console.log(\"setting session UUID to: \" + this.options.sessid);\n // }\n // }\n // Delete the callback from the storage.\n\n delete this._ws_callbacks[response.id]; // Run callback with result as parameter.\n\n success_cb(response.result, this);\n return;\n } else if ('error' in response && self._ws_callbacks[response.id]) {\n // If this is an object with error, it is an error response.\n // Get the error callback.\n var error_cb = self._ws_callbacks[response.id].error_cb;\n var orig_req = self._ws_callbacks[response.id].request; // if this is an auth request, send the credentials and resend the failed request\n\n if (!self.authing && response.error.code === -32000 && self.options.login && self.options.passwd) {\n this.last_response = response;\n self.authing = true;\n self.call(\"login\", {\n login: self.options.login,\n passwd: self.options.passwd,\n loginParams: self.options.loginParams,\n userVariables: self.options.userVariables\n }, this._ws_callbacks[response.id].request_obj.method === \"login\" ? function () {\n self.authing = false;\n console.log(\"logged in\");\n delete self._ws_callbacks[response.id];\n self.options.autoReconnect = true;\n\n if (self.options.onWSLogin) {\n self.options.onWSLogin(self, true);\n }\n } : function () {\n self.authing = false;\n console.log(\"logged in, resending request id: \" + response.id);\n var socket = self.options.getSocket(self.wsOnMessage);\n\n if (socket !== null) {\n socket.send(orig_req);\n }\n\n if (self.options.onWSLogin) {\n self.options.onWSLogin(self, true);\n }\n }, function () {\n console.log(\"error logging in, request id:\", response.id);\n delete self._ws_callbacks[response.id];\n error_cb(response.error, this);\n\n if (self.options.onWSLogin) {\n self.last_response = response;\n self.options.onWSLogin(self, false);\n }\n });\n return;\n } else if (self.authing && response.error.code === -32001) {\n self.last_response = response;\n\n if (self.options.onWSLogin) {\n self.options.onWSLogin(self, false);\n }\n } // Delete the callback from the storage.\n\n\n delete self._ws_callbacks[response.id]; // Run callback with the error object as parameter.\n\n error_cb(response.error, self);\n return;\n }\n } // This is not a JSON-RPC response. Call the fallback message handler, if given.\n\n\n if (typeof this.options.onmessage === 'function') {\n event.eventData = response;\n\n if (!event.eventData) {\n event.eventData = {};\n }\n\n var reply = this.options.onmessage(event);\n\n if (reply && _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1___default()(reply) === \"object\" && event.eventData.id) {\n var msg = {\n jsonrpc: \"2.0\",\n id: event.eventData.id,\n result: reply\n };\n\n if (this._ws_socket !== null) {\n this._ws_socket.send(JSON.stringify(msg));\n }\n }\n }\n }\n }, {\n key: \"handleMessage\",\n value: function handleMessage(data) {\n var verto = this;\n\n if (!(data && data.method)) {\n console.error(\"Invalid Data\", data);\n return;\n }\n\n if (data.params.callID) {\n var dialog = verto.dialogs[data.params.callID];\n\n if (data.method === \"verto.attach\" && dialog) {\n delete dialog.verto.dialogs[dialog.callID];\n dialog.rtc.stop();\n dialog = null;\n }\n\n if (dialog) {\n if (data.params.node_uuid) dialog.node_uuid = data.params.node_uuid;\n\n switch (data.method) {\n case 'verto.bye':\n dialog.hangup(data.params);\n break;\n\n case 'verto.answer':\n dialog.handleAnswer(data.params);\n break;\n\n case 'verto.media':\n dialog.handleMedia(data.params);\n break;\n\n case 'verto.display':\n dialog.handleDisplay(data.params);\n break;\n\n case 'verto.info':\n dialog.handleInfo(data.params);\n break;\n\n case 'verto.trying':\n console.log(\"not implied\");\n break;\n\n default:\n console.debug(\"INVALID METHOD OR NON-EXISTANT CALL REFERENCE IGNORED\", dialog, data.method);\n break;\n }\n } else {\n switch (data.method) {\n case 'verto.attach':\n data.params.attach = true;\n\n if (data.params.sdp && data.params.sdp.indexOf(\"m=video\") > 0) {\n data.params.useVideo = true;\n }\n\n if (data.params.sdp && data.params.sdp.indexOf(\"stereo=1\") > 0) {\n data.params.useStereo = true;\n }\n\n dialog = new _verto_dialog__WEBPACK_IMPORTED_MODULE_6__[\"default\"](Verto.enum.direction.inbound, verto, data.params);\n dialog.setState(Verto.enum.state.recovering);\n if (data.params.node_uuid) dialog.node_uuid = data.params.node_uuid;\n break;\n\n case 'verto.invite':\n if (data.params.sdp && data.params.sdp.indexOf(\"m=video\") > 0) {\n data.params.wantVideo = true;\n }\n\n if (data.params.sdp && data.params.sdp.indexOf(\"stereo=1\") > 0) {\n data.params.useStereo = true;\n }\n\n dialog = new _verto_dialog__WEBPACK_IMPORTED_MODULE_6__[\"default\"](Verto.enum.direction.inbound, verto, data.params);\n if (data.params.node_uuid) dialog.node_uuid = data.params.node_uuid;\n break;\n\n default:\n console.debug(\"INVALID METHOD OR NON-EXISTANT CALL REFERENCE IGNORED\");\n break;\n }\n }\n\n return {\n method: data.method\n };\n } else {\n switch (data.method) {\n case 'verto.punt':\n verto.purge();\n verto.logout();\n break;\n\n case 'verto.event':\n var list = null;\n var key = null;\n\n if (data.params) {\n key = data.params.eventChannel;\n }\n\n if (key) {\n list = verto.eventSUBS[key];\n\n if (!list) {\n var keylist = key.split(\".\");\n\n for (var i = keylist.length - 1; i > 0; i--) {\n var newkey = keylist[0];\n\n for (var j = 1; j < i; j++) {\n newkey = newkey + \".\" + keylist[j];\n }\n\n list = verto.eventSUBS[newkey];\n if (list) break;\n }\n }\n }\n\n if (!list && key && key === verto.sessid) {\n if (verto.callbacks.onMessage) {\n verto.callbacks.onMessage(verto, null, Verto.enum.message.pvtEvent, data.params);\n }\n } else if (!list && key && verto.dialogs[key]) {\n verto.dialogs[key].sendMessage(Verto.enum.message.pvtEvent, data.params);\n } else if (!list) {\n if (!key) {\n key = \"UNDEFINED\";\n }\n\n console.error(\"UNSUBBED or invalid EVENT \" + key + \" IGNORED\");\n } else {\n list.forEach(function (sub) {\n if (!sub || !sub.ready) {\n console.error(\"invalid EVENT for \" + key + \" IGNORED\");\n } else if (sub.handler) {\n sub.handler(verto, data.params, sub.userData);\n } else if (verto.callbacks.onEvent) {\n verto.callbacks.onEvent(verto, data.params, sub.userData);\n } else {\n console.log(\"EVENT:\", data.params);\n }\n });\n }\n\n break;\n\n case \"verto.info\":\n if (verto.callbacks.onMessage) {\n verto.callbacks.onMessage(verto, null, Verto.enum.message.info, data.params.msg);\n } //console.error(data);\n // console.debug(\"MESSAGE from: \" + data.params.msg.from, data.params.msg.body);\n\n\n break;\n\n case 'verto.clientReady':\n if (verto.callbacks.onMessage) {\n verto.callbacks.onMessage(verto, null, Verto.enum.message.clientReady, data.params);\n console.debug(\"CLIENT READY\", data.params);\n }\n\n break;\n\n default:\n console.error(\"INVALID METHOD OR NON-EXISTANT CALL REFERENCE IGNORED\", data.method);\n break;\n }\n }\n }\n }, {\n key: \"processReply\",\n value: function processReply(method, success, e) {\n var verto = this; // var i;\n\n console.log(\"Response: \" + method, success, e);\n\n switch (method) {\n case \"verto.subscribe\":\n Object.keys(e.unauthorizedChannels || {}).forEach(function (channel) {\n Object(_verto_utils__WEBPACK_IMPORTED_MODULE_9__[\"drop_bad\"])(verto, e.unauthorizedChannels[channel]);\n });\n Object.keys(e.subscribedChannels || {}).forEach(function (channel) {\n Object(_verto_utils__WEBPACK_IMPORTED_MODULE_9__[\"mark_ready\"])(verto, e.subscribedChannels[channel]);\n });\n break;\n\n case \"verto.unsubscribe\":\n //console.error(e);\n break;\n\n default:\n break;\n }\n }\n }, {\n key: \"sendMethod\",\n value: function sendMethod(method, params, success_cb, error_cb) {\n var self = this;\n this.call(method, params, function (e) {\n /* Success */\n self.processReply(method, true, e);\n console.log(\"sendMethod success\", e);\n if (success_cb) success_cb(e);\n }, function (e) {\n /* Error */\n console.log(\"sendMethod ERR\", e);\n if (error_cb) error_cb(e);\n self.processReply(method, false, e);\n });\n }\n }, {\n key: \"broadcast\",\n value: function broadcast(channel, params) {\n var msg = {\n eventChannel: channel,\n data: _objectSpread({}, params)\n };\n this.sendMethod(\"verto.broadcast\", msg);\n }\n }, {\n key: \"fsAPI\",\n value: function fsAPI(cmd, arg, success_cb, failed_cb) {\n this.sendMethod(\"jsapi\", {\n command: \"fsapi\",\n data: {\n cmd: cmd,\n arg: arg\n }\n }, success_cb, failed_cb);\n }\n }, {\n key: \"fsStatusAPI\",\n value: function fsStatusAPI(success_cb, failed_cb) {\n this.sendMethod(\"jsapi\", {\n command: \"fsapi\",\n data: {\n cmd: \"status\"\n }\n }, success_cb, failed_cb);\n }\n }, {\n key: \"fsStatus\",\n value: function fsStatus(success_cb, failed_cb) {\n this.sendMethod(\"jsapi\", {\n command: \"status\",\n data: {}\n }, success_cb, failed_cb);\n }\n }, {\n key: \"fsSofia\",\n value: function fsSofia(profile, success_cb, failed_cb) {\n this.sendMethod(\"jsapi\", {\n command: \"sofia.status.info\",\n data: {\n profile: profile\n }\n }, success_cb, failed_cb);\n }\n }, {\n key: \"showFSAPI\",\n value: function showFSAPI(what, success_cb, failed_cb) {\n this.sendMethod(\"jsapi\", {\n command: \"fsapi\",\n data: {\n cmd: \"show\",\n arg: what + \" as json\"\n }\n }, success_cb, failed_cb);\n }\n }, {\n key: \"do_subscribe\",\n value: function do_subscribe(verto, channel, subChannels, sparams) {\n var params = sparams || {};\n var local = params.local;\n var obj = {\n eventChannel: channel,\n userData: params.userData,\n handler: params.handler,\n ready: false,\n readyHandler: params.readyHandler,\n serno: verto.SERNO++\n };\n var isnew = false;\n\n if (!verto.eventSUBS[channel]) {\n verto.eventSUBS[channel] = [];\n subChannels.push(channel);\n isnew = true;\n }\n\n verto.eventSUBS[channel].push(obj);\n\n if (local) {\n obj.ready = true;\n obj.local = true;\n }\n\n if (!isnew && verto.eventSUBS[channel][0].ready) {\n obj.ready = true;\n\n if (obj.readyHandler) {\n obj.readyHandler(verto, channel);\n }\n }\n\n return {\n serno: obj.serno,\n eventChannel: channel\n };\n }\n }, {\n key: \"subscribe\",\n value: function subscribe(channel, sparams) {\n var verto = this;\n var r = [];\n var subChannels = [];\n var params = sparams || {};\n\n if (typeof channel === \"string\") {\n r.push(verto.do_subscribe(verto, channel, subChannels, params));\n } else {\n Object.keys(channel || {}).forEach(function () {\n r.push(verto.do_subscribe(verto, channel, subChannels, params));\n });\n }\n\n if (subChannels.length) {\n verto.sendMethod(\"verto.subscribe\", {\n eventChannel: subChannels.length === 1 ? subChannels[0] : subChannels,\n subParams: params.subParams\n });\n }\n\n return r;\n }\n }, {\n key: \"unsubscribe\",\n value: function unsubscribe(handle) {\n var verto = this;\n\n if (!handle) {\n Object.keys(verto.eventSUBS).forEach(function (event) {\n verto.unsubscribe(verto.eventSUBS[event]);\n });\n } else {\n var unsubChannels = {};\n var sendChannels = [];\n\n if (typeof handle == \"string\") {\n delete verto.eventSUBS[handle];\n unsubChannels[handle]++;\n } else {\n Object.keys(handle).forEach(function (channel) {\n var eventChannel = 0; // todo fix eslint\n\n if (typeof eventChannel == \"string\") {\n delete verto.eventSUBS[eventChannel];\n unsubChannels[eventChannel]++;\n } else {\n // const repl = [];\n var _eventChannel = handle[channel].eventChannel;\n\n if (verto.eventSUBS[_eventChannel]) {\n verto.eventSUBS[_eventChannel] = verto.eventSUBS[_eventChannel].reduce(function (acc, ec) {\n if (ec.serno !== handle[channel].serno) {\n acc.push(ec);\n }\n\n return acc;\n }, []);\n\n if (verto.eventSUBS[_eventChannel].length === 0) {\n delete verto.eventSUBS[_eventChannel];\n unsubChannels[_eventChannel]++;\n }\n }\n }\n });\n }\n\n sendChannels = Object.keys(unsubChannels).map(function (i) {\n console.log(\"Sending Unsubscribe for: \", i);\n return i;\n });\n\n if (sendChannels.length) {\n verto.sendMethod(\"verto.unsubscribe\", {\n eventChannel: sendChannels.length === 1 ? sendChannels[0] : sendChannels\n });\n }\n }\n }\n }, {\n key: \"newCall\",\n value: function newCall(args, callbacks) {\n if (!this.socketReady()) {\n console.error(\"Not Connected...\");\n return;\n }\n\n if (args[\"useCamera\"]) {\n this.options.deviceParams[\"useCamera\"] = args[\"useCamera\"];\n this.options.deviceParams[\"useCameraLabel\"] = args[\"useCameraLabel\"];\n }\n\n var dialog = new _verto_dialog__WEBPACK_IMPORTED_MODULE_6__[\"default\"](Verto.enum.direction.outbound, this, args);\n\n if (callbacks) {\n dialog.callbacks = callbacks;\n }\n\n dialog.invite();\n return dialog;\n }\n }, {\n key: \"videoParams\",\n value: function videoParams(obj) {\n console.log('videoParams', obj);\n this.options.videoParams = Object.assign(obj); // this.options.videoParams = {\n // \t...this.options.videoParams,\n // \t...obj\n // };\n } // logout peacefully\n\n }, {\n key: \"logout\",\n value: function logout(msg, success_cb, error_cb) {\n console.log('verto logout', msg);\n var verto = this;\n\n var vertoClose = function vertoClose(success) {\n verto.options.autoReconnect = false;\n verto.closeSocket(1000);\n\n if (verto.callbacks && verto.callbacks.onWSClose) {\n verto.callbacks.onWSClose(verto, success);\n }\n\n verto.purge();\n };\n\n this.call('logout', msg ? msg : {}, function () {\n if (success_cb) success_cb.call();\n vertoClose(true);\n }, function () {\n if (error_cb) error_cb.call();\n vertoClose(false);\n });\n } //give server a reason so it can dispose this session\n\n }, {\n key: \"closeSocket\",\n value: function closeSocket(event) {\n var self = this;\n\n if (self._heartbeat) {\n clearInterval(self._heartbeat);\n self._heartbeat = null;\n }\n\n if (self.socketReady()) {\n self._ws_socket.onclose = function () {\n console.log(\"Closing Socket\");\n };\n\n self._ws_socket.close(event);\n }\n }\n }, {\n key: \"speedTest\",\n value: function speedTest(bytes, cb) {\n var socket = this._ws_socket;\n\n if (socket) {\n this.speedCB = cb;\n this.speedBytes = bytes;\n socket.send(\"#SPU \" + bytes);\n var loops = bytes / 1024;\n var rem = bytes % 1024;\n var i;\n var data = new Array(1024).join(\".\");\n\n for (i = 0; i < loops; i++) {\n socket.send(\"#SPB \" + data);\n }\n\n if (rem) {\n socket.send(\"#SPB \" + data);\n }\n\n socket.send(\"#SPE\");\n }\n }\n }, {\n key: \"deviceParams\",\n value: function deviceParams() {\n var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.options.deviceParams = _objectSpread(_objectSpread({}, this.options.deviceParams), obj);\n\n if (obj.useCamera) {\n _verto_rtc__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getValidRes(this.options.deviceParams.useCamera, obj ? obj.onResCheck : undefined);\n }\n }\n }, {\n key: \"iceServers\",\n value: function iceServers(obj) {\n this.options.iceServers = obj;\n }\n }, {\n key: \"loginData\",\n value: function loginData(params) {\n this.options.login = params.login;\n this.options.passwd = params.passwd;\n this.options.login = params.login;\n this.options.passwd = params.passwd;\n this.options.loginParams = params.loginParams;\n this.options.userVariables = params.userVariables;\n }\n }, {\n key: \"login\",\n value: function login() {\n // this.logout();\n this.call('login', {});\n }\n }, {\n key: \"hangup\",\n value: function hangup(callID) {\n var _this2 = this;\n\n if (callID) {\n var dialog = this.dialogs[callID];\n\n if (dialog) {\n dialog.hangup();\n }\n } else {\n Object.keys(this.dialogs).forEach(function (dialogKey) {\n _this2.dialogs[dialogKey].hangup();\n });\n }\n }\n }, {\n key: \"message\",\n value: function message(msg) {\n var err = 0;\n\n if (!msg.from) {\n msg.from = this.options.login;\n }\n\n if (!msg.to) {\n console.error(\"Missing To\");\n err++;\n }\n\n if (!msg.body) {\n console.error(\"Missing Body\");\n err++;\n }\n\n if (err) {\n return false;\n }\n\n this.sendMethod(\"verto.info\", {\n msg: msg\n });\n return true;\n }\n }], [{\n key: \"init\",\n value: function init(obj, runtime) {\n var self = this;\n\n if (!obj) {\n obj = {};\n }\n\n if (!obj.skipPermCheck && !obj.skipDeviceCheck) {\n _verto_rtc__WEBPACK_IMPORTED_MODULE_7__[\"default\"].checkPerms(function () {\n self.checkDevices(runtime);\n }, true, true);\n } else if (obj.skipPermCheck && !obj.skipDeviceCheck) {\n self.checkDevices(runtime);\n } else if (!obj.skipPermCheck && obj.skipDeviceCheck) {\n _verto_rtc__WEBPACK_IMPORTED_MODULE_7__[\"default\"].checkPerms(function (status) {\n runtime(status);\n }, true, true);\n } else {\n runtime(null);\n }\n }\n }, {\n key: \"checkDevices\",\n value: function checkDevices(runtime) {\n var self = this;\n console.info(\"enumerating devices\");\n var aud_in = [],\n aud_out = [],\n vid = [];\n var has_video = 0,\n has_audio = 0;\n var Xstream;\n\n function gotDevices(deviceInfos) {\n // Handles being called several times to update labels. Preserve values.\n for (var i = 0; i !== deviceInfos.length; ++i) {\n var deviceInfo = deviceInfos[i];\n var text = \"\";\n console.log(deviceInfo);\n console.log(deviceInfo.kind + \": \" + deviceInfo.label + \" id = \" + deviceInfo.deviceId);\n\n if (deviceInfo.kind === 'audioinput') {\n text = deviceInfo.label || 'microphone ' + (aud_in.length + 1);\n aud_in.push({\n id: deviceInfo.deviceId,\n kind: \"audio_in\",\n label: text\n });\n } else if (deviceInfo.kind === 'audiooutput') {\n text = deviceInfo.label || 'speaker ' + (aud_out.length + 1);\n aud_out.push({\n id: deviceInfo.deviceId,\n kind: \"audio_out\",\n label: text\n });\n } else if (deviceInfo.kind === 'videoinput') {\n text = deviceInfo.label || 'camera ' + (vid.length + 1);\n vid.push({\n id: deviceInfo.deviceId,\n kind: \"video\",\n label: text\n });\n } else {\n console.log('Some other kind of source/device: ', deviceInfo);\n }\n }\n\n self.videoDevices = vid;\n self.audioInDevices = aud_in;\n self.audioOutDevices = aud_out;\n console.info(\"Audio IN Devices\", self.audioInDevices);\n console.info(\"Audio Out Devices\", self.audioOutDevices);\n console.info(\"Video Devices\", self.videoDevices);\n\n if (Xstream) {\n Xstream.getTracks().forEach(function (track) {\n track.stop();\n });\n }\n\n if (runtime) {\n runtime(true);\n }\n }\n\n function handleError(error) {\n console.log('device enumeration error: ', error);\n if (runtime) runtime(false);\n }\n\n function checkTypes(devs) {\n for (var i = 0; i !== devs.length; ++i) {\n if (devs[i].kind === 'audioinput') {\n has_audio++;\n } else if (devs[i].kind === 'videoinput') {\n has_video++;\n }\n }\n\n if (!has_audio && !has_video) return;\n\n if (navigator.mediaDevices) {\n navigator.mediaDevices.getUserMedia({\n audio: has_audio > 0 ? true : false,\n video: has_video > 0 ? true : false\n }).then(function (stream) {\n Xstream = stream;\n navigator.mediaDevices.enumerateDevices().then(gotDevices).catch(handleError);\n }).catch(function (err) {\n console.log(\"The following error occurred: \" + err.name);\n });\n } else {\n navigator.getUserMedia({\n audio: has_audio > 0 ? true : false,\n video: has_video > 0 ? true : false\n }, function (stream) {\n Xstream = stream;\n navigator.mediaDevices.enumerateDevices().then(gotDevices).catch(handleError);\n }, function (err) {\n console.log(\"The following error occurred: \" + err.name);\n });\n }\n }\n\n if (!navigator.mediaDevices) {\n console.error(\"navigator.mediaDevices not valild!\");\n return;\n }\n\n navigator.mediaDevices.enumerateDevices().then(checkTypes).catch(handleError);\n }\n }, {\n key: \"refreshDevices\",\n value: function refreshDevices(runtime) {\n this.checkDevices(runtime);\n }\n }, {\n key: \"toggleLocalVideo\",\n value: function toggleLocalVideo(tag, params, onError) {\n _verto_rtc__WEBPACK_IMPORTED_MODULE_7__[\"default\"].toggleLocalVideo(tag, params, onError);\n }\n }]);\n\n return Verto;\n}();\n\nVerto.unloadJobs = [];\nVerto.enum = {\n state: Object(_verto_utils__WEBPACK_IMPORTED_MODULE_9__[\"ENUM\"])(\"new requesting trying recovering ringing answering early active held hangup destroy purge\"),\n direction: Object(_verto_utils__WEBPACK_IMPORTED_MODULE_9__[\"ENUM\"])(\"inbound outbound\"),\n message: Object(_verto_utils__WEBPACK_IMPORTED_MODULE_9__[\"ENUM\"])(\"display info pvtEvent clientReady\"),\n states: Object.freeze({\n new: {\n requesting: 1,\n recovering: 1,\n ringing: 1,\n destroy: 1,\n answering: 1,\n hangup: 1\n },\n requesting: {\n trying: 1,\n hangup: 1,\n active: 1\n },\n recovering: {\n answering: 1,\n hangup: 1\n },\n trying: {\n active: 1,\n early: 1,\n hangup: 1\n },\n ringing: {\n answering: 1,\n hangup: 1\n },\n answering: {\n active: 1,\n hangup: 1\n },\n active: {\n answering: 1,\n requesting: 1,\n hangup: 1,\n held: 1\n },\n held: {\n hangup: 1,\n active: 1\n },\n early: {\n hangup: 1,\n active: 1\n },\n hangup: {\n destroy: 1\n },\n destroy: {},\n purge: {\n destroy: 1\n }\n })\n};\nvar verto = new Verto(null);\n/* harmony default export */ __webpack_exports__[\"default\"] = (verto);\n\n/* For Emacs:\n * Local Variables:\n * mode:c\n * indent-tabs-mode:t\n * tab-width:4\n * c-basic-offset:4\n * End:\n * For VIM:\n * vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:\n */\n\n//# sourceURL=webpack:////Users/guiyongdong/XiaoYingTaoWorkSpace/xtalk/src/verto/verto.js?");
/***/ })
/******/ })));