@webex/calling 3.12.0-next.3 → 3.12.0-next.31

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 (194) 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 +32 -8
  6. package/dist/CallingClient/calling/call.js.map +1 -1
  7. package/dist/CallingClient/calling/call.test.js +581 -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 +24 -3
  16. package/dist/CallingClient/constants.js.map +1 -1
  17. package/dist/CallingClient/line/line.test.js +16 -1
  18. package/dist/CallingClient/line/line.test.js.map +1 -1
  19. package/dist/CallingClient/registration/register.js +694 -406
  20. package/dist/CallingClient/registration/register.js.map +1 -1
  21. package/dist/CallingClient/registration/register.test.js +202 -21
  22. package/dist/CallingClient/registration/register.test.js.map +1 -1
  23. package/dist/CallingClient/registration/types.js.map +1 -1
  24. package/dist/CallingClient/registration/webWorker.js +41 -104
  25. package/dist/CallingClient/registration/webWorker.js.map +1 -1
  26. package/dist/CallingClient/registration/webWorker.test.js +39 -153
  27. package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
  28. package/dist/CallingClient/registration/webWorkerStr.js +1 -1
  29. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
  30. package/dist/CallingClient/utils/constants.js +46 -0
  31. package/dist/CallingClient/utils/constants.js.map +1 -0
  32. package/dist/CallingClient/utils/index.js +63 -0
  33. package/dist/CallingClient/utils/index.js.map +1 -0
  34. package/dist/CallingClient/utils/mobiusSocketMapper.js +122 -0
  35. package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -0
  36. package/dist/CallingClient/utils/mobiusSocketMapper.test.js +211 -0
  37. package/dist/CallingClient/utils/mobiusSocketMapper.test.js.map +1 -0
  38. package/dist/CallingClient/utils/request.js +349 -0
  39. package/dist/CallingClient/utils/request.js.map +1 -0
  40. package/dist/CallingClient/utils/request.test.js +881 -0
  41. package/dist/CallingClient/utils/request.test.js.map +1 -0
  42. package/dist/CallingClient/utils/types.js +7 -0
  43. package/dist/CallingClient/utils/types.js.map +1 -0
  44. package/dist/CallingClient/utils/wsFeatureFlag.js +70 -0
  45. package/dist/CallingClient/utils/wsFeatureFlag.js.map +1 -0
  46. package/dist/CallingClient/utils/wsFeatureFlag.test.js +139 -0
  47. package/dist/CallingClient/utils/wsFeatureFlag.test.js.map +1 -0
  48. package/dist/Contacts/ContactsClient.test.js +3 -8
  49. package/dist/Contacts/ContactsClient.test.js.map +1 -1
  50. package/dist/Events/types.js +1 -11
  51. package/dist/Events/types.js.map +1 -1
  52. package/dist/Metrics/index.js +60 -0
  53. package/dist/Metrics/index.js.map +1 -1
  54. package/dist/Metrics/index.test.js +356 -0
  55. package/dist/Metrics/index.test.js.map +1 -1
  56. package/dist/Metrics/types.js +11 -1
  57. package/dist/Metrics/types.js.map +1 -1
  58. package/dist/SDKConnector/types.js.map +1 -1
  59. package/dist/common/Utils.js +138 -44
  60. package/dist/common/Utils.js.map +1 -1
  61. package/dist/common/testUtil.js +8 -4
  62. package/dist/common/testUtil.js.map +1 -1
  63. package/dist/common/types.js +2 -0
  64. package/dist/common/types.js.map +1 -1
  65. package/dist/mobius-socket/config.js +24 -0
  66. package/dist/mobius-socket/config.js.map +1 -0
  67. package/dist/mobius-socket/errors.js +150 -0
  68. package/dist/mobius-socket/errors.js.map +1 -0
  69. package/dist/mobius-socket/index.js +57 -0
  70. package/dist/mobius-socket/index.js.map +1 -0
  71. package/dist/mobius-socket/mobius-socket-events.test.js +485 -0
  72. package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -0
  73. package/dist/mobius-socket/mobius-socket.js +804 -0
  74. package/dist/mobius-socket/mobius-socket.js.map +1 -0
  75. package/dist/mobius-socket/mobius-socket.test.js +1833 -0
  76. package/dist/mobius-socket/mobius-socket.test.js.map +1 -0
  77. package/dist/mobius-socket/socket/constants.js +34 -0
  78. package/dist/mobius-socket/socket/constants.js.map +1 -0
  79. package/dist/mobius-socket/socket/index.js +15 -0
  80. package/dist/mobius-socket/socket/index.js.map +1 -0
  81. package/dist/mobius-socket/socket/socket-base.js +604 -0
  82. package/dist/mobius-socket/socket/socket-base.js.map +1 -0
  83. package/dist/mobius-socket/socket/socket.js +19 -0
  84. package/dist/mobius-socket/socket/socket.js.map +1 -0
  85. package/dist/mobius-socket/socket/socket.shim.js +26 -0
  86. package/dist/mobius-socket/socket/socket.shim.js.map +1 -0
  87. package/dist/mobius-socket/socket/types.js +7 -0
  88. package/dist/mobius-socket/socket/types.js.map +1 -0
  89. package/dist/mobius-socket/socket.test.js +727 -0
  90. package/dist/mobius-socket/socket.test.js.map +1 -0
  91. package/dist/mobius-socket/test/mocha-helpers.js +23 -0
  92. package/dist/mobius-socket/test/mocha-helpers.js.map +1 -0
  93. package/dist/mobius-socket/test/promise-tick.js +28 -0
  94. package/dist/mobius-socket/test/promise-tick.js.map +1 -0
  95. package/dist/mobius-socket/types.js +7 -0
  96. package/dist/mobius-socket/types.js.map +1 -0
  97. package/dist/module/CallingClient/CallingClient.js +141 -10
  98. package/dist/module/CallingClient/calling/call.js +24 -6
  99. package/dist/module/CallingClient/calling/callManager.js +27 -7
  100. package/dist/module/CallingClient/calling/types.js +2 -0
  101. package/dist/module/CallingClient/constants.js +20 -0
  102. package/dist/module/CallingClient/registration/register.js +226 -62
  103. package/dist/module/CallingClient/registration/webWorker.js +42 -61
  104. package/dist/module/CallingClient/registration/webWorkerStr.js +47 -82
  105. package/dist/module/CallingClient/utils/constants.js +30 -0
  106. package/dist/module/CallingClient/utils/index.js +5 -0
  107. package/dist/module/CallingClient/utils/mobiusSocketMapper.js +72 -0
  108. package/dist/module/CallingClient/utils/request.js +162 -0
  109. package/dist/module/CallingClient/utils/types.js +1 -0
  110. package/dist/module/CallingClient/utils/wsFeatureFlag.js +41 -0
  111. package/dist/module/Events/types.js +0 -10
  112. package/dist/module/Metrics/index.js +46 -0
  113. package/dist/module/Metrics/types.js +10 -0
  114. package/dist/module/common/Utils.js +52 -12
  115. package/dist/module/common/testUtil.js +5 -1
  116. package/dist/module/common/types.js +2 -0
  117. package/dist/module/mobius-socket/config.js +15 -0
  118. package/dist/module/mobius-socket/errors.js +64 -0
  119. package/dist/module/mobius-socket/index.js +24 -0
  120. package/dist/module/mobius-socket/mobius-socket.js +571 -0
  121. package/dist/module/mobius-socket/socket/constants.js +10 -0
  122. package/dist/module/mobius-socket/socket/index.js +4 -0
  123. package/dist/module/mobius-socket/socket/socket-base.js +368 -0
  124. package/dist/module/mobius-socket/socket/socket.js +9 -0
  125. package/dist/module/mobius-socket/socket/socket.shim.js +12 -0
  126. package/dist/module/mobius-socket/socket/types.js +1 -0
  127. package/dist/module/mobius-socket/types.js +1 -0
  128. package/dist/types/CallingClient/CallingClient.d.ts +7 -0
  129. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  130. package/dist/types/CallingClient/calling/call.d.ts +2 -0
  131. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  132. package/dist/types/CallingClient/calling/callManager.d.ts +3 -2
  133. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  134. package/dist/types/CallingClient/calling/types.d.ts +21 -9
  135. package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
  136. package/dist/types/CallingClient/constants.d.ts +20 -0
  137. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  138. package/dist/types/CallingClient/registration/register.d.ts +6 -0
  139. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  140. package/dist/types/CallingClient/registration/types.d.ts +3 -1
  141. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  142. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
  143. package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
  144. package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
  145. package/dist/types/CallingClient/utils/constants.d.ts +30 -0
  146. package/dist/types/CallingClient/utils/constants.d.ts.map +1 -0
  147. package/dist/types/CallingClient/utils/index.d.ts +6 -0
  148. package/dist/types/CallingClient/utils/index.d.ts.map +1 -0
  149. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +5 -0
  150. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -0
  151. package/dist/types/CallingClient/utils/request.d.ts +23 -0
  152. package/dist/types/CallingClient/utils/request.d.ts.map +1 -0
  153. package/dist/types/CallingClient/utils/types.d.ts +29 -0
  154. package/dist/types/CallingClient/utils/types.d.ts.map +1 -0
  155. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts +4 -0
  156. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts.map +1 -0
  157. package/dist/types/Events/types.d.ts +0 -10
  158. package/dist/types/Events/types.d.ts.map +1 -1
  159. package/dist/types/Metrics/index.d.ts.map +1 -1
  160. package/dist/types/Metrics/types.d.ts +11 -1
  161. package/dist/types/Metrics/types.d.ts.map +1 -1
  162. package/dist/types/SDKConnector/types.d.ts +24 -0
  163. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  164. package/dist/types/common/Utils.d.ts +9 -2
  165. package/dist/types/common/Utils.d.ts.map +1 -1
  166. package/dist/types/common/testUtil.d.ts +4 -1
  167. package/dist/types/common/testUtil.d.ts.map +1 -1
  168. package/dist/types/common/types.d.ts +3 -0
  169. package/dist/types/common/types.d.ts.map +1 -1
  170. package/dist/types/mobius-socket/config.d.ts +17 -0
  171. package/dist/types/mobius-socket/config.d.ts.map +1 -0
  172. package/dist/types/mobius-socket/errors.d.ts +32 -0
  173. package/dist/types/mobius-socket/errors.d.ts.map +1 -0
  174. package/dist/types/mobius-socket/index.d.ts +14 -0
  175. package/dist/types/mobius-socket/index.d.ts.map +1 -0
  176. package/dist/types/mobius-socket/mobius-socket.d.ts +48 -0
  177. package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -0
  178. package/dist/types/mobius-socket/socket/constants.d.ts +11 -0
  179. package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -0
  180. package/dist/types/mobius-socket/socket/index.d.ts +5 -0
  181. package/dist/types/mobius-socket/socket/index.d.ts.map +1 -0
  182. package/dist/types/mobius-socket/socket/socket-base.d.ts +43 -0
  183. package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -0
  184. package/dist/types/mobius-socket/socket/socket.d.ts +6 -0
  185. package/dist/types/mobius-socket/socket/socket.d.ts.map +1 -0
  186. package/dist/types/mobius-socket/socket/socket.shim.d.ts +6 -0
  187. package/dist/types/mobius-socket/socket/socket.shim.d.ts.map +1 -0
  188. package/dist/types/mobius-socket/socket/types.d.ts +61 -0
  189. package/dist/types/mobius-socket/socket/types.d.ts.map +1 -0
  190. package/dist/types/mobius-socket/types.d.ts +21 -0
  191. package/dist/types/mobius-socket/types.d.ts.map +1 -0
  192. package/package.json +20 -5
  193. package/src/mobius-socket/socket/socket.shim.ts +22 -0
  194. package/src/mobius-socket/socket/socket.ts +14 -0
