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