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