@@ -0,0 +1,604 @@
1
+ "use strict";
2
+
3
+ var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
+ var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
5
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
6
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
7
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
8
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
9
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
10
+ var _Array$from = require("@babel/runtime-corejs2/core-js/array/from");
11
+ var _Symbol = require("@babel/runtime-corejs2/core-js/symbol");
12
+ var _Symbol$iterator = require("@babel/runtime-corejs2/core-js/symbol/iterator");
13
+ var _Array$isArray = require("@babel/runtime-corejs2/core-js/array/is-array");
14
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
15
+ _Object$defineProperty(exports, "__esModule", {
16
+ value: true
17
+ });
18
+ exports.default = void 0;
19
+ var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
20
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
21
+ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
22
+ var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
23
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/define-property"));
24
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
25
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
26
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
27
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
28
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
29
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
30
+ var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
31
+ var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
32
+ var _has2 = _interopRequireDefault(require("lodash/has"));
33
+ var _defaults2 = _interopRequireDefault(require("lodash/defaults"));
34
+ var _events = require("events");
35
+ var _common = require("@webex/common");
36
+ var _commonTimers = require("@webex/common-timers");
37
+ var _errors = require("../errors");
38
+ var _constants = require("./constants");
39
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof _Symbol && r[_Symbol$iterator] || r["@@iterator"]; if (!t) { if (_Array$isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
40
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? _Array$from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
41
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
42
+ function ownKeys(e, r) { var t = _Object$keys2(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; }
43
+ 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$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
44
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
45
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /*!
46
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
47
+ */ // @ts-ignore - type not available
48
+ // @ts-ignore - type not available
49
+ var sockets = new _weakMap.default();
50
+ function createTrackingId() {
51
+ return "webex-js-sdk_".concat(crypto.randomUUID());
52
+ }
53
+
54
+ /**
55
+ * Generalized socket abstraction
56
+ */
57
+ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
58
+ /**
59
+ * Creates a new Socket instance.
60
+ */
61
+ function Socket() {
62
+ var _this;
63
+ (0, _classCallCheck2.default)(this, Socket);
64
+ _this = _callSuper(this, Socket);
65
+ (0, _defineProperty3.default)(_this, "domain", void 0);
66
+ (0, _defineProperty3.default)(_this, "pendingResponses", void 0);
67
+ (0, _defineProperty3.default)(_this, "forceCloseDelay", void 0);
68
+ (0, _defineProperty3.default)(_this, "logger", void 0);
69
+ (0, _defineProperty3.default)(_this, "refreshToken", void 0);
70
+ (0, _defineProperty3.default)(_this, "token", void 0);
71
+ (0, _defineProperty3.default)(_this, "trackingId", void 0);
72
+ (0, _defineProperty3.default)(_this, "wssResponseTimeout", void 0);
73
+ _this.domain = 'unknown-domain';
74
+ _this.pendingResponses = new _map.default();
75
+ _this.onmessage = _this.onmessage.bind(_this);
76
+ _this.onclose = _this.onclose.bind(_this);
77
+ _this.setMaxListeners(10);
78
+ return _this;
79
+ }
80
+
81
+ // TODO: Circle back and check if we are using binaryType and related getters. If not, we can remove these.
82
+ /**
83
+ * Gets the binary type of the WebSocket connection.
84
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
85
+ */
86
+ (0, _inherits2.default)(Socket, _EventEmitter);
87
+ return (0, _createClass2.default)(Socket, [{
88
+ key: "binaryType",
89
+ get: function get() {
90
+ var _sockets$get;
91
+ return ((_sockets$get = sockets.get(this)) === null || _sockets$get === void 0 ? void 0 : _sockets$get.binaryType) || '';
92
+ }
93
+
94
+ /**
95
+ * Gets the number of bytes of data that have been queued but not yet transmitted.
96
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
97
+ */
98
+ }, {
99
+ key: "bufferedAmount",
100
+ get: function get() {
101
+ var _sockets$get2;
102
+ return ((_sockets$get2 = sockets.get(this)) === null || _sockets$get2 === void 0 ? void 0 : _sockets$get2.bufferedAmount) || 0;
103
+ }
104
+
105
+ /**
106
+ * Gets the extensions selected by the server.
107
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
108
+ */
109
+ }, {
110
+ key: "extensions",
111
+ get: function get() {
112
+ var _sockets$get3;
113
+ return ((_sockets$get3 = sockets.get(this)) === null || _sockets$get3 === void 0 ? void 0 : _sockets$get3.extensions) || '';
114
+ }
115
+
116
+ /**
117
+ * Gets the sub-protocol selected by the server.
118
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
119
+ */
120
+ }, {
121
+ key: "protocol",
122
+ get: function get() {
123
+ var _sockets$get4;
124
+ return ((_sockets$get4 = sockets.get(this)) === null || _sockets$get4 === void 0 ? void 0 : _sockets$get4.protocol) || '';
125
+ }
126
+
127
+ /**
128
+ * Gets the current state of the WebSocket connection.
129
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
130
+ */
131
+ }, {
132
+ key: "readyState",
133
+ get: function get() {
134
+ var _sockets$get5;
135
+ return ((_sockets$get5 = sockets.get(this)) === null || _sockets$get5 === void 0 ? void 0 : _sockets$get5.readyState) || 0;
136
+ }
137
+
138
+ /**
139
+ * Gets the URL of the WebSocket connection.
140
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
141
+ */
142
+ }, {
143
+ key: "url",
144
+ get: function get() {
145
+ var _sockets$get6;
146
+ return ((_sockets$get6 = sockets.get(this)) === null || _sockets$get6 === void 0 ? void 0 : _sockets$get6.url) || '';
147
+ }
148
+
149
+ /**
150
+ * Provides the environmentally appropriate WebSocket constructor.
151
+ *
152
+ * @returns The WebSocket constructor (ws in NodeJS, WebSocket in browsers)
153
+ */
154
+ }, {
155
+ key: "close",
156
+ value:
157
+ /**
158
+ * Closes the socket.
159
+ * @param options - Close options containing code and reason
160
+ * @returns Promise that resolves when the socket is closed
161
+ */
162
+ function close(options) {
163
+ var _this2 = this;
164
+ return new _promise.default(function (resolve, reject) {
165
+ var socket = sockets.get(_this2);
166
+ if (!socket) {
167
+ // Open has not been called yet so there is no socket to close
168
+ resolve();
169
+ return;
170
+ }
171
+ // logger is defined once open is called
172
+ _this2.logger.info("socket,".concat(_this2.domain, ": closing"));
173
+ if (socket.readyState === _constants.SOCKET_READY_STATE.CLOSING || socket.readyState === _constants.SOCKET_READY_STATE.CLOSED) {
174
+ _this2.logger.info("socket,".concat(_this2.domain, ": already closed"));
175
+ resolve();
176
+ return;
177
+ }
178
+ var originalCode = options === null || options === void 0 ? void 0 : options.code;
179
+ var originalReason = options === null || options === void 0 ? void 0 : options.reason;
180
+ var resolvedOptions = (0, _defaults2.default)(options || {}, {
181
+ code: 1000,
182
+ reason: 'Done'
183
+ });
184
+ if (resolvedOptions.code && resolvedOptions.code !== 1000 && (resolvedOptions.code < 3000 || resolvedOptions.code > 4999)) {
185
+ reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));
186
+ return;
187
+ }
188
+ var closeTimer = (0, _commonTimers.safeSetTimeout)(function () {
189
+ try {
190
+ _this2.logger.info("socket,".concat(_this2.domain, ": no close event received, forcing closure"));
191
+ resolve(_this2.onclose(originalCode ? {
192
+ code: originalCode,
193
+ reason: originalReason || 'Done (unknown)'
194
+ } : {
195
+ code: 1000,
196
+ reason: 'Done (forced)'
197
+ }));
198
+ } catch (error) {
199
+ _this2.logger.warn("socket,".concat(_this2.domain, ": force-close failed"), error);
200
+ }
201
+ }, _this2.forceCloseDelay);
202
+ socket.onclose = function (event) {
203
+ _this2.logger.info("socket,".concat(_this2.domain, ": close event fired"), event.code, event.reason);
204
+ clearTimeout(closeTimer);
205
+ _this2.onclose(event);
206
+ resolve(event);
207
+ };
208
+
209
+ // If socket is still connecting, manually trigger close handler with desired code
210
+ // because calling close() on a CONNECTING socket may not preserve custom codes
211
+ if (socket.readyState === _constants.SOCKET_READY_STATE.CONNECTING) {
212
+ _this2.logger.info("socket,".concat(_this2.domain, ": socket still connecting, triggering close manually"));
213
+ clearTimeout(closeTimer);
214
+ var closeEvent = {
215
+ code: resolvedOptions.code,
216
+ reason: resolvedOptions.reason
217
+ };
218
+ _this2.onclose(closeEvent);
219
+ resolve(closeEvent);
220
+ try {
221
+ socket.close(resolvedOptions.code, resolvedOptions.reason);
222
+ } catch (error) {
223
+ _this2.logger.info("socket,".concat(_this2.domain, ": error while closing CONNECTING socket, likely due to browser incompatibility with custom close codes"), error);
224
+ }
225
+ } else {
226
+ socket.close(resolvedOptions.code, resolvedOptions.reason);
227
+ }
228
+ });
229
+ }
230
+
231
+ /**
232
+ * Opens a WebSocket connection and performs authentication.
233
+ *
234
+ * @param url - WebSocket URL to connect to
235
+ * @param options - Socket connection options including token, logger, and timeout settings
236
+ * @returns Promise that resolves when socket is opened and authenticated
237
+ */
238
+ }, {
239
+ key: "open",
240
+ value: function open(url, options) {
241
+ var _this3 = this;
242
+ try {
243
+ this.domain = new URL(url).hostname;
244
+ } catch (_unused) {
245
+ this.domain = url;
246
+ }
247
+ return new _promise.default(function (resolve, reject) {
248
+ /* eslint complexity: [0] */
249
+ if (!url) {
250
+ reject(new Error('`url` is required'));
251
+ return;
252
+ }
253
+ if (sockets.get(_this3)) {
254
+ reject(new Error('Socket#open() can only be called once per instance'));
255
+ return;
256
+ }
257
+ var resolvedOptions = options || {};
258
+ (0, _common.checkRequired)(['forceCloseDelay', 'token', 'trackingId', 'logger'], resolvedOptions);
259
+ (0, _keys.default)(resolvedOptions).forEach(function (key) {
260
+ (0, _defineProperty2.default)(_this3, key, {
261
+ enumerable: false,
262
+ value: resolvedOptions[key]
263
+ });
264
+ });
265
+ var WebSocket = Socket.getWebSocketConstructor();
266
+ _this3.logger.info("socket,".concat(_this3.domain, ": creating WebSocket"));
267
+ var socket = new WebSocket(url, [], resolvedOptions);
268
+ socket.binaryType = 'arraybuffer';
269
+ socket.onmessage = _this3.onmessage;
270
+ socket.onclose = function (event) {
271
+ event = _this3.fixCloseCode(event);
272
+ _this3.logger.info("socket,".concat(_this3.domain, ": closed before open"), event.code, event.reason);
273
+ switch (event.code) {
274
+ case 1005:
275
+ // IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume
276
+ // it's a bad websocket url. That'll trigger a device refresh; if it
277
+ // turns out we had a bad token, the device refresh should 401 and
278
+ // trigger a token refresh.
279
+ return reject(new _errors.UnknownResponse(event));
280
+ case 4400:
281
+ return reject(new _errors.BadRequest(event));
282
+ case 4401:
283
+ return reject(new _errors.NotAuthorized(event));
284
+ case 4403:
285
+ return reject(new _errors.Forbidden(event));
286
+ default:
287
+ return reject(new _errors.ConnectionError(event));
288
+ }
289
+ };
290
+ socket.onopen = function () {
291
+ _this3.logger.info("socket,".concat(_this3.domain, ": connected"));
292
+ _this3.authorize(_this3.token).then(function () {
293
+ _this3.logger.info("socket,".concat(_this3.domain, ": authorized"));
294
+ socket.onclose = _this3.onclose;
295
+ resolve();
296
+ }).catch(reject);
297
+ };
298
+ socket.onerror = function (event) {
299
+ _this3.logger.warn("socket,".concat(_this3.domain, ": error event fired"), event);
300
+ };
301
+ sockets.set(_this3, socket);
302
+ _this3.logger.info("socket,".concat(_this3.domain, ": waiting for server"));
303
+ });
304
+ }
305
+
306
+ /**
307
+ * Handles incoming CloseEvents.
308
+ * @param event - The close event containing code and reason
309
+ */
310
+ }, {
311
+ key: "onclose",
312
+ value: function onclose(event) {
313
+ this.logger.info("socket,".concat(this.domain, ": closed"), event.code, event.reason);
314
+ event = this.fixCloseCode(event);
315
+ this.rejectPendingResponses(new _errors.ConnectionError(event));
316
+ this.emit('close', event);
317
+
318
+ // Remove all listeners to (a) avoid reacting to late pongs and (b) ensure
319
+ // we don't have a retain cycle.
320
+ this.removeAllListeners();
321
+ }
322
+
323
+ /**
324
+ * Handles incoming message events from the WebSocket.
325
+ * @param event - The message event containing the data
326
+ */
327
+ }, {
328
+ key: "onmessage",
329
+ value: function onmessage(event) {
330
+ var _this4 = this;
331
+ try {
332
+ var data = JSON.parse(event.data);
333
+ var processedEvent = {
334
+ data: data
335
+ };
336
+ if (data.type === 'async_event') {
337
+ this.acknowledge(processedEvent).catch(function (error) {
338
+ _this4.logger.warn("socket,".concat(_this4.domain, ": failed to acknowledge async event"), error);
339
+ });
340
+ }
341
+
342
+ // Match pending request/response promises before emitting the public message event.
343
+ // The message is still emitted afterward for any external listeners that care about it.
344
+ this.handlePendingResponse(data);
345
+ this.emit('message', processedEvent);
346
+ } catch (error) {
347
+ /* istanbul ignore next */
348
+ this.logger.warn("socket,".concat(this.domain, ": error while receiving WebSocket message"), error);
349
+ }
350
+ }
351
+
352
+ /**
353
+ * Sends a message up the socket.
354
+ * @param data - Data to send (string or object that will be JSON stringified)
355
+ * @returns Promise that resolves when the message is sent
356
+ */
357
+ }, {
358
+ key: "send",
359
+ value: function send(data) {
360
+ var _this5 = this;
361
+ return new _promise.default(function (resolve, reject) {
362
+ if (_this5.readyState !== _constants.SOCKET_READY_STATE.OPEN) {
363
+ reject(new Error('INVALID_STATE_ERROR'));
364
+ return;
365
+ }
366
+ if ((0, _isObject2.default)(data)) {
367
+ data = (0, _stringify.default)(data);
368
+ }
369
+ var socket = sockets.get(_this5);
370
+ if (!socket) {
371
+ reject(new Error('INVALID_STATE_ERROR'));
372
+ return;
373
+ }
374
+ socket.send(data);
375
+ resolve();
376
+ });
377
+ }
378
+
379
+ /**
380
+ * Sends a request and resolves when the matching response arrives.
381
+ *
382
+ * @param data - Request data to send over the socket
383
+ * @param options - Request options including timeout and error handlers
384
+ * @returns Promise that resolves with the response data
385
+ */
386
+ }, {
387
+ key: "sendRequest",
388
+ value: function sendRequest(data) {
389
+ var _this6 = this;
390
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
391
+ if (!(0, _isObject2.default)(data)) {
392
+ return _promise.default.reject(new Error('`data` is required'));
393
+ }
394
+ var request = _objectSpread({}, data);
395
+ var trackingId = request.trackingId || createTrackingId();
396
+ var timeout = options.timeout || this.wssResponseTimeout || 10000;
397
+ if (this.pendingResponses.has(trackingId)) {
398
+ return _promise.default.reject(new Error("socket request already sent for trackingId ".concat(trackingId)));
399
+ }
400
+ request.trackingId = trackingId;
401
+ return new _promise.default(function (_resolve, _reject) {
402
+ var timeoutId = (0, _commonTimers.safeSetTimeout)(function () {
403
+ _this6.clearPendingResponse(trackingId);
404
+ _reject((0, _errors.createTimeoutError)(request));
405
+ }, timeout);
406
+ var pendingResponse = {
407
+ request: request,
408
+ resolve: function resolve(response) {
409
+ _this6.clearPendingResponse(trackingId);
410
+ _resolve(response);
411
+ },
412
+ reject: function reject(error) {
413
+ _this6.clearPendingResponse(trackingId);
414
+ _reject(error);
415
+ },
416
+ timeoutId: timeoutId
417
+ };
418
+ _this6.pendingResponses.set(trackingId, pendingResponse);
419
+ _this6.send(request).catch(function (error) {
420
+ _this6.clearPendingResponse(trackingId);
421
+ _reject(error);
422
+ });
423
+ });
424
+ }
425
+
426
+ /**
427
+ * Sends an acknowledgment for a specific async event.
428
+ * @param event - Message event containing the async event to acknowledge
429
+ * @returns Promise that resolves when acknowledgment is sent
430
+ */
431
+ }, {
432
+ key: "acknowledge",
433
+ value: function acknowledge(event) {
434
+ if (!event) {
435
+ return _promise.default.reject(new Error('`event` is required'));
436
+ }
437
+ if (!(0, _has2.default)(event, 'data.eventId')) {
438
+ return _promise.default.reject(new Error('`event.data.eventId` is required'));
439
+ }
440
+
441
+ // Don't try to acknowledge if socket is not in open state
442
+ if (this.readyState !== _constants.SOCKET_READY_STATE.OPEN) {
443
+ return _promise.default.resolve();
444
+ }
445
+ return this.send({
446
+ type: _constants.MESSAGE_TYPES.EVENT_ACK,
447
+ trackingId: event.data.trackingId || createTrackingId(),
448
+ eventId: event.data.eventId
449
+ }).catch(function (error) {
450
+ if (error.message === 'INVALID_STATE_ERROR') {
451
+ return _promise.default.resolve();
452
+ }
453
+ throw error;
454
+ });
455
+ }
456
+ }, {
457
+ key: "refresh",
458
+ value: function refresh(token) {
459
+ if (!token) {
460
+ return _promise.default.reject(new Error('`token` is required for Socket#refresh()'));
461
+ }
462
+ var refreshedToken;
463
+ if (typeof token === 'string') {
464
+ refreshedToken = token;
465
+ } else if (token && typeof token.toString === 'function') {
466
+ refreshedToken = token.toString();
467
+ } else {
468
+ refreshedToken = String(token);
469
+ }
470
+ return this.authorize(refreshedToken);
471
+ }
472
+
473
+ /**
474
+ * Sends an auth message up the socket with a refreshed token.
475
+ * @param token - Authentication token to send
476
+ * @returns Promise that resolves when authentication succeeds
477
+ */
478
+ }, {
479
+ key: "authorize",
480
+ value: function authorize(token) {
481
+ this.logger.info("socket,".concat(this.domain, ": authorizing"));
482
+ return this.sendRequest({
483
+ type: _constants.MESSAGE_TYPES.AUTH,
484
+ data: {
485
+ token: token
486
+ }
487
+ });
488
+ }
489
+
490
+ /**
491
+ * Clears a pending response entry.
492
+ * @param trackingId - Tracking ID of the response to clear
493
+ */
494
+ }, {
495
+ key: "clearPendingResponse",
496
+ value: function clearPendingResponse(trackingId) {
497
+ var pendingResponse = this.pendingResponses.get(trackingId);
498
+ if (pendingResponse !== null && pendingResponse !== void 0 && pendingResponse.timeoutId) {
499
+ clearTimeout(pendingResponse.timeoutId);
500
+ }
501
+ this.pendingResponses.delete(trackingId);
502
+ }
503
+
504
+ /**
505
+ * Rejects all pending responses with the provided error.
506
+ * @param error - Error to reject pending responses with
507
+ */
508
+ }, {
509
+ key: "rejectPendingResponses",
510
+ value: function rejectPendingResponses(error) {
511
+ if (!this.pendingResponses.size) {
512
+ return;
513
+ }
514
+ var _iterator = _createForOfIteratorHelper(this.pendingResponses.values()),
515
+ _step;
516
+ try {
517
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
518
+ var pendingResponse = _step.value;
519
+ pendingResponse.reject(error);
520
+ }
521
+ } catch (err) {
522
+ _iterator.e(err);
523
+ } finally {
524
+ _iterator.f();
525
+ }
526
+ }
527
+
528
+ /**
529
+ * Handles incoming responses for pending requests.
530
+ * @param response - Response data to match against pending requests
531
+ * @returns True if a matching pending request was found and handled
532
+ */
533
+ }, {
534
+ key: "handlePendingResponse",
535
+ value: function handlePendingResponse(response) {
536
+ var _this7 = this;
537
+ if (!response) {
538
+ return false;
539
+ }
540
+
541
+ // Pending request correlation currently requires trackingId on the response.
542
+ var pendingResponse = this.pendingResponses.get(response.trackingId || '');
543
+ if (!pendingResponse) {
544
+ return false;
545
+ }
546
+ if (response.subtype !== pendingResponse.request.type) {
547
+ return false;
548
+ }
549
+ var statusCode = response === null || response === void 0 ? void 0 : response.statusCode;
550
+ var statusMessage = response === null || response === void 0 ? void 0 : response.statusMessage;
551
+ if (statusCode === 440 && (response === null || response === void 0 ? void 0 : response.subtype) !== _constants.MESSAGE_TYPES.AUTH) {
552
+ if (typeof this.refreshToken === 'function') {
553
+ _promise.default.resolve(this.refreshToken(response)).catch(function (error) {
554
+ _this7.logger.warn("socket,".concat(_this7.domain, ": failed token-expiry re-auth"), error);
555
+ });
556
+ } else {
557
+ this.logger.warn("socket,".concat(this.domain, ": refreshToken callback is unavailable for statusCode 440"));
558
+ }
559
+ }
560
+ if (statusCode === undefined) {
561
+ var error = (0, _errors.createWssResponseError)(response, statusCode, statusMessage || 'Socket response missing status code');
562
+ pendingResponse.reject(error);
563
+ } else if (statusCode >= 200 && statusCode < 300) {
564
+ pendingResponse.resolve(response);
565
+ } else {
566
+ pendingResponse.reject((0, _errors.createWssResponseError)(response, statusCode, statusMessage));
567
+ }
568
+ return true;
569
+ }
570
+
571
+ /**
572
+ * Deals with the fact that some browsers drop some close codes (but not close reasons).
573
+ *
574
+ * @param event - Close event to fix
575
+ * @returns Fixed close event with corrected code if necessary
576
+ */
577
+ }, {
578
+ key: "fixCloseCode",
579
+ value: function fixCloseCode(event) {
580
+ if (event.code === 1005 && event.reason) {
581
+ switch (event.reason.toLowerCase()) {
582
+ case 'replaced':
583
+ this.logger.info("socket,".concat(this.domain, ": fixing CloseEvent code for reason: "), event.reason);
584
+ event.code = 4000;
585
+ break;
586
+ case 'authentication failed':
587
+ case 'authentication did not happen within the timeout window of 30000 seconds.':
588
+ this.logger.info("socket,".concat(this.domain, ": fixing CloseEvent code for reason: "), event.reason);
589
+ event.code = 1008;
590
+ break;
591
+ default:
592
+ // do nothing
593
+ }
594
+ }
595
+ return event;
596
+ }
597
+ }], [{
598
+ key: "getWebSocketConstructor",
599
+ value: function getWebSocketConstructor() {
600
+ throw new Error('Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way');
601
+ }
602
+ }]);
603
+ }(_events.EventEmitter);
604
+ //# sourceMappingURL=socket-base.js.map