@webex/calling 3.12.0-next.4 → 3.12.0-next.41

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.
Files changed (204) hide show
  1. package/dist/CallingClient/CallingClient.js +463 -205
  2. package/dist/CallingClient/CallingClient.js.map +1 -1
  3. package/dist/CallingClient/CallingClient.test.js +170 -77
  4. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  5. package/dist/CallingClient/calling/call.js +589 -445
  6. package/dist/CallingClient/calling/call.js.map +1 -1
  7. package/dist/CallingClient/calling/call.test.js +695 -445
  8. package/dist/CallingClient/calling/call.test.js.map +1 -1
  9. package/dist/CallingClient/calling/callManager.js +53 -30
  10. package/dist/CallingClient/calling/callManager.js.map +1 -1
  11. package/dist/CallingClient/calling/callManager.test.js +35 -0
  12. package/dist/CallingClient/calling/callManager.test.js.map +1 -1
  13. package/dist/CallingClient/calling/types.js +2 -0
  14. package/dist/CallingClient/calling/types.js.map +1 -1
  15. package/dist/CallingClient/constants.js +25 -3
  16. package/dist/CallingClient/constants.js.map +1 -1
  17. package/dist/CallingClient/line/index.js +4 -1
  18. package/dist/CallingClient/line/index.js.map +1 -1
  19. package/dist/CallingClient/line/line.test.js +16 -1
  20. package/dist/CallingClient/line/line.test.js.map +1 -1
  21. package/dist/CallingClient/registration/register.js +712 -406
  22. package/dist/CallingClient/registration/register.js.map +1 -1
  23. package/dist/CallingClient/registration/register.test.js +202 -21
  24. package/dist/CallingClient/registration/register.test.js.map +1 -1
  25. package/dist/CallingClient/registration/types.js.map +1 -1
  26. package/dist/CallingClient/registration/webWorker.js +41 -104
  27. package/dist/CallingClient/registration/webWorker.js.map +1 -1
  28. package/dist/CallingClient/registration/webWorker.test.js +39 -153
  29. package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
  30. package/dist/CallingClient/registration/webWorkerStr.js +1 -1
  31. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
  32. package/dist/CallingClient/utils/constants.js +46 -0
  33. package/dist/CallingClient/utils/constants.js.map +1 -0
  34. package/dist/CallingClient/utils/index.js +63 -0
  35. package/dist/CallingClient/utils/index.js.map +1 -0
  36. package/dist/CallingClient/utils/mobiusSocketMapper.js +122 -0
  37. package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -0
  38. package/dist/CallingClient/utils/mobiusSocketMapper.test.js +211 -0
  39. package/dist/CallingClient/utils/mobiusSocketMapper.test.js.map +1 -0
  40. package/dist/CallingClient/utils/request.js +354 -0
  41. package/dist/CallingClient/utils/request.js.map +1 -0
  42. package/dist/CallingClient/utils/request.test.js +881 -0
  43. package/dist/CallingClient/utils/request.test.js.map +1 -0
  44. package/dist/CallingClient/utils/types.js +7 -0
  45. package/dist/CallingClient/utils/types.js.map +1 -0
  46. package/dist/CallingClient/utils/wsFeatureFlag.js +70 -0
  47. package/dist/CallingClient/utils/wsFeatureFlag.js.map +1 -0
  48. package/dist/CallingClient/utils/wsFeatureFlag.test.js +139 -0
  49. package/dist/CallingClient/utils/wsFeatureFlag.test.js.map +1 -0
  50. package/dist/Contacts/ContactsClient.js +13 -11
  51. package/dist/Contacts/ContactsClient.js.map +1 -1
  52. package/dist/Contacts/ContactsClient.test.js +3 -8
  53. package/dist/Contacts/ContactsClient.test.js.map +1 -1
  54. package/dist/Events/types.js +1 -11
  55. package/dist/Events/types.js.map +1 -1
  56. package/dist/Metrics/index.js +63 -2
  57. package/dist/Metrics/index.js.map +1 -1
  58. package/dist/Metrics/index.test.js +357 -1
  59. package/dist/Metrics/index.test.js.map +1 -1
  60. package/dist/Metrics/types.js +19 -1
  61. package/dist/Metrics/types.js.map +1 -1
  62. package/dist/SDKConnector/types.js.map +1 -1
  63. package/dist/common/Utils.js +138 -44
  64. package/dist/common/Utils.js.map +1 -1
  65. package/dist/common/testUtil.js +8 -4
  66. package/dist/common/testUtil.js.map +1 -1
  67. package/dist/common/types.js +2 -0
  68. package/dist/common/types.js.map +1 -1
  69. package/dist/mobius-socket/config.js +24 -0
  70. package/dist/mobius-socket/config.js.map +1 -0
  71. package/dist/mobius-socket/errors.js +143 -0
  72. package/dist/mobius-socket/errors.js.map +1 -0
  73. package/dist/mobius-socket/errors.test.js +20 -0
  74. package/dist/mobius-socket/errors.test.js.map +1 -0
  75. package/dist/mobius-socket/index.js +57 -0
  76. package/dist/mobius-socket/index.js.map +1 -0
  77. package/dist/mobius-socket/mobius-socket-events.test.js +492 -0
  78. package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -0
  79. package/dist/mobius-socket/mobius-socket.js +841 -0
  80. package/dist/mobius-socket/mobius-socket.js.map +1 -0
  81. package/dist/mobius-socket/mobius-socket.test.js +1845 -0
  82. package/dist/mobius-socket/mobius-socket.test.js.map +1 -0
  83. package/dist/mobius-socket/socket/constants.js +55 -0
  84. package/dist/mobius-socket/socket/constants.js.map +1 -0
  85. package/dist/mobius-socket/socket/index.js +15 -0
  86. package/dist/mobius-socket/socket/index.js.map +1 -0
  87. package/dist/mobius-socket/socket/socket-base.js +604 -0
  88. package/dist/mobius-socket/socket/socket-base.js.map +1 -0
  89. package/dist/mobius-socket/socket/socket.js +19 -0
  90. package/dist/mobius-socket/socket/socket.js.map +1 -0
  91. package/dist/mobius-socket/socket/socket.shim.js +26 -0
  92. package/dist/mobius-socket/socket/socket.shim.js.map +1 -0
  93. package/dist/mobius-socket/socket/types.js +7 -0
  94. package/dist/mobius-socket/socket/types.js.map +1 -0
  95. package/dist/mobius-socket/socket.test.js +727 -0
  96. package/dist/mobius-socket/socket.test.js.map +1 -0
  97. package/dist/mobius-socket/test/mocha-helpers.js +23 -0
  98. package/dist/mobius-socket/test/mocha-helpers.js.map +1 -0
  99. package/dist/mobius-socket/test/promise-tick.js +28 -0
  100. package/dist/mobius-socket/test/promise-tick.js.map +1 -0
  101. package/dist/mobius-socket/types.js +7 -0
  102. package/dist/mobius-socket/types.js.map +1 -0
  103. package/dist/module/CallingClient/CallingClient.js +141 -10
  104. package/dist/module/CallingClient/calling/call.js +177 -61
  105. package/dist/module/CallingClient/calling/callManager.js +27 -7
  106. package/dist/module/CallingClient/calling/types.js +2 -0
  107. package/dist/module/CallingClient/constants.js +21 -0
  108. package/dist/module/CallingClient/line/index.js +2 -2
  109. package/dist/module/CallingClient/registration/register.js +234 -62
  110. package/dist/module/CallingClient/registration/webWorker.js +42 -61
  111. package/dist/module/CallingClient/registration/webWorkerStr.js +47 -82
  112. package/dist/module/CallingClient/utils/constants.js +30 -0
  113. package/dist/module/CallingClient/utils/index.js +5 -0
  114. package/dist/module/CallingClient/utils/mobiusSocketMapper.js +72 -0
  115. package/dist/module/CallingClient/utils/request.js +165 -0
  116. package/dist/module/CallingClient/utils/types.js +1 -0
  117. package/dist/module/CallingClient/utils/wsFeatureFlag.js +41 -0
  118. package/dist/module/Contacts/ContactsClient.js +1 -1
  119. package/dist/module/Events/types.js +0 -10
  120. package/dist/module/Metrics/index.js +48 -1
  121. package/dist/module/Metrics/types.js +18 -0
  122. package/dist/module/common/Utils.js +52 -12
  123. package/dist/module/common/testUtil.js +5 -1
  124. package/dist/module/common/types.js +2 -0
  125. package/dist/module/mobius-socket/config.js +15 -0
  126. package/dist/module/mobius-socket/errors.js +58 -0
  127. package/dist/module/mobius-socket/index.js +24 -0
  128. package/dist/module/mobius-socket/mobius-socket.js +589 -0
  129. package/dist/module/mobius-socket/socket/constants.js +26 -0
  130. package/dist/module/mobius-socket/socket/index.js +4 -0
  131. package/dist/module/mobius-socket/socket/socket-base.js +368 -0
  132. package/dist/module/mobius-socket/socket/socket.js +9 -0
  133. package/dist/module/mobius-socket/socket/socket.shim.js +12 -0
  134. package/dist/module/mobius-socket/socket/types.js +1 -0
  135. package/dist/module/mobius-socket/types.js +1 -0
  136. package/dist/types/CallingClient/CallingClient.d.ts +7 -0
  137. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  138. package/dist/types/CallingClient/calling/call.d.ts +12 -0
  139. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  140. package/dist/types/CallingClient/calling/callManager.d.ts +3 -2
  141. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  142. package/dist/types/CallingClient/calling/types.d.ts +34 -9
  143. package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
  144. package/dist/types/CallingClient/constants.d.ts +21 -0
  145. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  146. package/dist/types/CallingClient/line/index.d.ts +1 -1
  147. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  148. package/dist/types/CallingClient/registration/register.d.ts +7 -1
  149. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  150. package/dist/types/CallingClient/registration/types.d.ts +4 -2
  151. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  152. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
  153. package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
  154. package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
  155. package/dist/types/CallingClient/utils/constants.d.ts +30 -0
  156. package/dist/types/CallingClient/utils/constants.d.ts.map +1 -0
  157. package/dist/types/CallingClient/utils/index.d.ts +6 -0
  158. package/dist/types/CallingClient/utils/index.d.ts.map +1 -0
  159. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +5 -0
  160. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -0
  161. package/dist/types/CallingClient/utils/request.d.ts +24 -0
  162. package/dist/types/CallingClient/utils/request.d.ts.map +1 -0
  163. package/dist/types/CallingClient/utils/types.d.ts +29 -0
  164. package/dist/types/CallingClient/utils/types.d.ts.map +1 -0
  165. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts +4 -0
  166. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts.map +1 -0
  167. package/dist/types/Events/types.d.ts +4 -11
  168. package/dist/types/Events/types.d.ts.map +1 -1
  169. package/dist/types/Metrics/index.d.ts.map +1 -1
  170. package/dist/types/Metrics/types.d.ts +19 -2
  171. package/dist/types/Metrics/types.d.ts.map +1 -1
  172. package/dist/types/SDKConnector/types.d.ts +24 -0
  173. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  174. package/dist/types/common/Utils.d.ts +9 -2
  175. package/dist/types/common/Utils.d.ts.map +1 -1
  176. package/dist/types/common/testUtil.d.ts +4 -1
  177. package/dist/types/common/testUtil.d.ts.map +1 -1
  178. package/dist/types/common/types.d.ts +3 -0
  179. package/dist/types/common/types.d.ts.map +1 -1
  180. package/dist/types/mobius-socket/config.d.ts +17 -0
  181. package/dist/types/mobius-socket/config.d.ts.map +1 -0
  182. package/dist/types/mobius-socket/errors.d.ts +32 -0
  183. package/dist/types/mobius-socket/errors.d.ts.map +1 -0
  184. package/dist/types/mobius-socket/index.d.ts +14 -0
  185. package/dist/types/mobius-socket/index.d.ts.map +1 -0
  186. package/dist/types/mobius-socket/mobius-socket.d.ts +48 -0
  187. package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -0
  188. package/dist/types/mobius-socket/socket/constants.d.ts +27 -0
  189. package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -0
  190. package/dist/types/mobius-socket/socket/index.d.ts +5 -0
  191. package/dist/types/mobius-socket/socket/index.d.ts.map +1 -0
  192. package/dist/types/mobius-socket/socket/socket-base.d.ts +43 -0
  193. package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -0
  194. package/dist/types/mobius-socket/socket/socket.d.ts +6 -0
  195. package/dist/types/mobius-socket/socket/socket.d.ts.map +1 -0
  196. package/dist/types/mobius-socket/socket/socket.shim.d.ts +6 -0
  197. package/dist/types/mobius-socket/socket/socket.shim.d.ts.map +1 -0
  198. package/dist/types/mobius-socket/socket/types.d.ts +61 -0
  199. package/dist/types/mobius-socket/socket/types.d.ts.map +1 -0
  200. package/dist/types/mobius-socket/types.d.ts +21 -0
  201. package/dist/types/mobius-socket/types.d.ts.map +1 -0
  202. package/package.json +20 -5
  203. package/src/mobius-socket/socket/socket.shim.ts +22 -0
  204. package/src/mobius-socket/socket/socket.ts +14 -0
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
4
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
5
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
6
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
7
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
8
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
9
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
10
+ _Object$defineProperty(exports, "__esModule", {
11
+ value: true
12
+ });
13
+ _Object$defineProperty(exports, "MobiusSocket", {
14
+ enumerable: true,
15
+ get: function get() {
16
+ return _mobiusSocket.default;
17
+ }
18
+ });
19
+ exports.default = void 0;
20
+ exports.getMobiusSocketInstance = getMobiusSocketInstance;
21
+ exports.resetMobiusSocketInstance = resetMobiusSocketInstance;
22
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
23
+ require("@webex/internal-plugin-device");
24
+ require("@webex/internal-plugin-feature");
25
+ require("@webex/internal-plugin-metrics");
26
+ var _mobiusSocket = _interopRequireDefault(require("./mobius-socket"));
27
+ var _config = _interopRequireDefault(require("./config"));
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; }
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; } /*!
30
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
31
+ */
32
+ // Singleton instance - keeping just one instance of MobiusSocket since there won't be multiple connections
33
+ var mobiusSocketInstance;
34
+
35
+ /**
36
+ * Creates or returns the singleton Mobius socket client for the provided Webex instance.
37
+ *
38
+ * @param webex - The Webex SDK instance
39
+ * @param mobiusSocketConfig - Optional configuration overrides
40
+ * @returns The singleton MobiusSocket instance
41
+ */
42
+ function getMobiusSocketInstance(webex, mobiusSocketConfig) {
43
+ if (mobiusSocketInstance) {
44
+ return mobiusSocketInstance;
45
+ }
46
+ mobiusSocketInstance = new _mobiusSocket.default(webex, _objectSpread(_objectSpread({}, _config.default.mobiusSocket), mobiusSocketConfig));
47
+ return mobiusSocketInstance;
48
+ }
49
+
50
+ /**
51
+ * Resets the singleton MobiusSocket instance, allowing a new one to be created.
52
+ */
53
+ function resetMobiusSocketInstance() {
54
+ mobiusSocketInstance = undefined;
55
+ }
56
+ var _default = exports.default = _mobiusSocket.default;
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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// Singleton instance - keeping just one instance of MobiusSocket since there won't be multiple connections\nlet mobiusSocketInstance: MobiusSocket | undefined;\n\n/**\n * Creates or returns the singleton Mobius socket client for the provided Webex instance.\n *\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 */\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,IAAIqB,oBAA8C;;AAElD;AACA;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;AACO,SAASO,yBAAyBA,CAAA,EAAG;EAC1CP,oBAAoB,GAAGQ,SAAS;AAClC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAd,OAAA,GAEcQ,qBAAY","ignoreList":[]}
@@ -0,0 +1,492 @@
1
+ "use strict";
2
+
3
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
4
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
5
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
6
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
7
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
8
+ var _Object$defineProperty2 = require("@babel/runtime-corejs2/core-js/object/define-property");
9
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-property"));
12
+ var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
13
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
14
+ var _apply = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/apply"));
15
+ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
16
+ var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
17
+ var _construct2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/construct"));
18
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
19
+ var _wrap2 = _interopRequireDefault(require("lodash/wrap"));
20
+ var _crypto = require("crypto");
21
+ var _sinon = _interopRequireDefault(require("sinon"));
22
+ var _testHelperChai = require("@webex/test-helper-chai");
23
+ var _testHelperMockWebex = _interopRequireDefault(require("@webex/test-helper-mock-webex"));
24
+ var _testHelperMockWebSocket = _interopRequireDefault(require("@webex/test-helper-mock-web-socket"));
25
+ var _index = _interopRequireDefault(require("./index"));
26
+ var _config = _interopRequireDefault(require("./config"));
27
+ var _socket = _interopRequireDefault(require("./socket"));
28
+ var _constants = require("./socket/constants");
29
+ var _promiseTick = _interopRequireDefault(require("./test/promise-tick"));
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; }
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; } /*!
32
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
33
+ */
34
+ if (!crypto.randomUUID) {
35
+ (0, _defineProperty2.default)(crypto, 'randomUUID', {
36
+ value: _crypto.randomUUID,
37
+ configurable: true
38
+ });
39
+ }
40
+ describe('plugin-mobiusSocket', function () {
41
+ var createUuid = function createUuid() {
42
+ return crypto.randomUUID();
43
+ };
44
+ describe('MobiusSocket', function () {
45
+ describe('Events', function () {
46
+ var mobiusSocket;
47
+ var mockWebSocket;
48
+ var originalSendSpy;
49
+ var socketOpenStub;
50
+ var usingFakeTimers;
51
+ var webex;
52
+ var fakeTestMessage = {
53
+ id: createUuid(),
54
+ data: {
55
+ eventType: 'fake.test'
56
+ },
57
+ timestamp: (0, _now.default)(),
58
+ trackingId: "suffix_".concat(createUuid(), "_").concat((0, _now.default)())
59
+ };
60
+ var statusStartTypingMessage = {
61
+ id: createUuid(),
62
+ data: {
63
+ eventType: 'status.start_typing',
64
+ actor: {
65
+ id: 'actorId'
66
+ },
67
+ conversationId: createUuid()
68
+ },
69
+ timestamp: (0, _now.default)(),
70
+ trackingId: "suffix_".concat(createUuid(), "_").concat((0, _now.default)())
71
+ };
72
+ var emitAuthResponse = function emitAuthResponse() {
73
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
74
+ _ref$statusCode = _ref.statusCode,
75
+ statusCode = _ref$statusCode === void 0 ? 200 : _ref$statusCode,
76
+ _ref$statusMessage = _ref.statusMessage,
77
+ statusMessage = _ref$statusMessage === void 0 ? 'OK' : _ref$statusMessage;
78
+ var sendSpy = mockWebSocket.send.lastCall ? mockWebSocket.send : originalSendSpy;
79
+ var authRequest = JSON.parse(sendSpy.lastCall.args[0]);
80
+ mockWebSocket.emit('message', {
81
+ data: (0, _stringify.default)({
82
+ type: 'response_event',
83
+ subtype: _constants.MESSAGE_TYPES.AUTH,
84
+ trackingId: authRequest.trackingId,
85
+ statusCode: statusCode,
86
+ statusMessage: statusMessage
87
+ })
88
+ });
89
+ };
90
+ beforeEach(function () {
91
+ jest.useFakeTimers({
92
+ doNotFake: ['nextTick']
93
+ });
94
+ usingFakeTimers = true;
95
+ });
96
+ afterEach(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
97
+ var _t;
98
+ return _regenerator.default.wrap(function (_context) {
99
+ while (1) switch (_context.prev = _context.next) {
100
+ case 0:
101
+ if (usingFakeTimers) {
102
+ jest.useRealTimers();
103
+ usingFakeTimers = false;
104
+ }
105
+ if (!mobiusSocket) {
106
+ _context.next = 4;
107
+ break;
108
+ }
109
+ _context.prev = 1;
110
+ _context.next = 2;
111
+ return mobiusSocket.disconnect();
112
+ case 2:
113
+ _context.next = 4;
114
+ break;
115
+ case 3:
116
+ _context.prev = 3;
117
+ _t = _context["catch"](1);
118
+ case 4:
119
+ if (mockWebSocket && typeof mockWebSocket.close === 'function') {
120
+ try {
121
+ mockWebSocket.close();
122
+ } catch (e) {
123
+ // Ignore cleanup errors in tests.
124
+ }
125
+ }
126
+ // Restore stubs
127
+ if (_socket.default.getWebSocketConstructor.restore) {
128
+ _socket.default.getWebSocketConstructor.restore();
129
+ }
130
+ if (socketOpenStub && socketOpenStub.restore) {
131
+ socketOpenStub.restore();
132
+ }
133
+ case 5:
134
+ case "end":
135
+ return _context.stop();
136
+ }
137
+ }, _callee, null, [[1, 3]]);
138
+ })));
139
+ beforeEach(function () {
140
+ webex = new _testHelperMockWebex.default();
141
+ webex.internal.device.registered = true;
142
+ webex.internal.metrics.submitClientMetrics = _sinon.default.stub();
143
+ webex.trackingId = 'fakeTrackingId';
144
+ webex.logger = console;
145
+ _sinon.default.stub(_socket.default, 'getWebSocketConstructor').callsFake(function () {
146
+ return function () {
147
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
148
+ args[_key] = arguments[_key];
149
+ }
150
+ mockWebSocket = (0, _construct2.default)(_testHelperMockWebSocket.default, args);
151
+ originalSendSpy = mockWebSocket.send;
152
+ return mockWebSocket;
153
+ };
154
+ });
155
+ var origOpen = _socket.default.prototype.open;
156
+ socketOpenStub = _sinon.default.stub(_socket.default.prototype, 'open').callsFake(function () {
157
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
158
+ args[_key2] = arguments[_key2];
159
+ }
160
+ var promise = (0, _apply.default)(origOpen, this, args);
161
+ process.nextTick(function () {
162
+ mockWebSocket.open();
163
+ // Simulate Mobius auth response after socket open
164
+ process.nextTick(function () {
165
+ emitAuthResponse();
166
+ });
167
+ });
168
+ return promise;
169
+ });
170
+ mobiusSocket = new _index.default(webex, _objectSpread({}, _config.default.mobiusSocket));
171
+ mobiusSocket.logger = {
172
+ debug: jest.fn(),
173
+ error: jest.fn(),
174
+ info: jest.fn(),
175
+ log: jest.fn(),
176
+ warn: jest.fn()
177
+ };
178
+ });
179
+ it('removes all listeners for an event when off() is called without a listener', function () {
180
+ var firstListener = _sinon.default.stub();
181
+ var secondListener = _sinon.default.stub();
182
+ mobiusSocket.on('event:fake.test', firstListener);
183
+ mobiusSocket.on('event:fake.test', secondListener);
184
+ mobiusSocket.off('event:fake.test');
185
+ mobiusSocket.emit('event:fake.test', fakeTestMessage);
186
+ _testHelperChai.assert.notCalled(firstListener);
187
+ _testHelperChai.assert.notCalled(secondListener);
188
+ });
189
+ afterEach(function () {
190
+ if (socketOpenStub) {
191
+ socketOpenStub.restore();
192
+ }
193
+ if (_socket.default.getWebSocketConstructor.restore) {
194
+ _socket.default.getWebSocketConstructor.restore();
195
+ }
196
+ });
197
+ describe('when connected', function () {
198
+ it('emits the `online` event', function () {
199
+ var spy = _sinon.default.spy();
200
+ mobiusSocket.on('online', spy);
201
+ var promise = mobiusSocket.connect();
202
+ return promise.then(function () {
203
+ return _testHelperChai.assert.called(spy);
204
+ });
205
+ });
206
+ });
207
+ describe('when disconnected', function () {
208
+ it('emits the `offline` event', function () {
209
+ var spy = _sinon.default.spy();
210
+ mobiusSocket.on('offline', spy);
211
+ var promise = mobiusSocket.connect();
212
+ mockWebSocket.open();
213
+ return promise.then(function () {
214
+ var disconnectPromise = mobiusSocket.disconnect();
215
+ mockWebSocket.emit('close', {
216
+ code: 1000,
217
+ reason: 'Done'
218
+ });
219
+ return disconnectPromise;
220
+ }).then(function () {
221
+ return _testHelperChai.assert.calledOnce(spy);
222
+ });
223
+ });
224
+ describe('when reconnected', function () {
225
+ it('emits the `online` event', function () {
226
+ var spy = _sinon.default.spy();
227
+ mobiusSocket.on('online', spy);
228
+ var promise = mobiusSocket.connect();
229
+ mockWebSocket.open();
230
+ return promise.then(function () {
231
+ return _testHelperChai.assert.calledOnce(spy);
232
+ }).then(function () {
233
+ return mockWebSocket.emit('close', {
234
+ code: 1000,
235
+ reason: 'Idle'
236
+ });
237
+ }).then(function () {
238
+ return mobiusSocket.connect();
239
+ }).then(function () {
240
+ return _testHelperChai.assert.calledTwice(spy);
241
+ });
242
+ });
243
+ });
244
+ });
245
+ describe('when `mercury.buffer_state` is received', function () {
246
+ // This test is here because the buffer states message may arrive before
247
+ // the mobiusSocket Promise resolves.
248
+ it('gets emitted', function () {
249
+ var sendSpy;
250
+ var resolveTest;
251
+ var rejectTest;
252
+ var bufferStateSpy = _sinon.default.spy();
253
+ var onlineSpy = _sinon.default.spy();
254
+ mobiusSocket.on('event:mercury.buffer_state', bufferStateSpy);
255
+ mobiusSocket.on('online', onlineSpy);
256
+ _socket.default.getWebSocketConstructor.callsFake(function () {
257
+ return function () {
258
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
259
+ args[_key3] = arguments[_key3];
260
+ }
261
+ mockWebSocket = (0, _construct2.default)(_testHelperMockWebSocket.default, args);
262
+ sendSpy = mockWebSocket.send;
263
+ mockWebSocket.send = (0, _wrap2.default)(mockWebSocket.send, function (fn) {
264
+ var _this = this;
265
+ for (var _len4 = arguments.length, sendArgs = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
266
+ sendArgs[_key4 - 1] = arguments[_key4];
267
+ }
268
+ process.nextTick(function () {
269
+ (0, _apply.default)(fn, _this, sendArgs);
270
+ });
271
+ });
272
+ process.nextTick(function () {
273
+ _testHelperChai.assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is still connecting');
274
+ _testHelperChai.assert.isFalse(mobiusSocket.connected, 'MobiusSocket has not yet connected');
275
+ _testHelperChai.assert.notCalled(onlineSpy);
276
+ _testHelperChai.assert.lengthOf(sendSpy.args, 0, 'The client has not yet sent the auth message');
277
+ // set websocket readystate to 1 to allow a successful send message
278
+ mockWebSocket.readyState = 1;
279
+ mockWebSocket.emit('open');
280
+ mockWebSocket.emit('message', {
281
+ data: (0, _stringify.default)({
282
+ id: createUuid(),
283
+ data: {
284
+ eventType: 'mercury.buffer_state'
285
+ }
286
+ })
287
+ });
288
+ // using lengthOf because notCalled doesn't allow the helpful
289
+ // string assertion
290
+ _testHelperChai.assert.lengthOf(sendSpy.args, 0, 'The client has not acked the buffer_state message');
291
+ (0, _promiseTick.default)(1).then(function () {
292
+ _testHelperChai.assert.called(bufferStateSpy);
293
+ resolveTest();
294
+ }).catch(rejectTest);
295
+ });
296
+ return mockWebSocket;
297
+ };
298
+ });
299
+ return new _promise.default(function (resolve, reject) {
300
+ resolveTest = resolve;
301
+ rejectTest = reject;
302
+ mobiusSocket.connect().catch(function () {});
303
+ });
304
+ });
305
+ });
306
+ describe('when a CloseEvent is received', function () {
307
+ var events = [{
308
+ code: 1000,
309
+ reason: 'idle',
310
+ action: 'close'
311
+ }, {
312
+ code: 1000,
313
+ reason: 'done (forced)',
314
+ action: 'close'
315
+ }, {
316
+ code: 1000,
317
+ reason: 'pong not received',
318
+ action: 'close'
319
+ }, {
320
+ code: 1000,
321
+ reason: 'pong mismatch',
322
+ action: 'close'
323
+ }, {
324
+ code: 1000,
325
+ action: 'close'
326
+ }, {
327
+ code: 1003,
328
+ action: 'close'
329
+ }, {
330
+ code: 1001,
331
+ action: 'close'
332
+ }, {
333
+ code: 1005,
334
+ action: 'reconnect'
335
+ }, {
336
+ code: 1006,
337
+ action: 'reconnect'
338
+ }, {
339
+ code: 1011,
340
+ action: 'reconnect'
341
+ }, {
342
+ code: 4000,
343
+ action: 'replace'
344
+ }, {
345
+ action: 'close'
346
+ }];
347
+ events.forEach(function (def) {
348
+ var action = def.action,
349
+ reason = def.reason,
350
+ code = def.code;
351
+ var description;
352
+ if (code && reason) {
353
+ description = "with code `".concat(code, "` and reason `").concat(reason, "`");
354
+ } else if (code) {
355
+ description = "with code `".concat(code, "`");
356
+ } else if (reason) {
357
+ description = "with reason `".concat(reason, "`");
358
+ }
359
+ describe("when an event ".concat(description, " is received"), function () {
360
+ it("takes the ".concat(action, " action"), function () {
361
+ if (mobiusSocket.reconnect.restore) {
362
+ mobiusSocket.reconnect.restore();
363
+ }
364
+ _sinon.default.spy(mobiusSocket, 'connect');
365
+ var offlineSpy = _sinon.default.spy();
366
+ var permanentSpy = _sinon.default.spy();
367
+ var transientSpy = _sinon.default.spy();
368
+ var replacedSpy = _sinon.default.spy();
369
+ mobiusSocket.on('offline', offlineSpy);
370
+ mobiusSocket.on('offline.permanent', permanentSpy);
371
+ mobiusSocket.on('offline.transient', transientSpy);
372
+ mobiusSocket.on('offline.replaced', replacedSpy);
373
+ var promise = mobiusSocket.connect();
374
+ mockWebSocket.open();
375
+ return promise.then(function () {
376
+ // Make sure mobiusSocket.connect has a call count of zero
377
+ mobiusSocket.connect.resetHistory();
378
+ mockWebSocket.emit('close', {
379
+ code: code,
380
+ reason: reason
381
+ });
382
+ return (0, _promiseTick.default)(1);
383
+ }).then(function () {
384
+ _testHelperChai.assert.called(offlineSpy);
385
+ _testHelperChai.assert.calledWith(offlineSpy, {
386
+ code: code,
387
+ reason: reason
388
+ });
389
+ switch (action) {
390
+ case 'close':
391
+ _testHelperChai.assert.called(permanentSpy);
392
+ _testHelperChai.assert.notCalled(transientSpy);
393
+ _testHelperChai.assert.notCalled(replacedSpy);
394
+ break;
395
+ case 'reconnect':
396
+ _testHelperChai.assert.notCalled(permanentSpy);
397
+ _testHelperChai.assert.called(transientSpy);
398
+ _testHelperChai.assert.notCalled(replacedSpy);
399
+ break;
400
+ case 'replace':
401
+ _testHelperChai.assert.notCalled(permanentSpy);
402
+ _testHelperChai.assert.notCalled(transientSpy);
403
+ _testHelperChai.assert.called(replacedSpy);
404
+ break;
405
+ default:
406
+ (0, _testHelperChai.assert)(false, 'unreachable code reached');
407
+ }
408
+ _testHelperChai.assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');
409
+ if (action === 'reconnect') {
410
+ _testHelperChai.assert.called(mobiusSocket.connect);
411
+ _testHelperChai.assert.calledWith(mobiusSocket.connect, mockWebSocket.url);
412
+ _testHelperChai.assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');
413
+
414
+ // Block until reconnect completes so logs don't overlap
415
+ return mobiusSocket.connect();
416
+ }
417
+ _testHelperChai.assert.notCalled(mobiusSocket.connect);
418
+ _testHelperChai.assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');
419
+ return _promise.default.resolve();
420
+ });
421
+ });
422
+ });
423
+ });
424
+ });
425
+ describe('when a MessageEvent is received', function () {
426
+ it('emits the MobiusSocket envelope', function () {
427
+ var startSpy = _sinon.default.spy();
428
+ var stopSpy = _sinon.default.spy();
429
+ mobiusSocket.on('event:status.start_typing', startSpy);
430
+ mobiusSocket.on('event:status.stop_typing', stopSpy);
431
+ var promise = mobiusSocket.connect();
432
+ mockWebSocket.open();
433
+ return promise.then(function () {
434
+ mockWebSocket.emit('message', {
435
+ data: (0, _stringify.default)(statusStartTypingMessage)
436
+ });
437
+ return (0, _promiseTick.default)(1);
438
+ }).then(function () {
439
+ _testHelperChai.assert.calledOnce(startSpy);
440
+ _testHelperChai.assert.notCalled(stopSpy);
441
+ _testHelperChai.assert.calledWith(startSpy, statusStartTypingMessage);
442
+ });
443
+ });
444
+ it("emits the MobiusSocket envelope named by the MobiusSocket event's eventType", function () {
445
+ var startSpy = _sinon.default.spy();
446
+ var stopSpy = _sinon.default.spy();
447
+ mobiusSocket.on('event:status.start_typing', startSpy);
448
+ mobiusSocket.on('event:status.stop_typing', stopSpy);
449
+ var promise = mobiusSocket.connect();
450
+ mockWebSocket.open();
451
+ return promise.then(function () {
452
+ mockWebSocket.emit('message', {
453
+ data: (0, _stringify.default)(statusStartTypingMessage)
454
+ });
455
+ return (0, _promiseTick.default)(1);
456
+ }).then(function () {
457
+ _testHelperChai.assert.calledOnce(startSpy);
458
+ _testHelperChai.assert.notCalled(stopSpy);
459
+ _testHelperChai.assert.calledWith(startSpy, statusStartTypingMessage);
460
+ });
461
+ });
462
+ });
463
+
464
+ // Mobius does not use sequence numbers, so sequence-mismatch tests are not applicable
465
+ });
466
+ });
467
+
468
+ /*
469
+ // On mobiusSocket:
470
+ online
471
+ offline
472
+ offline.transient
473
+ offline.permanent
474
+ offline.replaced
475
+ event
476
+ event:locus.participant_joined
477
+ mockWebSocket.connection-failed
478
+ mockWebSocket.sequence-mismatch
479
+ // On webex:
480
+ mobiusSocket.online
481
+ mobiusSocket.offline
482
+ mobiusSocket.offline.transient
483
+ mobiusSocket.offline.permanent
484
+ mobiusSocket.offline.replaced
485
+ mobiusSocket.event
486
+ mobiusSocket.event:locus.participant_joined
487
+ mobiusSocket.mockWebSocket.connection-failed
488
+ mobiusSocket.mockWebSocket.sequence-mismatch
489
+ // TODO go through all it(`emits...`) and make sure corresponding tests are here
490
+ */
491
+ });
492
+ //# sourceMappingURL=mobius-socket-events.test.js.map
@@ -0,0 +1 @@
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","debug","fn","error","info","log","warn","it","firstListener","secondListener","on","off","assert","notCalled","spy","connect","then","called","disconnectPromise","code","reason","calledOnce","calledTwice","resolveTest","rejectTest","bufferStateSpy","onlineSpy","_len3","_key3","_wrap2","_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 (mobiusSocket as any).logger = {\n debug: jest.fn(),\n error: jest.fn(),\n info: jest.fn(),\n log: jest.fn(),\n warn: jest.fn(),\n };\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: 'close',\n },\n {\n code: 1000,\n reason: 'done (forced)',\n action: 'close',\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: 'close',\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":[]}