@webex/internal-plugin-mercury 3.0.0-beta.9 → 3.0.0-bnr.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -3
- package/dist/config.js +0 -7
- package/dist/config.js.map +1 -1
- package/dist/errors.js +0 -44
- package/dist/errors.js.map +1 -1
- package/dist/index.js +1 -20
- package/dist/index.js.map +1 -1
- package/dist/mercury.js +29 -148
- package/dist/mercury.js.map +1 -1
- package/dist/socket/index.js +0 -4
- package/dist/socket/index.js.map +1 -1
- package/dist/socket/socket-base.js +25 -116
- package/dist/socket/socket-base.js.map +1 -1
- package/dist/socket/socket.js +1 -7
- package/dist/socket/socket.js.map +1 -1
- package/dist/socket/socket.shim.js +2 -7
- package/dist/socket/socket.shim.js.map +1 -1
- package/dist/types/config.d.ts +10 -0
- package/dist/types/errors.d.ts +31 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/mercury.d.ts +2 -0
- package/dist/types/socket/index.d.ts +1 -0
- package/dist/types/socket/socket-base.d.ts +120 -0
- package/dist/types/socket/socket.d.ts +2 -0
- package/dist/types/socket/socket.shim.d.ts +2 -0
- package/package.json +14 -14
- package/src/config.js +2 -2
- package/src/errors.js +7 -5
- package/src/index.js +2 -2
- package/src/mercury.js +74 -59
- package/src/socket/socket-base.js +45 -46
- package/src/socket/socket.shim.js +6 -8
- package/test/integration/spec/mercury.js +49 -39
- package/test/integration/spec/sharable-mercury.js +19 -15
- package/test/integration/spec/webex.js +8 -7
- package/test/unit/spec/mercury-events.js +51 -60
- package/test/unit/spec/mercury.js +179 -150
- package/test/unit/spec/socket.js +246 -202
package/dist/mercury.js
CHANGED
|
@@ -1,69 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
4
|
-
|
|
5
4
|
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
-
|
|
7
5
|
var _Object$getOwnPropertyDescriptor2 = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
8
|
-
|
|
9
6
|
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
10
|
-
|
|
11
7
|
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
12
|
-
|
|
13
8
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
14
|
-
|
|
15
9
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
16
|
-
|
|
17
10
|
_Object$defineProperty(exports, "__esModule", {
|
|
18
11
|
value: true
|
|
19
12
|
});
|
|
20
|
-
|
|
21
13
|
exports.default = void 0;
|
|
22
|
-
|
|
23
14
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
24
|
-
|
|
25
15
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
26
|
-
|
|
27
16
|
var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
|
|
28
|
-
|
|
29
17
|
var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
|
|
30
|
-
|
|
31
18
|
var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
|
|
32
|
-
|
|
33
19
|
var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor"));
|
|
34
|
-
|
|
35
20
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
36
|
-
|
|
37
21
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
|
|
38
|
-
|
|
39
22
|
var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/applyDecoratedDescriptor"));
|
|
40
|
-
|
|
41
23
|
var _set2 = _interopRequireDefault(require("lodash/set"));
|
|
42
|
-
|
|
43
24
|
var _get2 = _interopRequireDefault(require("lodash/get"));
|
|
44
|
-
|
|
45
25
|
var _camelCase2 = _interopRequireDefault(require("lodash/camelCase"));
|
|
46
|
-
|
|
47
26
|
var _url = _interopRequireDefault(require("url"));
|
|
48
|
-
|
|
49
27
|
var _webexCore = require("@webex/webex-core");
|
|
50
|
-
|
|
51
28
|
var _common = require("@webex/common");
|
|
52
|
-
|
|
53
29
|
var _backoff = _interopRequireDefault(require("backoff"));
|
|
54
|
-
|
|
55
30
|
var _socket = _interopRequireDefault(require("./socket"));
|
|
56
|
-
|
|
57
31
|
var _errors = require("./errors");
|
|
58
|
-
|
|
59
32
|
var _dec, _dec2, _obj;
|
|
60
|
-
|
|
61
33
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor2(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
62
|
-
|
|
63
34
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor2(source, key)); }); } return target; }
|
|
64
|
-
|
|
65
35
|
var normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];
|
|
66
|
-
|
|
67
36
|
var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mercury#listen(): Use Mercury#connect() instead'), _dec2 = (0, _common.deprecated)('Mercury#stopListening(): Use Mercury#disconnect() instead'), (_obj = {
|
|
68
37
|
namespace: 'Mercury',
|
|
69
38
|
session: {
|
|
@@ -88,39 +57,29 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
88
57
|
},
|
|
89
58
|
connect: function connect(webSocketUrl) {
|
|
90
59
|
var _this = this;
|
|
91
|
-
|
|
92
60
|
if (this.connected) {
|
|
93
61
|
this.logger.info('mercury: already connected, will not connect again');
|
|
94
62
|
return _promise.default.resolve();
|
|
95
63
|
}
|
|
96
|
-
|
|
97
64
|
this.connecting = true;
|
|
98
65
|
return _promise.default.resolve(this.webex.internal.device.registered || this.webex.internal.device.register()).then(function () {
|
|
99
66
|
_this.logger.info('mercury: connecting');
|
|
100
|
-
|
|
101
67
|
return _this._connectWithBackoff(webSocketUrl);
|
|
102
68
|
});
|
|
103
69
|
},
|
|
104
70
|
disconnect: function disconnect() {
|
|
105
71
|
var _this2 = this;
|
|
106
|
-
|
|
107
72
|
return new _promise.default(function (resolve) {
|
|
108
73
|
if (_this2.backoffCall) {
|
|
109
74
|
_this2.logger.info('mercury: aborting connection');
|
|
110
|
-
|
|
111
75
|
_this2.backoffCall.abort();
|
|
112
76
|
}
|
|
113
|
-
|
|
114
77
|
if (_this2.socket) {
|
|
115
78
|
_this2.socket.removeAllListeners('message');
|
|
116
|
-
|
|
117
79
|
_this2.once('offline', resolve);
|
|
118
|
-
|
|
119
80
|
_this2.socket.close();
|
|
120
|
-
|
|
121
81
|
return;
|
|
122
82
|
}
|
|
123
|
-
|
|
124
83
|
resolve();
|
|
125
84
|
});
|
|
126
85
|
},
|
|
@@ -139,7 +98,6 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
139
98
|
if (!event || !event.headers) {
|
|
140
99
|
return;
|
|
141
100
|
}
|
|
142
|
-
|
|
143
101
|
var headerKeys = (0, _keys.default)(event.headers);
|
|
144
102
|
headerKeys.forEach(function (keyPath) {
|
|
145
103
|
(0, _set2.default)(event, keyPath, event.headers[keyPath]);
|
|
@@ -147,16 +105,13 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
147
105
|
},
|
|
148
106
|
_prepareUrl: function _prepareUrl(webSocketUrl) {
|
|
149
107
|
var _this3 = this;
|
|
150
|
-
|
|
151
108
|
if (!webSocketUrl) {
|
|
152
109
|
webSocketUrl = this.webex.internal.device.webSocketUrl;
|
|
153
110
|
}
|
|
154
|
-
|
|
155
111
|
return this.webex.internal.feature.getFeature('developer', 'web-high-availability').then(function (haMessagingEnabled) {
|
|
156
112
|
if (haMessagingEnabled) {
|
|
157
113
|
return _this3.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);
|
|
158
114
|
}
|
|
159
|
-
|
|
160
115
|
return webSocketUrl;
|
|
161
116
|
}).then(function (wsUrl) {
|
|
162
117
|
webSocketUrl = wsUrl;
|
|
@@ -169,7 +124,6 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
169
124
|
bufferStates: true,
|
|
170
125
|
aliasHttpStatus: true
|
|
171
126
|
});
|
|
172
|
-
|
|
173
127
|
if (webSharedMercury) {
|
|
174
128
|
(0, _assign.default)(webSocketUrl.query, {
|
|
175
129
|
mercuryRegistrationStatus: true,
|
|
@@ -177,17 +131,14 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
177
131
|
});
|
|
178
132
|
(0, _deleteProperty.default)(webSocketUrl.query, 'bufferStates');
|
|
179
133
|
}
|
|
180
|
-
|
|
181
134
|
if ((0, _get2.default)(_this3, 'webex.config.device.ephemeral', false)) {
|
|
182
135
|
webSocketUrl.query.multipleConnections = true;
|
|
183
136
|
}
|
|
184
|
-
|
|
185
137
|
return _url.default.format(webSocketUrl);
|
|
186
138
|
});
|
|
187
139
|
},
|
|
188
140
|
_attemptConnection: function _attemptConnection(socketUrl, callback) {
|
|
189
141
|
var _this4 = this;
|
|
190
|
-
|
|
191
142
|
var socket = new _socket.default();
|
|
192
143
|
var attemptWSUrl;
|
|
193
144
|
socket.on('close', function () {
|
|
@@ -200,23 +151,17 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
200
151
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
201
152
|
args[_key] = arguments[_key];
|
|
202
153
|
}
|
|
203
|
-
|
|
204
154
|
return _this4._emit.apply(_this4, ['sequence-mismatch'].concat(args));
|
|
205
155
|
});
|
|
206
|
-
|
|
207
156
|
_promise.default.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()]).then(function (_ref) {
|
|
208
157
|
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
158
|
+
webSocketUrl = _ref2[0],
|
|
159
|
+
token = _ref2[1];
|
|
212
160
|
if (!_this4.backoffCall) {
|
|
213
161
|
var msg = 'mercury: prevent socket open when backoffCall no longer defined';
|
|
214
|
-
|
|
215
162
|
_this4.logger.info(msg);
|
|
216
|
-
|
|
217
163
|
return _promise.default.reject(new Error(msg));
|
|
218
164
|
}
|
|
219
|
-
|
|
220
165
|
attemptWSUrl = webSocketUrl;
|
|
221
166
|
var options = {
|
|
222
167
|
forceCloseDelay: _this4.config.forceCloseDelay,
|
|
@@ -225,16 +170,16 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
225
170
|
token: token.toString(),
|
|
226
171
|
trackingId: "".concat(_this4.webex.sessionId, "_").concat((0, _now.default)()),
|
|
227
172
|
logger: _this4.logger
|
|
228
|
-
};
|
|
173
|
+
};
|
|
229
174
|
|
|
175
|
+
// if the consumer has supplied request options use them
|
|
230
176
|
if (_this4.webex.config.defaultMercuryOptions) {
|
|
231
177
|
_this4.logger.info('mercury: setting custom options');
|
|
232
|
-
|
|
233
178
|
options = _objectSpread(_objectSpread({}, options), _this4.webex.config.defaultMercuryOptions);
|
|
234
|
-
}
|
|
235
|
-
// the socket if it is in the process of being opened.
|
|
236
|
-
|
|
179
|
+
}
|
|
237
180
|
|
|
181
|
+
// Set the socket before opening it. This allows a disconnect() to close
|
|
182
|
+
// the socket if it is in the process of being opened.
|
|
238
183
|
_this4.socket = socket;
|
|
239
184
|
return socket.open(webSocketUrl, options);
|
|
240
185
|
}).then(function () {
|
|
@@ -247,13 +192,11 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
247
192
|
url: attemptWSUrl
|
|
248
193
|
}
|
|
249
194
|
});
|
|
250
|
-
|
|
251
195
|
callback();
|
|
252
196
|
return _this4.webex.internal.feature.getFeature('developer', 'web-high-availability').then(function (haMessagingEnabled) {
|
|
253
197
|
if (haMessagingEnabled) {
|
|
254
198
|
return _this4.webex.internal.device.refresh();
|
|
255
199
|
}
|
|
256
|
-
|
|
257
200
|
return _promise.default.resolve();
|
|
258
201
|
});
|
|
259
202
|
}).catch(function (reason) {
|
|
@@ -266,29 +209,25 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
266
209
|
retries: _this4.backoffCall.getNumRetries()
|
|
267
210
|
});
|
|
268
211
|
}
|
|
269
|
-
|
|
270
|
-
|
|
212
|
+
_this4.logger.info('mercury: connection attempt failed', reason);
|
|
213
|
+
// UnknownResponse is produced by IE for any 4XXX; treated it like a bad
|
|
271
214
|
// web socket url and let WDM handle the token checking
|
|
272
|
-
|
|
273
|
-
|
|
274
215
|
if (reason instanceof _errors.UnknownResponse) {
|
|
275
216
|
_this4.logger.info('mercury: received unknown response code, refreshing device registration');
|
|
276
|
-
|
|
277
217
|
return _this4.webex.internal.device.refresh().then(function () {
|
|
278
218
|
return callback(reason);
|
|
279
219
|
});
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
|
|
220
|
+
}
|
|
221
|
+
// NotAuthorized implies expired token
|
|
283
222
|
if (reason instanceof _errors.NotAuthorized) {
|
|
284
223
|
_this4.logger.info('mercury: received authorization error, reauthorizing');
|
|
285
|
-
|
|
286
224
|
return _this4.webex.credentials.refresh({
|
|
287
225
|
force: true
|
|
288
226
|
}).then(function () {
|
|
289
227
|
return callback(reason);
|
|
290
228
|
});
|
|
291
|
-
}
|
|
229
|
+
}
|
|
230
|
+
// // NotFound implies expired web socket url
|
|
292
231
|
// else if (reason instanceof NotFound) {
|
|
293
232
|
// this.logger.info(`mercury: received not found error, refreshing device registration`);
|
|
294
233
|
// return this.webex.internal.device.refresh()
|
|
@@ -296,21 +235,15 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
296
235
|
// }
|
|
297
236
|
// BadRequest implies current credentials are for a Service Account
|
|
298
237
|
// Forbidden implies current user is not entitle for Webex
|
|
299
|
-
|
|
300
|
-
|
|
301
238
|
if (reason instanceof _errors.BadRequest || reason instanceof _errors.Forbidden) {
|
|
302
239
|
_this4.logger.warn('mercury: received unrecoverable response from mercury');
|
|
303
|
-
|
|
304
240
|
_this4.backoffCall.abort();
|
|
305
|
-
|
|
306
241
|
return callback(reason);
|
|
307
242
|
}
|
|
308
|
-
|
|
309
243
|
if (reason instanceof _errors.ConnectionError) {
|
|
310
244
|
return _this4.webex.internal.feature.getFeature('developer', 'web-high-availability').then(function (haMessagingEnabled) {
|
|
311
245
|
if (haMessagingEnabled) {
|
|
312
246
|
_this4.logger.info('mercury: received a generic connection error, will try to connect to another datacenter');
|
|
313
|
-
|
|
314
247
|
_this4.webex.internal.metrics.submitClientMetrics('web-ha-mercury', {
|
|
315
248
|
fields: {
|
|
316
249
|
success: false
|
|
@@ -321,84 +254,64 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
321
254
|
url: attemptWSUrl
|
|
322
255
|
}
|
|
323
256
|
});
|
|
324
|
-
|
|
325
257
|
return _this4.webex.internal.services.markFailedUrl(attemptWSUrl);
|
|
326
258
|
}
|
|
327
|
-
|
|
328
259
|
return null;
|
|
329
260
|
}).then(function () {
|
|
330
261
|
return callback(reason);
|
|
331
262
|
});
|
|
332
263
|
}
|
|
333
|
-
|
|
334
264
|
return callback(reason);
|
|
335
265
|
}).catch(function (reason) {
|
|
336
266
|
_this4.logger.error('mercury: failed to handle connection failure', reason);
|
|
337
|
-
|
|
338
267
|
callback(reason);
|
|
339
268
|
});
|
|
340
269
|
},
|
|
341
270
|
_connectWithBackoff: function _connectWithBackoff(webSocketUrl) {
|
|
342
271
|
var _this5 = this;
|
|
343
|
-
|
|
344
272
|
return new _promise.default(function (resolve, reject) {
|
|
345
273
|
// eslint gets confused about whether or not call is actually used
|
|
346
274
|
// eslint-disable-next-line prefer-const
|
|
347
275
|
var call;
|
|
348
|
-
|
|
349
276
|
var onComplete = function onComplete(err) {
|
|
350
277
|
_this5.connecting = false;
|
|
351
278
|
_this5.backoffCall = undefined;
|
|
352
|
-
|
|
353
279
|
if (err) {
|
|
354
280
|
_this5.logger.info("mercury: failed to connect after ".concat(call.getNumRetries(), " retries; log statement about next retry was inaccurate; ").concat(err));
|
|
355
|
-
|
|
356
281
|
return reject(err);
|
|
357
282
|
}
|
|
358
|
-
|
|
359
283
|
_this5.connected = true;
|
|
360
|
-
|
|
361
284
|
_this5._emit('online');
|
|
362
|
-
|
|
363
285
|
return resolve();
|
|
364
|
-
};
|
|
365
|
-
|
|
286
|
+
};
|
|
366
287
|
|
|
288
|
+
// eslint-disable-next-line prefer-reflect
|
|
367
289
|
call = _backoff.default.call(function (callback) {
|
|
368
290
|
_this5.logger.info("mercury: executing connection attempt ".concat(call.getNumRetries()));
|
|
369
|
-
|
|
370
291
|
_this5._attemptConnection(webSocketUrl, callback);
|
|
371
292
|
}, onComplete);
|
|
372
293
|
call.setStrategy(new _backoff.default.ExponentialStrategy({
|
|
373
294
|
initialDelay: _this5.config.backoffTimeReset,
|
|
374
295
|
maxDelay: _this5.config.backoffTimeMax
|
|
375
296
|
}));
|
|
376
|
-
|
|
377
297
|
if (_this5.config.maxRetries) {
|
|
378
298
|
call.failAfter(_this5.config.maxRetries);
|
|
379
299
|
}
|
|
380
|
-
|
|
381
300
|
call.on('abort', function () {
|
|
382
301
|
_this5.logger.info('mercury: connection aborted');
|
|
383
|
-
|
|
384
302
|
reject(new Error('Mercury Connection Aborted'));
|
|
385
303
|
});
|
|
386
304
|
call.on('callback', function (err) {
|
|
387
305
|
if (err) {
|
|
388
306
|
var number = call.getNumRetries();
|
|
389
307
|
var delay = Math.min(call.strategy_.nextBackoffDelay_, _this5.config.backoffTimeMax);
|
|
390
|
-
|
|
391
308
|
_this5.logger.info("mercury: failed to connect; attempting retry ".concat(number + 1, " in ").concat(delay, " ms"));
|
|
392
309
|
/* istanbul ignore if */
|
|
393
|
-
|
|
394
|
-
|
|
395
310
|
if (process.env.NODE_ENV === 'development') {
|
|
396
311
|
_this5.logger.debug('mercury: ', err, err.stack);
|
|
397
312
|
}
|
|
398
|
-
|
|
399
313
|
return;
|
|
400
314
|
}
|
|
401
|
-
|
|
402
315
|
_this5.logger.info('mercury: connected');
|
|
403
316
|
});
|
|
404
317
|
call.start();
|
|
@@ -414,93 +327,70 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
414
327
|
},
|
|
415
328
|
_getEventHandlers: function _getEventHandlers(eventType) {
|
|
416
329
|
var _eventType$split = eventType.split('.'),
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
330
|
+
_eventType$split2 = (0, _slicedToArray2.default)(_eventType$split, 2),
|
|
331
|
+
namespace = _eventType$split2[0],
|
|
332
|
+
name = _eventType$split2[1];
|
|
421
333
|
var handlers = [];
|
|
422
|
-
|
|
423
334
|
if (!this.webex[namespace] && !this.webex.internal[namespace]) {
|
|
424
335
|
return handlers;
|
|
425
336
|
}
|
|
426
|
-
|
|
427
337
|
var handlerName = (0, _camelCase2.default)("process_".concat(name, "_event"));
|
|
428
|
-
|
|
429
338
|
if ((this.webex[namespace] || this.webex.internal[namespace])[handlerName]) {
|
|
430
339
|
handlers.push({
|
|
431
340
|
name: handlerName,
|
|
432
341
|
namespace: namespace
|
|
433
342
|
});
|
|
434
343
|
}
|
|
435
|
-
|
|
436
344
|
return handlers;
|
|
437
345
|
},
|
|
438
346
|
_onclose: function _onclose(event) {
|
|
439
347
|
// I don't see any way to avoid the complexity or statement count in here.
|
|
440
|
-
|
|
441
348
|
/* eslint complexity: [0] */
|
|
349
|
+
|
|
442
350
|
try {
|
|
443
351
|
var reason = event.reason && event.reason.toLowerCase();
|
|
444
352
|
var socketUrl = this.socket.url;
|
|
445
353
|
this.socket.removeAllListeners();
|
|
446
354
|
this.unset('socket');
|
|
447
355
|
this.connected = false;
|
|
448
|
-
|
|
449
356
|
this._emit('offline', event);
|
|
450
|
-
|
|
451
357
|
switch (event.code) {
|
|
452
358
|
case 1003:
|
|
453
359
|
// metric: disconnect
|
|
454
360
|
this.logger.info("mercury: Mercury service rejected last message; will not reconnect: ".concat(event.reason));
|
|
455
|
-
|
|
456
361
|
this._emit('offline.permanent', event);
|
|
457
|
-
|
|
458
362
|
break;
|
|
459
|
-
|
|
460
363
|
case 4000:
|
|
461
364
|
// metric: disconnect
|
|
462
365
|
this.logger.info('mercury: socket replaced; will not reconnect');
|
|
463
|
-
|
|
464
366
|
this._emit('offline.replaced', event);
|
|
465
|
-
|
|
466
367
|
break;
|
|
467
|
-
|
|
468
368
|
case 1001:
|
|
469
369
|
case 1005:
|
|
470
370
|
case 1006:
|
|
471
371
|
case 1011:
|
|
472
372
|
this.logger.info('mercury: socket disconnected; reconnecting');
|
|
473
|
-
|
|
474
373
|
this._emit('offline.transient', event);
|
|
475
|
-
|
|
476
|
-
|
|
374
|
+
this._reconnect(socketUrl);
|
|
375
|
+
// metric: disconnect
|
|
477
376
|
// if (code == 1011 && reason !== ping error) metric: unexpected disconnect
|
|
478
|
-
|
|
479
|
-
|
|
480
377
|
break;
|
|
481
|
-
|
|
482
378
|
case 1000:
|
|
483
379
|
if (normalReconnectReasons.includes(reason)) {
|
|
484
380
|
this.logger.info('mercury: socket disconnected; reconnecting');
|
|
485
|
-
|
|
486
381
|
this._emit('offline.transient', event);
|
|
487
|
-
|
|
488
|
-
|
|
382
|
+
this._reconnect(socketUrl);
|
|
383
|
+
// metric: disconnect
|
|
489
384
|
// if (reason === done forced) metric: force closure
|
|
490
|
-
|
|
491
385
|
} else {
|
|
492
386
|
this.logger.info('mercury: socket disconnected; will not reconnect');
|
|
493
|
-
|
|
494
387
|
this._emit('offline.permanent', event);
|
|
495
388
|
}
|
|
496
|
-
|
|
497
389
|
break;
|
|
498
|
-
|
|
499
390
|
default:
|
|
500
|
-
this.logger.info('mercury: socket disconnected unexpectedly; will not reconnect');
|
|
501
|
-
|
|
391
|
+
this.logger.info('mercury: socket disconnected unexpectedly; will not reconnect');
|
|
392
|
+
// unexpected disconnect
|
|
502
393
|
this._emit('offline.permanent', event);
|
|
503
|
-
|
|
504
394
|
}
|
|
505
395
|
} catch (error) {
|
|
506
396
|
this.logger.error('mercury: error occurred in close handler', error);
|
|
@@ -508,21 +398,16 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
508
398
|
},
|
|
509
399
|
_onmessage: function _onmessage(event) {
|
|
510
400
|
var _this6 = this;
|
|
511
|
-
|
|
512
401
|
var envelope = event.data;
|
|
513
|
-
|
|
514
402
|
if (process.env.ENABLE_MERCURY_LOGGING) {
|
|
515
403
|
this.logger.debug('mercury: message envelope: ', envelope);
|
|
516
404
|
}
|
|
517
|
-
|
|
518
405
|
var data = envelope.data;
|
|
519
|
-
|
|
520
406
|
this._applyOverrides(data);
|
|
521
|
-
|
|
522
407
|
return this._getEventHandlers(data.eventType).reduce(function (promise, handler) {
|
|
523
408
|
return promise.then(function () {
|
|
524
409
|
var namespace = handler.namespace,
|
|
525
|
-
|
|
410
|
+
name = handler.name;
|
|
526
411
|
return new _promise.default(function (resolve) {
|
|
527
412
|
return resolve((_this6.webex[namespace] || _this6.webex.internal[namespace])[name](data));
|
|
528
413
|
}).catch(function (reason) {
|
|
@@ -531,16 +416,13 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
531
416
|
});
|
|
532
417
|
}, _promise.default.resolve()).then(function () {
|
|
533
418
|
_this6._emit('event', event.data);
|
|
534
|
-
|
|
535
419
|
var _data$eventType$split = data.eventType.split('.'),
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
420
|
+
_data$eventType$split2 = (0, _slicedToArray2.default)(_data$eventType$split, 1),
|
|
421
|
+
namespace = _data$eventType$split2[0];
|
|
539
422
|
if (namespace === data.eventType) {
|
|
540
423
|
_this6._emit("event:".concat(namespace), envelope);
|
|
541
424
|
} else {
|
|
542
425
|
_this6._emit("event:".concat(namespace), envelope);
|
|
543
|
-
|
|
544
426
|
_this6._emit("event:".concat(data.eventType), envelope);
|
|
545
427
|
}
|
|
546
428
|
}).catch(function (reason) {
|
|
@@ -551,9 +433,8 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
551
433
|
this.logger.info('mercury: reconnecting');
|
|
552
434
|
return this.connect(webSocketUrl);
|
|
553
435
|
},
|
|
554
|
-
version: "3.0.0-
|
|
436
|
+
version: "3.0.0-bnr.0"
|
|
555
437
|
}, ((0, _applyDecoratedDescriptor2.default)(_obj, "connect", [_common.oneFlight], (0, _getOwnPropertyDescriptor.default)(_obj, "connect"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "disconnect", [_common.oneFlight], (0, _getOwnPropertyDescriptor.default)(_obj, "disconnect"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "listen", [_dec], (0, _getOwnPropertyDescriptor.default)(_obj, "listen"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "stopListening", [_dec2], (0, _getOwnPropertyDescriptor.default)(_obj, "stopListening"), _obj)), _obj)));
|
|
556
|
-
|
|
557
438
|
var _default = Mercury;
|
|
558
439
|
exports.default = _default;
|
|
559
440
|
//# sourceMappingURL=mercury.js.map
|