@webex/calling 3.12.0-mobius-socket.17 → 3.12.0-mobius-socket.19
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/dist/CallingClient/utils/request.js +6 -3
- package/dist/CallingClient/utils/request.js.map +1 -1
- package/dist/CallingClient/utils/request.test.js +2 -2
- package/dist/CallingClient/utils/request.test.js.map +1 -1
- package/dist/CallingClient/utils/types.js.map +1 -1
- package/dist/SDKConnector/types.js.map +1 -1
- package/dist/mobius-socket/config.js +7 -44
- package/dist/mobius-socket/config.js.map +1 -1
- package/dist/mobius-socket/errors.js +25 -21
- package/dist/mobius-socket/errors.js.map +1 -1
- package/dist/mobius-socket/index.js +0 -44
- package/dist/mobius-socket/index.js.map +1 -1
- package/dist/mobius-socket/mobius-socket-events.test.js +20 -48
- package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -1
- package/dist/mobius-socket/mobius-socket.js +302 -701
- package/dist/mobius-socket/mobius-socket.js.map +1 -1
- package/dist/mobius-socket/mobius-socket.test.js +435 -718
- package/dist/mobius-socket/mobius-socket.test.js.map +1 -1
- package/dist/mobius-socket/socket/socket-base.js +70 -78
- package/dist/mobius-socket/socket/socket-base.js.map +1 -1
- package/dist/mobius-socket/socket.test.js +36 -61
- package/dist/mobius-socket/socket.test.js.map +1 -1
- package/dist/mobius-socket/types.js +7 -0
- package/dist/mobius-socket/types.js.map +1 -0
- package/dist/module/CallingClient/utils/request.js +3 -2
- package/dist/module/mobius-socket/config.js +7 -10
- package/dist/module/mobius-socket/errors.js +17 -0
- package/dist/module/mobius-socket/index.js +0 -3
- package/dist/module/mobius-socket/mobius-socket.js +211 -401
- package/dist/module/mobius-socket/socket/socket-base.js +64 -69
- package/dist/module/mobius-socket/types.js +1 -0
- package/dist/types/CallingClient/utils/request.d.ts.map +1 -1
- package/dist/types/CallingClient/utils/types.d.ts +1 -1
- package/dist/types/CallingClient/utils/types.d.ts.map +1 -1
- package/dist/types/SDKConnector/types.d.ts +15 -0
- package/dist/types/SDKConnector/types.d.ts.map +1 -1
- package/dist/types/mobius-socket/config.d.ts +7 -8
- package/dist/types/mobius-socket/config.d.ts.map +1 -1
- package/dist/types/mobius-socket/errors.d.ts +7 -0
- package/dist/types/mobius-socket/errors.d.ts.map +1 -1
- package/dist/types/mobius-socket/index.d.ts +3 -5
- package/dist/types/mobius-socket/index.d.ts.map +1 -1
- package/dist/types/mobius-socket/mobius-socket.d.ts +26 -37
- package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/socket-base.d.ts +10 -10
- package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -1
- package/dist/types/mobius-socket/types.d.ts +21 -0
- package/dist/types/mobius-socket/types.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -23,18 +23,23 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
|
|
|
23
23
|
* Exception thrown when a websocket gets closed
|
|
24
24
|
*/
|
|
25
25
|
var ConnectionError = exports.ConnectionError = /*#__PURE__*/function (_Exception) {
|
|
26
|
-
|
|
26
|
+
// eslint-disable-next-line no-useless-constructor
|
|
27
|
+
function ConnectionError(event) {
|
|
28
|
+
var _this;
|
|
27
29
|
(0, _classCallCheck2.default)(this, ConnectionError);
|
|
28
|
-
|
|
30
|
+
_this = _callSuper(this, ConnectionError, [event]);
|
|
31
|
+
(0, _defineProperty2.default)(_this, "code", void 0);
|
|
32
|
+
(0, _defineProperty2.default)(_this, "reason", void 0);
|
|
33
|
+
return _this;
|
|
29
34
|
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @param event
|
|
38
|
+
*/
|
|
30
39
|
(0, _inherits2.default)(ConnectionError, _Exception);
|
|
31
40
|
return (0, _createClass2.default)(ConnectionError, [{
|
|
32
41
|
key: "parse",
|
|
33
|
-
value:
|
|
34
|
-
/**
|
|
35
|
-
* @param event
|
|
36
|
-
*/
|
|
37
|
-
function parse() {
|
|
42
|
+
value: function parse() {
|
|
38
43
|
var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
39
44
|
(0, _defineProperties.default)(this, {
|
|
40
45
|
code: {
|
|
@@ -53,9 +58,10 @@ var ConnectionError = exports.ConnectionError = /*#__PURE__*/function (_Exceptio
|
|
|
53
58
|
*/
|
|
54
59
|
(0, _defineProperty2.default)(ConnectionError, "defaultMessage", 'Failed to connect to socket');
|
|
55
60
|
var UnknownResponse = exports.UnknownResponse = /*#__PURE__*/function (_ConnectionError2) {
|
|
56
|
-
|
|
61
|
+
// eslint-disable-next-line no-useless-constructor
|
|
62
|
+
function UnknownResponse(event) {
|
|
57
63
|
(0, _classCallCheck2.default)(this, UnknownResponse);
|
|
58
|
-
return _callSuper(this, UnknownResponse,
|
|
64
|
+
return _callSuper(this, UnknownResponse, [event]);
|
|
59
65
|
}
|
|
60
66
|
(0, _inherits2.default)(UnknownResponse, _ConnectionError2);
|
|
61
67
|
return (0, _createClass2.default)(UnknownResponse);
|
|
@@ -65,9 +71,10 @@ var UnknownResponse = exports.UnknownResponse = /*#__PURE__*/function (_Connecti
|
|
|
65
71
|
*/
|
|
66
72
|
(0, _defineProperty2.default)(UnknownResponse, "defaultMessage", 'UnknownResponse is produced by IE when we receive a 4XXX. You probably want to treat this like a NotFound');
|
|
67
73
|
var BadRequest = exports.BadRequest = /*#__PURE__*/function (_ConnectionError3) {
|
|
68
|
-
|
|
74
|
+
// eslint-disable-next-line no-useless-constructor
|
|
75
|
+
function BadRequest(event) {
|
|
69
76
|
(0, _classCallCheck2.default)(this, BadRequest);
|
|
70
|
-
return _callSuper(this, BadRequest,
|
|
77
|
+
return _callSuper(this, BadRequest, [event]);
|
|
71
78
|
}
|
|
72
79
|
(0, _inherits2.default)(BadRequest, _ConnectionError3);
|
|
73
80
|
return (0, _createClass2.default)(BadRequest);
|
|
@@ -77,9 +84,10 @@ var BadRequest = exports.BadRequest = /*#__PURE__*/function (_ConnectionError3)
|
|
|
77
84
|
*/
|
|
78
85
|
(0, _defineProperty2.default)(BadRequest, "defaultMessage", 'BadRequest usually implies an attempt to use service account credentials');
|
|
79
86
|
var NotAuthorized = exports.NotAuthorized = /*#__PURE__*/function (_ConnectionError4) {
|
|
80
|
-
|
|
87
|
+
// eslint-disable-next-line no-useless-constructor
|
|
88
|
+
function NotAuthorized(event) {
|
|
81
89
|
(0, _classCallCheck2.default)(this, NotAuthorized);
|
|
82
|
-
return _callSuper(this, NotAuthorized,
|
|
90
|
+
return _callSuper(this, NotAuthorized, [event]);
|
|
83
91
|
}
|
|
84
92
|
(0, _inherits2.default)(NotAuthorized, _ConnectionError4);
|
|
85
93
|
return (0, _createClass2.default)(NotAuthorized);
|
|
@@ -89,17 +97,13 @@ var NotAuthorized = exports.NotAuthorized = /*#__PURE__*/function (_ConnectionEr
|
|
|
89
97
|
*/
|
|
90
98
|
(0, _defineProperty2.default)(NotAuthorized, "defaultMessage", 'Please refresh your access token');
|
|
91
99
|
var Forbidden = exports.Forbidden = /*#__PURE__*/function (_ConnectionError5) {
|
|
92
|
-
|
|
100
|
+
// eslint-disable-next-line no-useless-constructor
|
|
101
|
+
function Forbidden(event) {
|
|
93
102
|
(0, _classCallCheck2.default)(this, Forbidden);
|
|
94
|
-
return _callSuper(this, Forbidden,
|
|
103
|
+
return _callSuper(this, Forbidden, [event]);
|
|
95
104
|
}
|
|
96
105
|
(0, _inherits2.default)(Forbidden, _ConnectionError5);
|
|
97
106
|
return (0, _createClass2.default)(Forbidden);
|
|
98
|
-
}(ConnectionError);
|
|
99
|
-
// * thrown for CloseCode 4404
|
|
100
|
-
// */
|
|
101
|
-
// export class NotFound extends ConnectionError {
|
|
102
|
-
// static defaultMessage = `Please refresh your Mercury registration (typically via a WDM refresh)`;
|
|
103
|
-
// }
|
|
107
|
+
}(ConnectionError);
|
|
104
108
|
(0, _defineProperty2.default)(Forbidden, "defaultMessage", 'Forbidden usually implies these credentials are not entitled for Webex');
|
|
105
109
|
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_common","require","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","ConnectionError","exports","_Exception","_classCallCheck2","
|
|
1
|
+
{"version":3,"names":["_common","require","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","ConnectionError","exports","_Exception","event","_this","_classCallCheck2","_defineProperty2","_inherits2","_createClass2","key","value","parse","arguments","length","undefined","_defineProperties","code","reason","Exception","UnknownResponse","_ConnectionError2","BadRequest","_ConnectionError3","NotAuthorized","_ConnectionError4","Forbidden","_ConnectionError5"],"sources":["errors.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n// @ts-expect-error `@webex/common` is still JS-only and does not ship declarations.\nimport {Exception} from '@webex/common';\nimport type {SocketCloseEvent} from './socket/types';\n\n/**\n * Exception thrown when a websocket gets closed\n */\nexport class ConnectionError extends Exception {\n static defaultMessage = 'Failed to connect to socket';\n\n code?: number;\n\n reason?: string;\n\n // eslint-disable-next-line no-useless-constructor\n constructor(event?: SocketCloseEvent) {\n super(event);\n }\n\n /**\n * @param event\n */\n parse(event: SocketCloseEvent = {}) {\n Object.defineProperties(this, {\n code: {\n value: event.code,\n },\n reason: {\n value: event.reason,\n },\n });\n\n return event.reason;\n }\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class UnknownResponse extends ConnectionError {\n static defaultMessage =\n 'UnknownResponse is produced by IE when we receive a 4XXX. You probably want to treat this like a NotFound';\n\n // eslint-disable-next-line no-useless-constructor\n constructor(event?: SocketCloseEvent) {\n super(event);\n }\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class BadRequest extends ConnectionError {\n static defaultMessage =\n 'BadRequest usually implies an attempt to use service account credentials';\n\n // eslint-disable-next-line no-useless-constructor\n constructor(event?: SocketCloseEvent) {\n super(event);\n }\n}\n\n/**\n * thrown for CloseCode 4401\n */\nexport class NotAuthorized extends ConnectionError {\n static defaultMessage = 'Please refresh your access token';\n\n // eslint-disable-next-line no-useless-constructor\n constructor(event?: SocketCloseEvent) {\n super(event);\n }\n}\n\n/**\n * thrown for CloseCode 4403\n */\nexport class Forbidden extends ConnectionError {\n static defaultMessage = 'Forbidden usually implies these credentials are not entitled for Webex';\n\n // eslint-disable-next-line no-useless-constructor\n constructor(event?: SocketCloseEvent) {\n super(event);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,54 +10,12 @@ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequ
|
|
|
10
10
|
_Object$defineProperty(exports, "__esModule", {
|
|
11
11
|
value: true
|
|
12
12
|
});
|
|
13
|
-
_Object$defineProperty(exports, "BadRequest", {
|
|
14
|
-
enumerable: true,
|
|
15
|
-
get: function get() {
|
|
16
|
-
return _errors.BadRequest;
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
_Object$defineProperty(exports, "ConnectionError", {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
get: function get() {
|
|
22
|
-
return _errors.ConnectionError;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
_Object$defineProperty(exports, "Forbidden", {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
get: function get() {
|
|
28
|
-
return _errors.Forbidden;
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
13
|
_Object$defineProperty(exports, "MobiusSocket", {
|
|
32
14
|
enumerable: true,
|
|
33
15
|
get: function get() {
|
|
34
16
|
return _mobiusSocket.default;
|
|
35
17
|
}
|
|
36
18
|
});
|
|
37
|
-
_Object$defineProperty(exports, "NotAuthorized", {
|
|
38
|
-
enumerable: true,
|
|
39
|
-
get: function get() {
|
|
40
|
-
return _errors.NotAuthorized;
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
_Object$defineProperty(exports, "Socket", {
|
|
44
|
-
enumerable: true,
|
|
45
|
-
get: function get() {
|
|
46
|
-
return _socket.default;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
_Object$defineProperty(exports, "UnknownResponse", {
|
|
50
|
-
enumerable: true,
|
|
51
|
-
get: function get() {
|
|
52
|
-
return _errors.UnknownResponse;
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
_Object$defineProperty(exports, "config", {
|
|
56
|
-
enumerable: true,
|
|
57
|
-
get: function get() {
|
|
58
|
-
return _config.default;
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
19
|
exports.default = void 0;
|
|
62
20
|
exports.getMobiusSocketInstance = getMobiusSocketInstance;
|
|
63
21
|
exports.resetMobiusSocketInstance = resetMobiusSocketInstance;
|
|
@@ -67,8 +25,6 @@ require("@webex/internal-plugin-feature");
|
|
|
67
25
|
require("@webex/internal-plugin-metrics");
|
|
68
26
|
var _mobiusSocket = _interopRequireDefault(require("./mobius-socket"));
|
|
69
27
|
var _config = _interopRequireDefault(require("./config"));
|
|
70
|
-
var _socket = _interopRequireDefault(require("./socket"));
|
|
71
|
-
var _errors = require("./errors");
|
|
72
28
|
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
73
29
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } /*!
|
|
74
30
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["require","_mobiusSocket","_interopRequireDefault","_config","
|
|
1
|
+
{"version":3,"names":["require","_mobiusSocket","_interopRequireDefault","_config","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","mobiusSocketInstance","getMobiusSocketInstance","webex","mobiusSocketConfig","MobiusSocket","config","mobiusSocket","resetMobiusSocketInstance","undefined","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport '@webex/internal-plugin-feature';\nimport '@webex/internal-plugin-metrics';\n\nimport type {WebexSDK} from '../SDKConnector/types';\nimport MobiusSocket from './mobius-socket';\nimport config, {MobiusSocketConfig} from './config';\n\n/**\n * Creates a calling-owned Mobius socket client for the provided Webex instance.\n *\n * @param webex\n * @param [mobiusSocketConfig]\n * @returns\n */\nlet mobiusSocketInstance: MobiusSocket | undefined; // Keeping just one instance of MobiusSocket since there won't be multiple connections\n\n/**\n * Creates or returns the singleton Mobius socket client for the provided Webex instance.\n * @param webex - The Webex SDK instance\n * @param [mobiusSocketConfig] - Optional configuration overrides\n * @returns The singleton MobiusSocket instance\n */\nexport function getMobiusSocketInstance(\n webex: WebexSDK,\n mobiusSocketConfig?: Partial<MobiusSocketConfig>\n): MobiusSocket {\n if (mobiusSocketInstance) {\n return mobiusSocketInstance;\n }\n\n mobiusSocketInstance = new MobiusSocket(webex, {\n ...config.mobiusSocket,\n ...mobiusSocketConfig,\n });\n\n return mobiusSocketInstance;\n}\n\n/**\n * Resets the singleton MobiusSocket instance, allowing a new one to be created.\n * @returns\n */\nexport function resetMobiusSocketInstance() {\n mobiusSocketInstance = undefined;\n}\n\nexport default MobiusSocket;\nexport {MobiusSocket};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAIAA,OAAA;AACAA,OAAA;AACAA,OAAA;AAGA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAD,sBAAA,CAAAF,OAAA;AAAoD,SAAAI,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA,IAVpD;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIqB,oBAA8C,CAAC,CAAC;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,uBAAuBA,CACrCC,KAAe,EACfC,kBAAgD,EAClC;EACd,IAAIH,oBAAoB,EAAE;IACxB,OAAOA,oBAAoB;EAC7B;EAEAA,oBAAoB,GAAG,IAAII,qBAAY,CAACF,KAAK,EAAAZ,aAAA,CAAAA,aAAA,KACxCe,eAAM,CAACC,YAAY,GACnBH,kBAAkB,CACtB,CAAC;EAEF,OAAOH,oBAAoB;AAC7B;;AAEA;AACA;AACA;AACA;AACO,SAASO,yBAAyBA,CAAA,EAAG;EAC1CP,oBAAoB,GAAGQ,SAAS;AAClC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAd,OAAA,GAEcQ,qBAAY","ignoreList":[]}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
|
|
4
3
|
var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
5
4
|
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
5
|
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
7
6
|
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
8
7
|
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
9
8
|
var _Object$defineProperty2 = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
10
|
-
var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
|
|
11
9
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
12
10
|
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
13
11
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-property"));
|
|
@@ -24,10 +22,11 @@ var _sinon = _interopRequireDefault(require("sinon"));
|
|
|
24
22
|
var _testHelperChai = require("@webex/test-helper-chai");
|
|
25
23
|
var _testHelperMockWebex = _interopRequireDefault(require("@webex/test-helper-mock-webex"));
|
|
26
24
|
var _testHelperMockWebSocket = _interopRequireDefault(require("@webex/test-helper-mock-web-socket"));
|
|
27
|
-
var _index =
|
|
25
|
+
var _index = _interopRequireDefault(require("./index"));
|
|
26
|
+
var _config = _interopRequireDefault(require("./config"));
|
|
27
|
+
var _socket = _interopRequireDefault(require("./socket"));
|
|
28
28
|
var _constants = require("./socket/constants");
|
|
29
29
|
var _promiseTick = _interopRequireDefault(require("./test/promise-tick"));
|
|
30
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var r = new _WeakMap(), n = new _WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = _Object$defineProperty2) && _Object$getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
|
|
31
30
|
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
32
31
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty3.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty2(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } /*!
|
|
33
32
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
@@ -68,8 +67,7 @@ describe('plugin-mobiusSocket', function () {
|
|
|
68
67
|
conversationId: createUuid()
|
|
69
68
|
},
|
|
70
69
|
timestamp: (0, _now.default)(),
|
|
71
|
-
trackingId: "suffix_".concat(createUuid(), "_").concat((0, _now.default)())
|
|
72
|
-
sessionId: 'mobius-websocket-session'
|
|
70
|
+
trackingId: "suffix_".concat(createUuid(), "_").concat((0, _now.default)())
|
|
73
71
|
};
|
|
74
72
|
var emitAuthResponse = function emitAuthResponse() {
|
|
75
73
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
@@ -105,17 +103,12 @@ describe('plugin-mobiusSocket', function () {
|
|
|
105
103
|
usingFakeTimers = false;
|
|
106
104
|
}
|
|
107
105
|
if (!mobiusSocket) {
|
|
108
|
-
_context.next =
|
|
106
|
+
_context.next = 4;
|
|
109
107
|
break;
|
|
110
108
|
}
|
|
111
|
-
if (mobiusSocket._connectPromises) {
|
|
112
|
-
mobiusSocket._connectPromises.forEach(function (promise) {
|
|
113
|
-
promise.catch(function () {});
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
109
|
_context.prev = 1;
|
|
117
110
|
_context.next = 2;
|
|
118
|
-
return mobiusSocket.
|
|
111
|
+
return mobiusSocket.disconnect();
|
|
119
112
|
case 2:
|
|
120
113
|
_context.next = 4;
|
|
121
114
|
break;
|
|
@@ -123,10 +116,6 @@ describe('plugin-mobiusSocket', function () {
|
|
|
123
116
|
_context.prev = 3;
|
|
124
117
|
_t = _context["catch"](1);
|
|
125
118
|
case 4:
|
|
126
|
-
if (mobiusSocket._connectPromises) {
|
|
127
|
-
mobiusSocket._connectPromises.clear();
|
|
128
|
-
}
|
|
129
|
-
case 5:
|
|
130
119
|
if (mockWebSocket && typeof mockWebSocket.close === 'function') {
|
|
131
120
|
try {
|
|
132
121
|
mockWebSocket.close();
|
|
@@ -135,13 +124,13 @@ describe('plugin-mobiusSocket', function () {
|
|
|
135
124
|
}
|
|
136
125
|
}
|
|
137
126
|
// Restore stubs
|
|
138
|
-
if (
|
|
139
|
-
|
|
127
|
+
if (_socket.default.getWebSocketConstructor.restore) {
|
|
128
|
+
_socket.default.getWebSocketConstructor.restore();
|
|
140
129
|
}
|
|
141
130
|
if (socketOpenStub && socketOpenStub.restore) {
|
|
142
131
|
socketOpenStub.restore();
|
|
143
132
|
}
|
|
144
|
-
case
|
|
133
|
+
case 5:
|
|
145
134
|
case "end":
|
|
146
135
|
return _context.stop();
|
|
147
136
|
}
|
|
@@ -153,7 +142,7 @@ describe('plugin-mobiusSocket', function () {
|
|
|
153
142
|
webex.internal.metrics.submitClientMetrics = _sinon.default.stub();
|
|
154
143
|
webex.trackingId = 'fakeTrackingId';
|
|
155
144
|
webex.logger = console;
|
|
156
|
-
_sinon.default.stub(
|
|
145
|
+
_sinon.default.stub(_socket.default, 'getWebSocketConstructor').callsFake(function () {
|
|
157
146
|
return function () {
|
|
158
147
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
159
148
|
args[_key] = arguments[_key];
|
|
@@ -163,8 +152,8 @@ describe('plugin-mobiusSocket', function () {
|
|
|
163
152
|
return mockWebSocket;
|
|
164
153
|
};
|
|
165
154
|
});
|
|
166
|
-
var origOpen =
|
|
167
|
-
socketOpenStub = _sinon.default.stub(
|
|
155
|
+
var origOpen = _socket.default.prototype.open;
|
|
156
|
+
socketOpenStub = _sinon.default.stub(_socket.default.prototype, 'open').callsFake(function () {
|
|
168
157
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
169
158
|
args[_key2] = arguments[_key2];
|
|
170
159
|
}
|
|
@@ -178,8 +167,7 @@ describe('plugin-mobiusSocket', function () {
|
|
|
178
167
|
});
|
|
179
168
|
return promise;
|
|
180
169
|
});
|
|
181
|
-
mobiusSocket = new _index.default(webex, _objectSpread({},
|
|
182
|
-
mobiusSocket.defaultSessionId = 'mobius-websocket-session';
|
|
170
|
+
mobiusSocket = new _index.default(webex, _objectSpread({}, _config.default.mobiusSocket));
|
|
183
171
|
});
|
|
184
172
|
it('removes all listeners for an event when off() is called without a listener', function () {
|
|
185
173
|
var firstListener = _sinon.default.stub();
|
|
@@ -195,8 +183,8 @@ describe('plugin-mobiusSocket', function () {
|
|
|
195
183
|
if (socketOpenStub) {
|
|
196
184
|
socketOpenStub.restore();
|
|
197
185
|
}
|
|
198
|
-
if (
|
|
199
|
-
|
|
186
|
+
if (_socket.default.getWebSocketConstructor.restore) {
|
|
187
|
+
_socket.default.getWebSocketConstructor.restore();
|
|
200
188
|
}
|
|
201
189
|
});
|
|
202
190
|
describe('when connected', function () {
|
|
@@ -258,7 +246,7 @@ describe('plugin-mobiusSocket', function () {
|
|
|
258
246
|
var onlineSpy = _sinon.default.spy();
|
|
259
247
|
mobiusSocket.on('event:mercury.buffer_state', bufferStateSpy);
|
|
260
248
|
mobiusSocket.on('online', onlineSpy);
|
|
261
|
-
|
|
249
|
+
_socket.default.getWebSocketConstructor.callsFake(function () {
|
|
262
250
|
return function () {
|
|
263
251
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
264
252
|
args[_key3] = arguments[_key3];
|
|
@@ -294,7 +282,7 @@ describe('plugin-mobiusSocket', function () {
|
|
|
294
282
|
// string assertion
|
|
295
283
|
_testHelperChai.assert.lengthOf(sendSpy.args, 0, 'The client has not acked the buffer_state message');
|
|
296
284
|
(0, _promiseTick.default)(1).then(function () {
|
|
297
|
-
_testHelperChai.assert.
|
|
285
|
+
_testHelperChai.assert.called(bufferStateSpy);
|
|
298
286
|
resolveTest();
|
|
299
287
|
}).catch(rejectTest);
|
|
300
288
|
});
|
|
@@ -363,8 +351,8 @@ describe('plugin-mobiusSocket', function () {
|
|
|
363
351
|
}
|
|
364
352
|
describe("when an event ".concat(description, " is received"), function () {
|
|
365
353
|
it("takes the ".concat(action, " action"), function () {
|
|
366
|
-
if (mobiusSocket.
|
|
367
|
-
mobiusSocket.
|
|
354
|
+
if (mobiusSocket.reconnect.restore) {
|
|
355
|
+
mobiusSocket.reconnect.restore();
|
|
368
356
|
}
|
|
369
357
|
_sinon.default.spy(mobiusSocket, 'connect');
|
|
370
358
|
var offlineSpy = _sinon.default.spy();
|
|
@@ -389,8 +377,7 @@ describe('plugin-mobiusSocket', function () {
|
|
|
389
377
|
_testHelperChai.assert.called(offlineSpy);
|
|
390
378
|
_testHelperChai.assert.calledWith(offlineSpy, {
|
|
391
379
|
code: code,
|
|
392
|
-
reason: reason
|
|
393
|
-
sessionId: 'mobius-websocket-session'
|
|
380
|
+
reason: reason
|
|
394
381
|
});
|
|
395
382
|
switch (action) {
|
|
396
383
|
case 'close':
|
|
@@ -429,21 +416,6 @@ describe('plugin-mobiusSocket', function () {
|
|
|
429
416
|
});
|
|
430
417
|
});
|
|
431
418
|
describe('when a MessageEvent is received', function () {
|
|
432
|
-
it('processes the Event via any autowired event handlers', function () {
|
|
433
|
-
webex.fake = {
|
|
434
|
-
processTestEvent: _sinon.default.spy()
|
|
435
|
-
};
|
|
436
|
-
var promise = mobiusSocket.connect();
|
|
437
|
-
mockWebSocket.open();
|
|
438
|
-
return promise.then(function () {
|
|
439
|
-
mockWebSocket.emit('message', {
|
|
440
|
-
data: (0, _stringify.default)(fakeTestMessage)
|
|
441
|
-
});
|
|
442
|
-
return (0, _promiseTick.default)(1);
|
|
443
|
-
}).then(function () {
|
|
444
|
-
_testHelperChai.assert.called(webex.fake.processTestEvent);
|
|
445
|
-
});
|
|
446
|
-
});
|
|
447
419
|
it('emits the MobiusSocket envelope', function () {
|
|
448
420
|
var startSpy = _sinon.default.spy();
|
|
449
421
|
var stopSpy = _sinon.default.spy();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_crypto","require","_sinon","_interopRequireDefault","_testHelperChai","_testHelperMockWebex","_testHelperMockWebSocket","_index","_interopRequireWildcard","_constants","_promiseTick","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t2","hasOwnProperty","call","_Object$defineProperty2","_Object$getOwnPropertyDescriptor","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty3","_Object$getOwnPropertyDescriptors","_Object$defineProperties","crypto","randomUUID","_defineProperty2","value","configurable","describe","createUuid","mobiusSocket","mockWebSocket","originalSendSpy","socketOpenStub","usingFakeTimers","webex","fakeTestMessage","id","data","eventType","timestamp","_now","trackingId","concat","statusStartTypingMessage","actor","conversationId","sessionId","emitAuthResponse","_ref","undefined","_ref$statusCode","statusCode","_ref$statusMessage","statusMessage","sendSpy","send","lastCall","authRequest","JSON","parse","args","emit","_stringify","type","subtype","MESSAGE_TYPES","AUTH","beforeEach","jest","useFakeTimers","doNotFake","afterEach","_asyncToGenerator2","_regenerator","mark","_callee","_t","wrap","_context","prev","next","useRealTimers","_connectPromises","promise","catch","disconnectAll","clear","close","Socket","getWebSocketConstructor","restore","stop","MockWebex","internal","device","registered","metrics","submitClientMetrics","sinon","stub","logger","console","callsFake","_len","Array","_key","_construct2","MockWebSocket","origOpen","prototype","open","_len2","_key2","_apply","process","nextTick","MobiusSocket","mobiusConfig","defaultSessionId","it","firstListener","secondListener","on","off","assert","notCalled","spy","connect","then","called","disconnectPromise","disconnect","code","reason","calledOnce","calledTwice","resolveTest","rejectTest","bufferStateSpy","onlineSpy","_len3","_key3","_wrap2","fn","_this","_len4","sendArgs","_key4","isTrue","connecting","isFalse","connected","lengthOf","readyState","promiseTick","_promise","resolve","reject","events","action","def","description","_reconnect","offlineSpy","permanentSpy","transientSpy","replacedSpy","resetHistory","calledWith","url","fake","processTestEvent","startSpy","stopSpy"],"sources":["mobius-socket-events.test.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {randomUUID} from 'crypto';\nimport sinon from 'sinon';\nimport {assert} from '@webex/test-helper-chai';\nimport MockWebex from '@webex/test-helper-mock-webex';\nimport MockWebSocket from '@webex/test-helper-mock-web-socket';\nimport {wrap} from 'lodash';\nimport MobiusSocket, {config as mobiusConfig, Socket} from './index';\nimport {MESSAGE_TYPES} from './socket/constants';\n\nimport promiseTick from './test/promise-tick';\n\nif (!crypto.randomUUID) {\n Object.defineProperty(crypto, 'randomUUID', {\n value: randomUUID,\n configurable: true,\n });\n}\n\ndescribe('plugin-mobiusSocket', () => {\n const createUuid = () => crypto.randomUUID();\n\n describe('MobiusSocket', () => {\n describe('Events', () => {\n let mobiusSocket;\n let mockWebSocket;\n let originalSendSpy;\n let socketOpenStub;\n let usingFakeTimers;\n let webex;\n\n const fakeTestMessage = {\n id: createUuid(),\n data: {\n eventType: 'fake.test',\n },\n timestamp: Date.now(),\n trackingId: `suffix_${createUuid()}_${Date.now()}`,\n };\n\n const statusStartTypingMessage = {\n id: createUuid(),\n data: {\n eventType: 'status.start_typing',\n actor: {\n id: 'actorId',\n },\n conversationId: createUuid(),\n },\n timestamp: Date.now(),\n trackingId: `suffix_${createUuid()}_${Date.now()}`,\n sessionId: 'mobius-websocket-session',\n };\n\n const emitAuthResponse = ({statusCode = 200, statusMessage = 'OK'} = {}) => {\n const sendSpy = mockWebSocket.send.lastCall ? mockWebSocket.send : originalSendSpy;\n const authRequest = JSON.parse(sendSpy.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: MESSAGE_TYPES.AUTH,\n trackingId: authRequest.trackingId,\n statusCode,\n statusMessage,\n }),\n });\n };\n\n beforeEach(() => {\n jest.useFakeTimers({doNotFake: ['nextTick']});\n usingFakeTimers = true;\n });\n\n afterEach(async () => {\n if (usingFakeTimers) {\n jest.useRealTimers();\n usingFakeTimers = false;\n }\n if (mobiusSocket) {\n if (mobiusSocket._connectPromises) {\n mobiusSocket._connectPromises.forEach((promise) => {\n promise.catch(() => {});\n });\n }\n try {\n await mobiusSocket.disconnectAll();\n } catch (e) {\n // Ignore cleanup errors in tests.\n }\n if (mobiusSocket._connectPromises) {\n mobiusSocket._connectPromises.clear();\n }\n }\n if (mockWebSocket && typeof mockWebSocket.close === 'function') {\n try {\n mockWebSocket.close();\n } catch (e) {\n // Ignore cleanup errors in tests.\n }\n }\n // Restore stubs\n if (Socket.getWebSocketConstructor.restore) {\n Socket.getWebSocketConstructor.restore();\n }\n if (socketOpenStub && socketOpenStub.restore) {\n socketOpenStub.restore();\n }\n });\n\n beforeEach(() => {\n webex = new MockWebex();\n\n webex.internal.device.registered = true;\n webex.internal.metrics.submitClientMetrics = sinon.stub();\n webex.trackingId = 'fakeTrackingId';\n\n webex.logger = console;\n\n sinon.stub(Socket, 'getWebSocketConstructor').callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n originalSendSpy = mockWebSocket.send;\n\n return mockWebSocket;\n }\n );\n\n const origOpen = Socket.prototype.open;\n\n socketOpenStub = sinon.stub(Socket.prototype, 'open').callsFake(function (...args) {\n const promise = Reflect.apply(origOpen, this, args);\n\n process.nextTick(() => {\n mockWebSocket.open();\n // Simulate Mobius auth response after socket open\n process.nextTick(() => {\n emitAuthResponse();\n });\n });\n\n return promise;\n });\n\n mobiusSocket = new MobiusSocket(webex, {...mobiusConfig.mobiusSocket});\n mobiusSocket.defaultSessionId = 'mobius-websocket-session';\n });\n\n it('removes all listeners for an event when off() is called without a listener', () => {\n const firstListener = sinon.stub();\n const secondListener = sinon.stub();\n\n mobiusSocket.on('event:fake.test', firstListener);\n mobiusSocket.on('event:fake.test', secondListener);\n\n mobiusSocket.off('event:fake.test');\n mobiusSocket.emit('event:fake.test', fakeTestMessage);\n\n assert.notCalled(firstListener);\n assert.notCalled(secondListener);\n });\n\n afterEach(() => {\n if (socketOpenStub) {\n socketOpenStub.restore();\n }\n\n if (Socket.getWebSocketConstructor.restore) {\n Socket.getWebSocketConstructor.restore();\n }\n });\n\n describe('when connected', () => {\n it('emits the `online` event', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('online', spy);\n const promise = mobiusSocket.connect();\n\n return promise.then(() => assert.called(spy));\n });\n });\n\n describe('when disconnected', () => {\n it('emits the `offline` event', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('offline', spy);\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n const disconnectPromise = mobiusSocket.disconnect();\n\n mockWebSocket.emit('close', {\n code: 1000,\n reason: 'Done',\n });\n\n return disconnectPromise;\n })\n .then(() => assert.calledOnce(spy));\n });\n\n describe('when reconnected', () => {\n it('emits the `online` event', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('online', spy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => assert.calledOnce(spy))\n .then(() => mockWebSocket.emit('close', {code: 1000, reason: 'Idle'}))\n .then(() => mobiusSocket.connect())\n .then(() => assert.calledTwice(spy));\n });\n });\n });\n\n describe('when `mercury.buffer_state` is received', () => {\n // This test is here because the buffer states message may arrive before\n // the mobiusSocket Promise resolves.\n it('gets emitted', () => {\n let sendSpy;\n let resolveTest;\n let rejectTest;\n const bufferStateSpy = sinon.spy();\n const onlineSpy = sinon.spy();\n\n mobiusSocket.on('event:mercury.buffer_state', bufferStateSpy);\n mobiusSocket.on('online', onlineSpy);\n\n Socket.getWebSocketConstructor.callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n sendSpy = mockWebSocket.send;\n mockWebSocket.send = wrap(mockWebSocket.send, function (fn, ...sendArgs) {\n process.nextTick(() => {\n Reflect.apply(fn, this, sendArgs);\n });\n });\n\n process.nextTick(() => {\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is still connecting');\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket has not yet connected');\n assert.notCalled(onlineSpy);\n assert.lengthOf(sendSpy.args, 0, 'The client has not yet sent the auth message');\n // set websocket readystate to 1 to allow a successful send message\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n id: createUuid(),\n data: {\n eventType: 'mercury.buffer_state',\n },\n }),\n });\n // using lengthOf because notCalled doesn't allow the helpful\n // string assertion\n assert.lengthOf(\n sendSpy.args,\n 0,\n 'The client has not acked the buffer_state message'\n );\n\n promiseTick(1)\n .then(() => {\n assert.calledOnce(bufferStateSpy);\n resolveTest();\n })\n .catch(rejectTest);\n });\n\n return mockWebSocket;\n }\n );\n\n return new Promise((resolve, reject) => {\n resolveTest = resolve;\n rejectTest = reject;\n mobiusSocket.connect().catch(() => {});\n });\n });\n });\n\n describe('when a CloseEvent is received', () => {\n const events = [\n {\n code: 1000,\n reason: 'idle',\n action: 'reconnect',\n },\n {\n code: 1000,\n reason: 'done (forced)',\n action: 'reconnect',\n },\n {\n code: 1000,\n reason: 'pong not received',\n action: 'close',\n },\n {\n code: 1000,\n reason: 'pong mismatch',\n action: 'close',\n },\n {\n code: 1000,\n action: 'close',\n },\n {\n code: 1003,\n action: 'close',\n },\n {\n code: 1001,\n action: 'reconnect',\n },\n {\n code: 1005,\n action: 'reconnect',\n },\n {\n code: 1006,\n action: 'reconnect',\n },\n {\n code: 1011,\n action: 'reconnect',\n },\n {\n code: 4000,\n action: 'replace',\n },\n {\n action: 'close',\n },\n ];\n\n events.forEach((def) => {\n const {action, reason, code} = def;\n let description;\n\n if (code && reason) {\n description = `with code \\`${code}\\` and reason \\`${reason}\\``;\n } else if (code) {\n description = `with code \\`${code}\\``;\n } else if (reason) {\n description = `with reason \\`${reason}\\``;\n }\n\n describe(`when an event ${description} is received`, () => {\n it(`takes the ${action} action`, () => {\n if (mobiusSocket._reconnect.restore) {\n mobiusSocket._reconnect.restore();\n }\n\n sinon.spy(mobiusSocket, 'connect');\n\n const offlineSpy = sinon.spy();\n const permanentSpy = sinon.spy();\n const transientSpy = sinon.spy();\n const replacedSpy = sinon.spy();\n\n mobiusSocket.on('offline', offlineSpy);\n mobiusSocket.on('offline.permanent', permanentSpy);\n mobiusSocket.on('offline.transient', transientSpy);\n mobiusSocket.on('offline.replaced', replacedSpy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n // Make sure mobiusSocket.connect has a call count of zero\n mobiusSocket.connect.resetHistory();\n\n mockWebSocket.emit('close', {code, reason});\n\n return promiseTick(1);\n })\n .then(() => {\n assert.called(offlineSpy);\n assert.calledWith(offlineSpy, {\n code,\n reason,\n sessionId: 'mobius-websocket-session',\n });\n switch (action) {\n case 'close':\n assert.called(permanentSpy);\n assert.notCalled(transientSpy);\n assert.notCalled(replacedSpy);\n break;\n case 'reconnect':\n assert.notCalled(permanentSpy);\n assert.called(transientSpy);\n assert.notCalled(replacedSpy);\n break;\n case 'replace':\n assert.notCalled(permanentSpy);\n assert.notCalled(transientSpy);\n assert.called(replacedSpy);\n break;\n default:\n assert(false, 'unreachable code reached');\n }\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n if (action === 'reconnect') {\n assert.called(mobiusSocket.connect);\n assert.calledWith(mobiusSocket.connect, mockWebSocket.url);\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n\n // Block until reconnect completes so logs don't overlap\n return mobiusSocket.connect();\n }\n\n assert.notCalled(mobiusSocket.connect);\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n\n return Promise.resolve();\n });\n });\n });\n });\n });\n\n describe('when a MessageEvent is received', () => {\n it('processes the Event via any autowired event handlers', () => {\n webex.fake = {\n processTestEvent: sinon.spy(),\n };\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n mockWebSocket.emit('message', {data: JSON.stringify(fakeTestMessage)});\n\n return promiseTick(1);\n })\n .then(() => {\n assert.called(webex.fake.processTestEvent);\n });\n });\n\n it('emits the MobiusSocket envelope', () => {\n const startSpy = sinon.spy();\n const stopSpy = sinon.spy();\n\n mobiusSocket.on('event:status.start_typing', startSpy);\n mobiusSocket.on('event:status.stop_typing', stopSpy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n mockWebSocket.emit('message', {data: JSON.stringify(statusStartTypingMessage)});\n\n return promiseTick(1);\n })\n .then(() => {\n assert.calledOnce(startSpy);\n assert.notCalled(stopSpy);\n assert.calledWith(startSpy, statusStartTypingMessage);\n });\n });\n\n it(\"emits the MobiusSocket envelope named by the MobiusSocket event's eventType\", () => {\n const startSpy = sinon.spy();\n const stopSpy = sinon.spy();\n\n mobiusSocket.on('event:status.start_typing', startSpy);\n mobiusSocket.on('event:status.stop_typing', stopSpy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n mockWebSocket.emit('message', {data: JSON.stringify(statusStartTypingMessage)});\n\n return promiseTick(1);\n })\n .then(() => {\n assert.calledOnce(startSpy);\n assert.notCalled(stopSpy);\n assert.calledWith(startSpy, statusStartTypingMessage);\n });\n });\n });\n\n // Mobius does not use sequence numbers, so sequence-mismatch tests are not applicable\n });\n });\n\n /*\n // On mobiusSocket:\n online\n offline\n offline.transient\n offline.permanent\n offline.replaced\n event\n event:locus.participant_joined\n mockWebSocket.connection-failed\n mockWebSocket.sequence-mismatch\n\n // On webex:\n mobiusSocket.online\n mobiusSocket.offline\n mobiusSocket.offline.transient\n mobiusSocket.offline.permanent\n mobiusSocket.offline.replaced\n mobiusSocket.event\n mobiusSocket.event:locus.participant_joined\n mobiusSocket.mockWebSocket.connection-failed\n mobiusSocket.mockWebSocket.sequence-mismatch\n\n // TODO go through all it(`emits...`) and make sure corresponding tests are here\n */\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_crypto","require","_sinon","_interopRequireDefault","_testHelperChai","_testHelperMockWebex","_testHelperMockWebSocket","_index","_config","_socket","_constants","_promiseTick","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty3","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty2","crypto","randomUUID","_defineProperty2","value","configurable","describe","createUuid","mobiusSocket","mockWebSocket","originalSendSpy","socketOpenStub","usingFakeTimers","webex","fakeTestMessage","id","data","eventType","timestamp","_now","trackingId","concat","statusStartTypingMessage","actor","conversationId","emitAuthResponse","_ref","undefined","_ref$statusCode","statusCode","_ref$statusMessage","statusMessage","sendSpy","send","lastCall","authRequest","JSON","parse","args","emit","_stringify","type","subtype","MESSAGE_TYPES","AUTH","beforeEach","jest","useFakeTimers","doNotFake","afterEach","_asyncToGenerator2","_regenerator","mark","_callee","_t","wrap","_context","prev","next","useRealTimers","disconnect","close","Socket","getWebSocketConstructor","restore","stop","MockWebex","internal","device","registered","metrics","submitClientMetrics","sinon","stub","logger","console","callsFake","_len","Array","_key","_construct2","MockWebSocket","origOpen","prototype","open","_len2","_key2","promise","_apply","process","nextTick","MobiusSocket","mobiusConfig","it","firstListener","secondListener","on","off","assert","notCalled","spy","connect","then","called","disconnectPromise","code","reason","calledOnce","calledTwice","resolveTest","rejectTest","bufferStateSpy","onlineSpy","_len3","_key3","_wrap2","fn","_this","_len4","sendArgs","_key4","isTrue","connecting","isFalse","connected","lengthOf","readyState","promiseTick","catch","_promise","resolve","reject","events","action","def","description","reconnect","offlineSpy","permanentSpy","transientSpy","replacedSpy","resetHistory","calledWith","url","startSpy","stopSpy"],"sources":["mobius-socket-events.test.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {randomUUID} from 'crypto';\nimport sinon from 'sinon';\nimport {assert} from '@webex/test-helper-chai';\nimport MockWebex from '@webex/test-helper-mock-webex';\nimport MockWebSocket from '@webex/test-helper-mock-web-socket';\nimport {wrap} from 'lodash';\nimport MobiusSocket from './index';\nimport mobiusConfig from './config';\nimport Socket from './socket';\nimport {MESSAGE_TYPES} from './socket/constants';\n\nimport promiseTick from './test/promise-tick';\n\nif (!crypto.randomUUID) {\n Object.defineProperty(crypto, 'randomUUID', {\n value: randomUUID,\n configurable: true,\n });\n}\n\ndescribe('plugin-mobiusSocket', () => {\n const createUuid = () => crypto.randomUUID();\n\n describe('MobiusSocket', () => {\n describe('Events', () => {\n let mobiusSocket;\n let mockWebSocket;\n let originalSendSpy;\n let socketOpenStub;\n let usingFakeTimers;\n let webex;\n\n const fakeTestMessage = {\n id: createUuid(),\n data: {\n eventType: 'fake.test',\n },\n timestamp: Date.now(),\n trackingId: `suffix_${createUuid()}_${Date.now()}`,\n };\n\n const statusStartTypingMessage = {\n id: createUuid(),\n data: {\n eventType: 'status.start_typing',\n actor: {\n id: 'actorId',\n },\n conversationId: createUuid(),\n },\n timestamp: Date.now(),\n trackingId: `suffix_${createUuid()}_${Date.now()}`,\n };\n\n const emitAuthResponse = ({statusCode = 200, statusMessage = 'OK'} = {}) => {\n const sendSpy = mockWebSocket.send.lastCall ? mockWebSocket.send : originalSendSpy;\n const authRequest = JSON.parse(sendSpy.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: MESSAGE_TYPES.AUTH,\n trackingId: authRequest.trackingId,\n statusCode,\n statusMessage,\n }),\n });\n };\n\n beforeEach(() => {\n jest.useFakeTimers({doNotFake: ['nextTick']});\n usingFakeTimers = true;\n });\n\n afterEach(async () => {\n if (usingFakeTimers) {\n jest.useRealTimers();\n usingFakeTimers = false;\n }\n if (mobiusSocket) {\n try {\n await mobiusSocket.disconnect();\n } catch (e) {\n // Ignore cleanup errors in tests.\n }\n }\n if (mockWebSocket && typeof mockWebSocket.close === 'function') {\n try {\n mockWebSocket.close();\n } catch (e) {\n // Ignore cleanup errors in tests.\n }\n }\n // Restore stubs\n if (Socket.getWebSocketConstructor.restore) {\n Socket.getWebSocketConstructor.restore();\n }\n if (socketOpenStub && socketOpenStub.restore) {\n socketOpenStub.restore();\n }\n });\n\n beforeEach(() => {\n webex = new MockWebex();\n\n webex.internal.device.registered = true;\n webex.internal.metrics.submitClientMetrics = sinon.stub();\n webex.trackingId = 'fakeTrackingId';\n\n webex.logger = console;\n\n sinon.stub(Socket, 'getWebSocketConstructor').callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n originalSendSpy = mockWebSocket.send;\n\n return mockWebSocket;\n }\n );\n\n const origOpen = Socket.prototype.open;\n\n socketOpenStub = sinon.stub(Socket.prototype, 'open').callsFake(function (...args) {\n const promise = Reflect.apply(origOpen, this, args);\n\n process.nextTick(() => {\n mockWebSocket.open();\n // Simulate Mobius auth response after socket open\n process.nextTick(() => {\n emitAuthResponse();\n });\n });\n\n return promise;\n });\n\n mobiusSocket = new MobiusSocket(webex, {...mobiusConfig.mobiusSocket});\n });\n\n it('removes all listeners for an event when off() is called without a listener', () => {\n const firstListener = sinon.stub();\n const secondListener = sinon.stub();\n\n mobiusSocket.on('event:fake.test', firstListener);\n mobiusSocket.on('event:fake.test', secondListener);\n\n mobiusSocket.off('event:fake.test');\n mobiusSocket.emit('event:fake.test', fakeTestMessage);\n\n assert.notCalled(firstListener);\n assert.notCalled(secondListener);\n });\n\n afterEach(() => {\n if (socketOpenStub) {\n socketOpenStub.restore();\n }\n\n if (Socket.getWebSocketConstructor.restore) {\n Socket.getWebSocketConstructor.restore();\n }\n });\n\n describe('when connected', () => {\n it('emits the `online` event', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('online', spy);\n const promise = mobiusSocket.connect();\n\n return promise.then(() => assert.called(spy));\n });\n });\n\n describe('when disconnected', () => {\n it('emits the `offline` event', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('offline', spy);\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n const disconnectPromise = mobiusSocket.disconnect();\n\n mockWebSocket.emit('close', {\n code: 1000,\n reason: 'Done',\n });\n\n return disconnectPromise;\n })\n .then(() => assert.calledOnce(spy));\n });\n\n describe('when reconnected', () => {\n it('emits the `online` event', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('online', spy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => assert.calledOnce(spy))\n .then(() => mockWebSocket.emit('close', {code: 1000, reason: 'Idle'}))\n .then(() => mobiusSocket.connect())\n .then(() => assert.calledTwice(spy));\n });\n });\n });\n\n describe('when `mercury.buffer_state` is received', () => {\n // This test is here because the buffer states message may arrive before\n // the mobiusSocket Promise resolves.\n it('gets emitted', () => {\n let sendSpy;\n let resolveTest;\n let rejectTest;\n const bufferStateSpy = sinon.spy();\n const onlineSpy = sinon.spy();\n\n mobiusSocket.on('event:mercury.buffer_state', bufferStateSpy);\n mobiusSocket.on('online', onlineSpy);\n\n Socket.getWebSocketConstructor.callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n sendSpy = mockWebSocket.send;\n mockWebSocket.send = wrap(mockWebSocket.send, function (fn, ...sendArgs) {\n process.nextTick(() => {\n Reflect.apply(fn, this, sendArgs);\n });\n });\n\n process.nextTick(() => {\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is still connecting');\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket has not yet connected');\n assert.notCalled(onlineSpy);\n assert.lengthOf(sendSpy.args, 0, 'The client has not yet sent the auth message');\n // set websocket readystate to 1 to allow a successful send message\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n id: createUuid(),\n data: {\n eventType: 'mercury.buffer_state',\n },\n }),\n });\n // using lengthOf because notCalled doesn't allow the helpful\n // string assertion\n assert.lengthOf(\n sendSpy.args,\n 0,\n 'The client has not acked the buffer_state message'\n );\n\n promiseTick(1)\n .then(() => {\n assert.called(bufferStateSpy);\n resolveTest();\n })\n .catch(rejectTest);\n });\n\n return mockWebSocket;\n }\n );\n\n return new Promise((resolve, reject) => {\n resolveTest = resolve;\n rejectTest = reject;\n mobiusSocket.connect().catch(() => {});\n });\n });\n });\n\n describe('when a CloseEvent is received', () => {\n const events = [\n {\n code: 1000,\n reason: 'idle',\n action: 'reconnect',\n },\n {\n code: 1000,\n reason: 'done (forced)',\n action: 'reconnect',\n },\n {\n code: 1000,\n reason: 'pong not received',\n action: 'close',\n },\n {\n code: 1000,\n reason: 'pong mismatch',\n action: 'close',\n },\n {\n code: 1000,\n action: 'close',\n },\n {\n code: 1003,\n action: 'close',\n },\n {\n code: 1001,\n action: 'reconnect',\n },\n {\n code: 1005,\n action: 'reconnect',\n },\n {\n code: 1006,\n action: 'reconnect',\n },\n {\n code: 1011,\n action: 'reconnect',\n },\n {\n code: 4000,\n action: 'replace',\n },\n {\n action: 'close',\n },\n ];\n\n events.forEach((def) => {\n const {action, reason, code} = def;\n let description;\n\n if (code && reason) {\n description = `with code \\`${code}\\` and reason \\`${reason}\\``;\n } else if (code) {\n description = `with code \\`${code}\\``;\n } else if (reason) {\n description = `with reason \\`${reason}\\``;\n }\n\n describe(`when an event ${description} is received`, () => {\n it(`takes the ${action} action`, () => {\n if (mobiusSocket.reconnect.restore) {\n mobiusSocket.reconnect.restore();\n }\n\n sinon.spy(mobiusSocket, 'connect');\n\n const offlineSpy = sinon.spy();\n const permanentSpy = sinon.spy();\n const transientSpy = sinon.spy();\n const replacedSpy = sinon.spy();\n\n mobiusSocket.on('offline', offlineSpy);\n mobiusSocket.on('offline.permanent', permanentSpy);\n mobiusSocket.on('offline.transient', transientSpy);\n mobiusSocket.on('offline.replaced', replacedSpy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n // Make sure mobiusSocket.connect has a call count of zero\n mobiusSocket.connect.resetHistory();\n\n mockWebSocket.emit('close', {code, reason});\n\n return promiseTick(1);\n })\n .then(() => {\n assert.called(offlineSpy);\n assert.calledWith(offlineSpy, {\n code,\n reason,\n });\n switch (action) {\n case 'close':\n assert.called(permanentSpy);\n assert.notCalled(transientSpy);\n assert.notCalled(replacedSpy);\n break;\n case 'reconnect':\n assert.notCalled(permanentSpy);\n assert.called(transientSpy);\n assert.notCalled(replacedSpy);\n break;\n case 'replace':\n assert.notCalled(permanentSpy);\n assert.notCalled(transientSpy);\n assert.called(replacedSpy);\n break;\n default:\n assert(false, 'unreachable code reached');\n }\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n if (action === 'reconnect') {\n assert.called(mobiusSocket.connect);\n assert.calledWith(mobiusSocket.connect, mockWebSocket.url);\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n\n // Block until reconnect completes so logs don't overlap\n return mobiusSocket.connect();\n }\n\n assert.notCalled(mobiusSocket.connect);\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n\n return Promise.resolve();\n });\n });\n });\n });\n });\n\n describe('when a MessageEvent is received', () => {\n it('emits the MobiusSocket envelope', () => {\n const startSpy = sinon.spy();\n const stopSpy = sinon.spy();\n\n mobiusSocket.on('event:status.start_typing', startSpy);\n mobiusSocket.on('event:status.stop_typing', stopSpy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n mockWebSocket.emit('message', {data: JSON.stringify(statusStartTypingMessage)});\n\n return promiseTick(1);\n })\n .then(() => {\n assert.calledOnce(startSpy);\n assert.notCalled(stopSpy);\n assert.calledWith(startSpy, statusStartTypingMessage);\n });\n });\n\n it(\"emits the MobiusSocket envelope named by the MobiusSocket event's eventType\", () => {\n const startSpy = sinon.spy();\n const stopSpy = sinon.spy();\n\n mobiusSocket.on('event:status.start_typing', startSpy);\n mobiusSocket.on('event:status.stop_typing', stopSpy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n mockWebSocket.emit('message', {data: JSON.stringify(statusStartTypingMessage)});\n\n return promiseTick(1);\n })\n .then(() => {\n assert.calledOnce(startSpy);\n assert.notCalled(stopSpy);\n assert.calledWith(startSpy, statusStartTypingMessage);\n });\n });\n });\n\n // Mobius does not use sequence numbers, so sequence-mismatch tests are not applicable\n });\n });\n\n /*\n // On mobiusSocket:\n online\n offline\n offline.transient\n offline.permanent\n offline.replaced\n event\n event:locus.participant_joined\n mockWebSocket.connection-failed\n mockWebSocket.sequence-mismatch\n\n // On webex:\n mobiusSocket.online\n mobiusSocket.offline\n mobiusSocket.offline.transient\n mobiusSocket.offline.permanent\n mobiusSocket.offline.replaced\n mobiusSocket.event\n mobiusSocket.event:locus.participant_joined\n mobiusSocket.mockWebSocket.connection-failed\n mobiusSocket.mockWebSocket.sequence-mismatch\n\n // TODO go through all it(`emits...`) and make sure corresponding tests are here\n */\n});\n"],"mappings":"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","ignoreList":[]}
|