@webex/calling 3.11.0 → 3.12.0-mobius-socket.1

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 (240) hide show
  1. package/dist/CallHistory/CallHistory.js +596 -0
  2. package/dist/CallHistory/CallHistory.js.map +1 -0
  3. package/dist/CallHistory/CallHistory.test.js +916 -0
  4. package/dist/CallHistory/CallHistory.test.js.map +1 -0
  5. package/dist/CallHistory/callHistoryFixtures.js +650 -0
  6. package/dist/CallHistory/callHistoryFixtures.js.map +1 -0
  7. package/dist/CallHistory/constants.js +38 -0
  8. package/dist/CallHistory/constants.js.map +1 -0
  9. package/dist/CallHistory/types.js +7 -0
  10. package/dist/CallHistory/types.js.map +1 -0
  11. package/dist/CallSettings/CallSettings.js +311 -0
  12. package/dist/CallSettings/CallSettings.js.map +1 -0
  13. package/dist/CallSettings/CallSettings.test.js +122 -0
  14. package/dist/CallSettings/CallSettings.test.js.map +1 -0
  15. package/dist/CallSettings/UcmBackendConnector.js +308 -0
  16. package/dist/CallSettings/UcmBackendConnector.js.map +1 -0
  17. package/dist/CallSettings/UcmBackendConnector.test.js +411 -0
  18. package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -0
  19. package/dist/CallSettings/WxCallBackendConnector.js +597 -0
  20. package/dist/CallSettings/WxCallBackendConnector.js.map +1 -0
  21. package/dist/CallSettings/WxCallBackendConnector.test.js +904 -0
  22. package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -0
  23. package/dist/CallSettings/constants.js +31 -0
  24. package/dist/CallSettings/constants.js.map +1 -0
  25. package/dist/CallSettings/testFixtures.js +68 -0
  26. package/dist/CallSettings/testFixtures.js.map +1 -0
  27. package/dist/CallSettings/types.js +7 -0
  28. package/dist/CallSettings/types.js.map +1 -0
  29. package/dist/CallingClient/CallingClient.js +1346 -0
  30. package/dist/CallingClient/CallingClient.js.map +1 -0
  31. package/dist/CallingClient/CallingClient.test.js +1352 -0
  32. package/dist/CallingClient/CallingClient.test.js.map +1 -0
  33. package/dist/CallingClient/callRecordFixtures.js +101 -0
  34. package/dist/CallingClient/callRecordFixtures.js.map +1 -0
  35. package/dist/CallingClient/calling/CallerId/index.js +275 -0
  36. package/dist/CallingClient/calling/CallerId/index.js.map +1 -0
  37. package/dist/CallingClient/calling/CallerId/index.test.js +275 -0
  38. package/dist/CallingClient/calling/CallerId/index.test.js.map +1 -0
  39. package/dist/CallingClient/calling/CallerId/types.js +7 -0
  40. package/dist/CallingClient/calling/CallerId/types.js.map +1 -0
  41. package/dist/CallingClient/calling/call.js +3489 -0
  42. package/dist/CallingClient/calling/call.js.map +1 -0
  43. package/dist/CallingClient/calling/call.test.js +3653 -0
  44. package/dist/CallingClient/calling/call.test.js.map +1 -0
  45. package/dist/CallingClient/calling/callManager.js +481 -0
  46. package/dist/CallingClient/calling/callManager.js.map +1 -0
  47. package/dist/CallingClient/calling/callManager.test.js +776 -0
  48. package/dist/CallingClient/calling/callManager.test.js.map +1 -0
  49. package/dist/CallingClient/calling/index.js +30 -0
  50. package/dist/CallingClient/calling/index.js.map +1 -0
  51. package/dist/CallingClient/calling/types.js +76 -0
  52. package/dist/CallingClient/calling/types.js.map +1 -0
  53. package/dist/CallingClient/callingClientFixtures.js +143 -0
  54. package/dist/CallingClient/callingClientFixtures.js.map +1 -0
  55. package/dist/CallingClient/constants.js +249 -0
  56. package/dist/CallingClient/constants.js.map +1 -0
  57. package/dist/CallingClient/line/index.js +332 -0
  58. package/dist/CallingClient/line/index.js.map +1 -0
  59. package/dist/CallingClient/line/line.test.js +342 -0
  60. package/dist/CallingClient/line/line.test.js.map +1 -0
  61. package/dist/CallingClient/line/types.js +21 -0
  62. package/dist/CallingClient/line/types.js.map +1 -0
  63. package/dist/CallingClient/registration/index.js +19 -0
  64. package/dist/CallingClient/registration/index.js.map +1 -0
  65. package/dist/CallingClient/registration/register.js +1713 -0
  66. package/dist/CallingClient/registration/register.js.map +1 -0
  67. package/dist/CallingClient/registration/register.test.js +1894 -0
  68. package/dist/CallingClient/registration/register.test.js.map +1 -0
  69. package/dist/CallingClient/registration/registerFixtures.js +36 -0
  70. package/dist/CallingClient/registration/registerFixtures.js.map +1 -0
  71. package/dist/CallingClient/registration/types.js +7 -0
  72. package/dist/CallingClient/registration/types.js.map +1 -0
  73. package/dist/CallingClient/registration/webWorker.js +132 -0
  74. package/dist/CallingClient/registration/webWorker.js.map +1 -0
  75. package/dist/CallingClient/registration/webWorker.test.js +303 -0
  76. package/dist/CallingClient/registration/webWorker.test.js.map +1 -0
  77. package/dist/CallingClient/registration/webWorkerStr.js +15 -0
  78. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -0
  79. package/dist/CallingClient/types.js +7 -0
  80. package/dist/CallingClient/types.js.map +1 -0
  81. package/dist/CallingClient/utils/constants.js +46 -0
  82. package/dist/CallingClient/utils/constants.js.map +1 -0
  83. package/dist/CallingClient/utils/index.js +63 -0
  84. package/dist/CallingClient/utils/index.js.map +1 -0
  85. package/dist/CallingClient/utils/mobiusSocketMapper.js +106 -0
  86. package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -0
  87. package/dist/CallingClient/utils/request.js +267 -0
  88. package/dist/CallingClient/utils/request.js.map +1 -0
  89. package/dist/CallingClient/utils/types.js +7 -0
  90. package/dist/CallingClient/utils/types.js.map +1 -0
  91. package/dist/CallingClient/utils/wsFeatureFlag.js +20 -0
  92. package/dist/CallingClient/utils/wsFeatureFlag.js.map +1 -0
  93. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js +142 -0
  94. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js.map +1 -0
  95. package/dist/Contacts/ContactsClient.js +1206 -0
  96. package/dist/Contacts/ContactsClient.js.map +1 -0
  97. package/dist/Contacts/ContactsClient.test.js +1004 -0
  98. package/dist/Contacts/ContactsClient.test.js.map +1 -0
  99. package/dist/Contacts/constants.js +40 -0
  100. package/dist/Contacts/constants.js.map +1 -0
  101. package/dist/Contacts/contactFixtures.js +430 -0
  102. package/dist/Contacts/contactFixtures.js.map +1 -0
  103. package/dist/Contacts/types.js +43 -0
  104. package/dist/Contacts/types.js.map +1 -0
  105. package/dist/Errors/catalog/CallError.js +89 -0
  106. package/dist/Errors/catalog/CallError.js.map +1 -0
  107. package/dist/Errors/catalog/CallingDeviceError.js +83 -0
  108. package/dist/Errors/catalog/CallingDeviceError.js.map +1 -0
  109. package/dist/Errors/catalog/ExtendedError.js +42 -0
  110. package/dist/Errors/catalog/ExtendedError.js.map +1 -0
  111. package/dist/Errors/catalog/LineError.js +85 -0
  112. package/dist/Errors/catalog/LineError.js.map +1 -0
  113. package/dist/Errors/index.js +28 -0
  114. package/dist/Errors/index.js.map +1 -0
  115. package/dist/Errors/types.js +59 -0
  116. package/dist/Errors/types.js.map +1 -0
  117. package/dist/Events/impl/index.js +79 -0
  118. package/dist/Events/impl/index.js.map +1 -0
  119. package/dist/Events/types.js +97 -0
  120. package/dist/Events/types.js.map +1 -0
  121. package/dist/Logger/index.js +228 -0
  122. package/dist/Logger/index.js.map +1 -0
  123. package/dist/Logger/index.test.js +87 -0
  124. package/dist/Logger/index.test.js.map +1 -0
  125. package/dist/Logger/types.js +34 -0
  126. package/dist/Logger/types.js.map +1 -0
  127. package/dist/Metrics/index.js +534 -0
  128. package/dist/Metrics/index.js.map +1 -0
  129. package/dist/Metrics/index.test.js +463 -0
  130. package/dist/Metrics/index.test.js.map +1 -0
  131. package/dist/Metrics/types.js +64 -0
  132. package/dist/Metrics/types.js.map +1 -0
  133. package/dist/SDKConnector/index.js +134 -0
  134. package/dist/SDKConnector/index.js.map +1 -0
  135. package/dist/SDKConnector/index.test.js +9 -0
  136. package/dist/SDKConnector/index.test.js.map +1 -0
  137. package/dist/SDKConnector/types.js +7 -0
  138. package/dist/SDKConnector/types.js.map +1 -0
  139. package/dist/SDKConnector/utils.js +39 -0
  140. package/dist/SDKConnector/utils.js.map +1 -0
  141. package/dist/SDKConnector/utils.test.js +9 -0
  142. package/dist/SDKConnector/utils.test.js.map +1 -0
  143. package/dist/Voicemail/BroadworksBackendConnector.js +699 -0
  144. package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -0
  145. package/dist/Voicemail/BroadworksBackendConnector.test.js +820 -0
  146. package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -0
  147. package/dist/Voicemail/UcmBackendConnector.js +628 -0
  148. package/dist/Voicemail/UcmBackendConnector.js.map +1 -0
  149. package/dist/Voicemail/UcmBackendConnector.test.js +738 -0
  150. package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -0
  151. package/dist/Voicemail/Voicemail.js +472 -0
  152. package/dist/Voicemail/Voicemail.js.map +1 -0
  153. package/dist/Voicemail/Voicemail.test.js +391 -0
  154. package/dist/Voicemail/Voicemail.test.js.map +1 -0
  155. package/dist/Voicemail/WxCallBackendConnector.js +657 -0
  156. package/dist/Voicemail/WxCallBackendConnector.js.map +1 -0
  157. package/dist/Voicemail/WxCallBackendConnector.test.js +1225 -0
  158. package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -0
  159. package/dist/Voicemail/constants.js +61 -0
  160. package/dist/Voicemail/constants.js.map +1 -0
  161. package/dist/Voicemail/types.js +7 -0
  162. package/dist/Voicemail/types.js.map +1 -0
  163. package/dist/Voicemail/voicemailFixture.js +524 -0
  164. package/dist/Voicemail/voicemailFixture.js.map +1 -0
  165. package/dist/api.js +157 -0
  166. package/dist/api.js.map +1 -0
  167. package/dist/common/Utils.js +1542 -0
  168. package/dist/common/Utils.js.map +1 -0
  169. package/dist/common/Utils.test.js +1989 -0
  170. package/dist/common/Utils.test.js.map +1 -0
  171. package/dist/common/constants.js +62 -0
  172. package/dist/common/constants.js.map +1 -0
  173. package/dist/common/index.js +19 -0
  174. package/dist/common/index.js.map +1 -0
  175. package/dist/common/testUtil.js +988 -0
  176. package/dist/common/testUtil.js.map +1 -0
  177. package/dist/common/types.js +75 -0
  178. package/dist/common/types.js.map +1 -0
  179. package/dist/index.js +321 -0
  180. package/dist/index.js.map +1 -0
  181. package/dist/module/CallHistory/CallHistory.js +28 -17
  182. package/dist/module/CallingClient/CallingClient.js +157 -4
  183. package/dist/module/CallingClient/calling/call.js +12 -8
  184. package/dist/module/CallingClient/calling/callManager.js +29 -10
  185. package/dist/module/CallingClient/calling/types.js +2 -0
  186. package/dist/module/CallingClient/constants.js +8 -0
  187. package/dist/module/CallingClient/registration/register.js +46 -16
  188. package/dist/module/CallingClient/utils/constants.js +30 -0
  189. package/dist/module/CallingClient/utils/index.js +5 -0
  190. package/dist/module/CallingClient/utils/mobiusSocketMapper.js +56 -0
  191. package/dist/module/CallingClient/utils/request.js +112 -0
  192. package/dist/module/CallingClient/utils/types.js +1 -0
  193. package/dist/module/CallingClient/utils/wsFeatureFlag.js +5 -0
  194. package/dist/module/Events/types.js +0 -10
  195. package/dist/module/SDKConnector/index.js +17 -0
  196. package/dist/module/common/Utils.js +35 -4
  197. package/dist/module/common/testUtil.js +3 -0
  198. package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
  199. package/dist/types/CallingClient/CallingClient.d.ts +10 -1
  200. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  201. package/dist/types/CallingClient/calling/call.d.ts +1 -0
  202. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  203. package/dist/types/CallingClient/calling/callManager.d.ts +5 -4
  204. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  205. package/dist/types/CallingClient/calling/types.d.ts +21 -9
  206. package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
  207. package/dist/types/CallingClient/constants.d.ts +8 -0
  208. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  209. package/dist/types/CallingClient/registration/register.d.ts +3 -1
  210. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  211. package/dist/types/CallingClient/registration/types.d.ts +2 -1
  212. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  213. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
  214. package/dist/types/CallingClient/types.d.ts +3 -1
  215. package/dist/types/CallingClient/types.d.ts.map +1 -1
  216. package/dist/types/CallingClient/utils/constants.d.ts +30 -0
  217. package/dist/types/CallingClient/utils/constants.d.ts.map +1 -0
  218. package/dist/types/CallingClient/utils/index.d.ts +6 -0
  219. package/dist/types/CallingClient/utils/index.d.ts.map +1 -0
  220. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +4 -0
  221. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -0
  222. package/dist/types/CallingClient/utils/request.d.ts +20 -0
  223. package/dist/types/CallingClient/utils/request.d.ts.map +1 -0
  224. package/dist/types/CallingClient/utils/types.d.ts +23 -0
  225. package/dist/types/CallingClient/utils/types.d.ts.map +1 -0
  226. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts +4 -0
  227. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts.map +1 -0
  228. package/dist/types/Events/types.d.ts +0 -10
  229. package/dist/types/Events/types.d.ts.map +1 -1
  230. package/dist/types/SDKConnector/index.d.ts +2 -0
  231. package/dist/types/SDKConnector/index.d.ts.map +1 -1
  232. package/dist/types/SDKConnector/types.d.ts +11 -0
  233. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  234. package/dist/types/common/Utils.d.ts +4 -1
  235. package/dist/types/common/Utils.d.ts.map +1 -1
  236. package/dist/types/common/testUtil.d.ts +3 -0
  237. package/dist/types/common/testUtil.d.ts.map +1 -1
  238. package/dist/types/common/types.d.ts +5 -0
  239. package/dist/types/common/types.d.ts.map +1 -1
  240. package/package.json +8 -4
@@ -0,0 +1,303 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
6
+ var _uuid = require("uuid");
7
+ var _webWorker = _interopRequireDefault(require("./webWorker"));
8
+ var _types = require("../../common/types");
9
+ global.self = global;
10
+ jest.mock('uuid');
11
+ describe('webWorker', function () {
12
+ var postMessageSpy;
13
+ var capturedIntervalCallback;
14
+ var capturedIntervalTimer;
15
+ var clearIntervalSpy;
16
+ beforeEach(function () {
17
+ jest.useFakeTimers();
18
+ global.fetch = jest.fn();
19
+ _uuid.v4.mockReturnValue('mock-uuid');
20
+ postMessageSpy = jest.spyOn(global, 'postMessage').mockImplementation(function () {});
21
+ clearIntervalSpy = jest.spyOn(global, 'clearInterval');
22
+
23
+ // Overriding setInterval so that we capture the callback rather than schedule a timer
24
+ jest.spyOn(global, 'setInterval').mockImplementation(
25
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
26
+ function (callback, interval) {
27
+ capturedIntervalCallback = callback;
28
+ // Create a dummy timer object (could be any non-null value)
29
+ capturedIntervalTimer = {
30
+ dummy: true
31
+ };
32
+ return capturedIntervalTimer;
33
+ });
34
+ });
35
+ afterEach(function () {
36
+ jest.clearAllMocks();
37
+ jest.clearAllTimers();
38
+ jest.useRealTimers();
39
+ });
40
+ it('should start keepalive lifecycle correctly', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
41
+ var fakeSuccessResponse, failureHeaders, fakeFailureResponse;
42
+ return _regenerator.default.wrap(function (_context) {
43
+ while (1) switch (_context.prev = _context.next) {
44
+ case 0:
45
+ fakeSuccessResponse = {
46
+ ok: true,
47
+ status: 200
48
+ };
49
+ global.fetch.mockResolvedValue(fakeSuccessResponse);
50
+ (0, _webWorker.default)({
51
+ data: {
52
+ type: _types.WorkerMessageType.START_KEEPALIVE,
53
+ accessToken: 'dummy',
54
+ deviceUrl: 'dummyDevice',
55
+ interval: 1,
56
+ retryCountThreshold: 3,
57
+ url: 'http://example.com'
58
+ }
59
+ });
60
+
61
+ // Manually invoke the captured interval callback to simulate one tick
62
+ _context.next = 1;
63
+ return capturedIntervalCallback();
64
+ case 1:
65
+ expect(global.fetch.mock.calls.length).toBe(1);
66
+ expect(global.fetch).toHaveBeenCalledWith('http://example.com/status', {
67
+ method: 'POST',
68
+ headers: {
69
+ 'cisco-device-url': 'dummyDevice',
70
+ 'spark-user-agent': 'webex-calling/beta',
71
+ Authorization: 'dummy',
72
+ trackingId: 'web_worker_mock-uuid'
73
+ }
74
+ });
75
+ expect(postMessageSpy).not.toHaveBeenCalled();
76
+ failureHeaders = {
77
+ has: function has(key) {
78
+ return key === 'Retry-After' || key === 'Trackingid';
79
+ },
80
+ get: function get(key) {
81
+ return (
82
+ // eslint-disable-next-line no-nested-ternary
83
+ key === 'Retry-After' ? '10' : key === 'Trackingid' ? 'web_worker_mock-uuid' : null
84
+ );
85
+ }
86
+ };
87
+ fakeFailureResponse = {
88
+ ok: false,
89
+ status: 429,
90
+ statusText: 'Too Many Requests',
91
+ headers: failureHeaders
92
+ };
93
+ global.fetch.mockResolvedValue(fakeFailureResponse);
94
+ (0, _webWorker.default)({
95
+ data: {
96
+ type: _types.WorkerMessageType.START_KEEPALIVE,
97
+ accessToken: 'dummy',
98
+ deviceUrl: 'dummyDevice',
99
+ interval: 1,
100
+ retryCountThreshold: 3,
101
+ url: 'http://example.com'
102
+ }
103
+ });
104
+
105
+ // Manually invoke the captured interval callback to simulate one tick
106
+ _context.next = 2;
107
+ return capturedIntervalCallback();
108
+ case 2:
109
+ expect(global.fetch.mock.calls.length).toBe(2);
110
+ expect(postMessageSpy).toHaveBeenCalledWith({
111
+ type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
112
+ err: {
113
+ headers: {
114
+ 'retry-after': '10',
115
+ trackingid: 'web_worker_mock-uuid'
116
+ },
117
+ statusCode: 429,
118
+ statusText: 'Too Many Requests',
119
+ type: undefined
120
+ },
121
+ keepAliveRetryCount: 1
122
+ });
123
+ case 3:
124
+ case "end":
125
+ return _context.stop();
126
+ }
127
+ }, _callee);
128
+ })));
129
+ it('should post KEEPALIVE_FAILURE when fetch fails', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
130
+ var failureHeaders2;
131
+ return _regenerator.default.wrap(function (_context2) {
132
+ while (1) switch (_context2.prev = _context2.next) {
133
+ case 0:
134
+ failureHeaders2 = {
135
+ has: function has(key) {
136
+ return key === 'Trackingid';
137
+ },
138
+ get: function get(key) {
139
+ return key === 'Trackingid' ? 'web_worker_mock-uuid' : null;
140
+ }
141
+ };
142
+ global.fetch.mockResolvedValueOnce({
143
+ ok: false,
144
+ status: 401,
145
+ statusText: 'Unauthorized',
146
+ headers: failureHeaders2
147
+ });
148
+ (0, _webWorker.default)({
149
+ data: {
150
+ type: _types.WorkerMessageType.START_KEEPALIVE,
151
+ accessToken: 'dummy',
152
+ deviceUrl: 'dummyDevice',
153
+ interval: 1,
154
+ retryCountThreshold: 1,
155
+ url: 'http://example.com'
156
+ }
157
+ });
158
+ _context2.next = 1;
159
+ return capturedIntervalCallback();
160
+ case 1:
161
+ expect(postMessageSpy).toHaveBeenCalledWith({
162
+ type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
163
+ err: {
164
+ headers: {
165
+ trackingid: 'web_worker_mock-uuid'
166
+ },
167
+ statusCode: 401,
168
+ statusText: 'Unauthorized',
169
+ type: undefined
170
+ },
171
+ keepAliveRetryCount: 1
172
+ });
173
+ case 2:
174
+ case "end":
175
+ return _context2.stop();
176
+ }
177
+ }, _callee2);
178
+ })));
179
+ it('should post KEEPALIVE_SUCCESS after a failure when fetch succeeds', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
180
+ var failureHeaders3, mockError;
181
+ return _regenerator.default.wrap(function (_context3) {
182
+ while (1) switch (_context3.prev = _context3.next) {
183
+ case 0:
184
+ // Set fetch so that first tick rejects (failure) and second tick resolves (success)
185
+ failureHeaders3 = {
186
+ has: function has(key) {
187
+ return key === 'Trackingid';
188
+ },
189
+ get: function get(key) {
190
+ return key === 'Trackingid' ? 'web_worker_mock-uuid' : null;
191
+ }
192
+ };
193
+ mockError = {
194
+ ok: false,
195
+ status: 404,
196
+ statusText: 'Not Found',
197
+ headers: failureHeaders3
198
+ };
199
+ global.fetch.mockResolvedValueOnce(mockError).mockResolvedValueOnce({
200
+ ok: true,
201
+ status: 200
202
+ });
203
+ (0, _webWorker.default)({
204
+ data: {
205
+ type: _types.WorkerMessageType.START_KEEPALIVE,
206
+ accessToken: 'dummy',
207
+ deviceUrl: 'dummyDevice',
208
+ interval: 1,
209
+ retryCountThreshold: 3,
210
+ url: 'http://example.com'
211
+ }
212
+ });
213
+
214
+ // First tick: trigger failure
215
+ _context3.next = 1;
216
+ return capturedIntervalCallback();
217
+ case 1:
218
+ expect(postMessageSpy.mock.calls[0][0].type).toBe(_types.WorkerMessageType.KEEPALIVE_FAILURE);
219
+
220
+ // Second tick: trigger success.
221
+ _context3.next = 2;
222
+ return capturedIntervalCallback();
223
+ case 2:
224
+ expect(postMessageSpy.mock.calls[1][0].type).toBe(_types.WorkerMessageType.KEEPALIVE_SUCCESS);
225
+ expect(postMessageSpy.mock.calls[1][0].statusCode).toBe(200);
226
+ case 3:
227
+ case "end":
228
+ return _context3.stop();
229
+ }
230
+ }, _callee3);
231
+ })));
232
+ it('should clear keepalive timer on receiving CLEAR_KEEPALIVE message', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4() {
233
+ var fakeSuccessResponse, startEvent;
234
+ return _regenerator.default.wrap(function (_context4) {
235
+ while (1) switch (_context4.prev = _context4.next) {
236
+ case 0:
237
+ fakeSuccessResponse = {
238
+ ok: true,
239
+ status: 200
240
+ };
241
+ global.fetch.mockResolvedValue(fakeSuccessResponse);
242
+ startEvent = {
243
+ data: {
244
+ type: _types.WorkerMessageType.START_KEEPALIVE,
245
+ accessToken: 'dummy',
246
+ deviceUrl: 'dummyDevice',
247
+ interval: 1,
248
+ retryCountThreshold: 1,
249
+ url: 'http://example.com'
250
+ }
251
+ };
252
+ (0, _webWorker.default)(startEvent);
253
+ (0, _webWorker.default)({
254
+ data: {
255
+ type: _types.WorkerMessageType.CLEAR_KEEPALIVE
256
+ }
257
+ });
258
+ jest.advanceTimersByTime(3000);
259
+ expect(global.fetch.mock.calls.length).toBeLessThanOrEqual(3);
260
+ expect(clearIntervalSpy).toHaveBeenCalled();
261
+ case 1:
262
+ case "end":
263
+ return _context4.stop();
264
+ }
265
+ }, _callee4);
266
+ })));
267
+ it('improve coverage: should not clear keepalive timer on receiving CLEAR_KEEPALIVE message without keepTimer', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5() {
268
+ var fakeSuccessResponse, startEvent;
269
+ return _regenerator.default.wrap(function (_context5) {
270
+ while (1) switch (_context5.prev = _context5.next) {
271
+ case 0:
272
+ jest.spyOn(global, 'setInterval').mockReturnValue(undefined);
273
+ fakeSuccessResponse = {
274
+ ok: true,
275
+ status: 200
276
+ };
277
+ global.fetch.mockResolvedValue(fakeSuccessResponse);
278
+ startEvent = {
279
+ data: {
280
+ type: _types.WorkerMessageType.START_KEEPALIVE,
281
+ accessToken: 'dummy',
282
+ deviceUrl: 'dummyDevice',
283
+ interval: 1,
284
+ retryCountThreshold: 1,
285
+ url: 'http://example.com'
286
+ }
287
+ };
288
+ (0, _webWorker.default)(startEvent);
289
+ (0, _webWorker.default)({
290
+ data: {
291
+ type: _types.WorkerMessageType.CLEAR_KEEPALIVE
292
+ }
293
+ });
294
+ jest.advanceTimersByTime(3000);
295
+ expect(clearIntervalSpy).not.toHaveBeenCalled();
296
+ case 1:
297
+ case "end":
298
+ return _context5.stop();
299
+ }
300
+ }, _callee5);
301
+ })));
302
+ });
303
+ //# sourceMappingURL=webWorker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_uuid","require","_webWorker","_interopRequireDefault","_types","global","self","jest","mock","describe","postMessageSpy","capturedIntervalCallback","capturedIntervalTimer","clearIntervalSpy","beforeEach","useFakeTimers","fetch","fn","uuid","mockReturnValue","spyOn","mockImplementation","callback","interval","dummy","afterEach","clearAllMocks","clearAllTimers","useRealTimers","it","_asyncToGenerator2","default","_regenerator","mark","_callee","fakeSuccessResponse","failureHeaders","fakeFailureResponse","wrap","_context","prev","next","ok","status","mockResolvedValue","messageHandler","data","type","WorkerMessageType","START_KEEPALIVE","accessToken","deviceUrl","retryCountThreshold","url","expect","calls","length","toBe","toHaveBeenCalledWith","method","headers","Authorization","trackingId","not","toHaveBeenCalled","has","key","get","statusText","KEEPALIVE_FAILURE","err","trackingid","statusCode","undefined","keepAliveRetryCount","stop","_callee2","failureHeaders2","_context2","mockResolvedValueOnce","_callee3","failureHeaders3","mockError","_context3","KEEPALIVE_SUCCESS","_callee4","startEvent","_context4","CLEAR_KEEPALIVE","advanceTimersByTime","toBeLessThanOrEqual","_callee5","_context5"],"sources":["webWorker.test.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport messageHandler from './webWorker';\nimport {WorkerMessageType} from '../../common/types';\n\n(global as any).self = global;\n\njest.mock('uuid');\n\ndescribe('webWorker', () => {\n let postMessageSpy: jest.SpyInstance;\n let capturedIntervalCallback: any;\n let capturedIntervalTimer: any;\n let clearIntervalSpy: jest.SpyInstance;\n\n beforeEach(() => {\n jest.useFakeTimers();\n global.fetch = jest.fn();\n (uuid as jest.Mock).mockReturnValue('mock-uuid');\n\n postMessageSpy = jest.spyOn(global, 'postMessage').mockImplementation(() => {});\n clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n // Overriding setInterval so that we capture the callback rather than schedule a timer\n jest.spyOn(global, 'setInterval').mockImplementation(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n (callback: any, interval: number): NodeJS.Timeout => {\n capturedIntervalCallback = callback;\n // Create a dummy timer object (could be any non-null value)\n capturedIntervalTimer = {dummy: true};\n\n return capturedIntervalTimer as NodeJS.Timeout;\n }\n );\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n jest.clearAllTimers();\n jest.useRealTimers();\n });\n\n it('should start keepalive lifecycle correctly', async () => {\n const fakeSuccessResponse = {\n ok: true,\n status: 200,\n };\n (global.fetch as jest.Mock).mockResolvedValue(fakeSuccessResponse);\n\n messageHandler({\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 3,\n url: 'http://example.com',\n },\n } as MessageEvent);\n\n // Manually invoke the captured interval callback to simulate one tick\n await capturedIntervalCallback();\n\n expect((global.fetch as jest.Mock).mock.calls.length).toBe(1);\n expect(global.fetch).toHaveBeenCalledWith('http://example.com/status', {\n method: 'POST',\n headers: {\n 'cisco-device-url': 'dummyDevice',\n 'spark-user-agent': 'webex-calling/beta',\n Authorization: 'dummy',\n trackingId: 'web_worker_mock-uuid',\n },\n });\n expect(postMessageSpy).not.toHaveBeenCalled();\n\n const failureHeaders = {\n has: (key: string) => key === 'Retry-After' || key === 'Trackingid',\n get: (key: string) =>\n // eslint-disable-next-line no-nested-ternary\n key === 'Retry-After' ? '10' : key === 'Trackingid' ? 'web_worker_mock-uuid' : null,\n };\n const fakeFailureResponse = {\n ok: false,\n status: 429,\n statusText: 'Too Many Requests',\n headers: failureHeaders,\n };\n (global.fetch as jest.Mock).mockResolvedValue(fakeFailureResponse);\n\n messageHandler({\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 3,\n url: 'http://example.com',\n },\n } as MessageEvent);\n\n // Manually invoke the captured interval callback to simulate one tick\n await capturedIntervalCallback();\n\n expect((global.fetch as jest.Mock).mock.calls.length).toBe(2);\n expect(postMessageSpy).toHaveBeenCalledWith({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {\n headers: {'retry-after': '10', trackingid: 'web_worker_mock-uuid'},\n statusCode: 429,\n statusText: 'Too Many Requests',\n type: undefined,\n },\n keepAliveRetryCount: 1,\n });\n });\n\n it('should post KEEPALIVE_FAILURE when fetch fails', async () => {\n const failureHeaders2 = {\n has: (key: string) => key === 'Trackingid',\n get: (key: string) => (key === 'Trackingid' ? 'web_worker_mock-uuid' : null),\n };\n (global.fetch as jest.Mock).mockResolvedValueOnce({\n ok: false,\n status: 401,\n statusText: 'Unauthorized',\n headers: failureHeaders2,\n });\n\n messageHandler({\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 1,\n url: 'http://example.com',\n },\n } as MessageEvent);\n\n await capturedIntervalCallback();\n\n expect(postMessageSpy).toHaveBeenCalledWith({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {\n headers: {trackingid: 'web_worker_mock-uuid'},\n statusCode: 401,\n statusText: 'Unauthorized',\n type: undefined,\n },\n keepAliveRetryCount: 1,\n });\n });\n\n it('should post KEEPALIVE_SUCCESS after a failure when fetch succeeds', async () => {\n // Set fetch so that first tick rejects (failure) and second tick resolves (success)\n const failureHeaders3 = {\n has: (key: string) => key === 'Trackingid',\n get: (key: string) => (key === 'Trackingid' ? 'web_worker_mock-uuid' : null),\n };\n const mockError = {\n ok: false,\n status: 404,\n statusText: 'Not Found',\n headers: failureHeaders3,\n };\n\n (global.fetch as jest.Mock)\n .mockResolvedValueOnce(mockError)\n .mockResolvedValueOnce({ok: true, status: 200});\n\n messageHandler({\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 3,\n url: 'http://example.com',\n },\n } as MessageEvent);\n\n // First tick: trigger failure\n await capturedIntervalCallback();\n expect(postMessageSpy.mock.calls[0][0].type).toBe(WorkerMessageType.KEEPALIVE_FAILURE);\n\n // Second tick: trigger success.\n await capturedIntervalCallback();\n expect(postMessageSpy.mock.calls[1][0].type).toBe(WorkerMessageType.KEEPALIVE_SUCCESS);\n expect(postMessageSpy.mock.calls[1][0].statusCode).toBe(200);\n });\n\n it('should clear keepalive timer on receiving CLEAR_KEEPALIVE message', async () => {\n const fakeSuccessResponse = {ok: true, status: 200};\n (global.fetch as jest.Mock).mockResolvedValue(fakeSuccessResponse);\n\n const startEvent = {\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 1,\n url: 'http://example.com',\n },\n };\n\n messageHandler(startEvent as MessageEvent);\n messageHandler({data: {type: WorkerMessageType.CLEAR_KEEPALIVE}} as MessageEvent);\n\n jest.advanceTimersByTime(3000);\n expect((global.fetch as jest.Mock).mock.calls.length).toBeLessThanOrEqual(3);\n expect(clearIntervalSpy).toHaveBeenCalled();\n });\n\n it('improve coverage: should not clear keepalive timer on receiving CLEAR_KEEPALIVE message without keepTimer', async () => {\n jest.spyOn(global, 'setInterval').mockReturnValue(undefined);\n const fakeSuccessResponse = {ok: true, status: 200};\n (global.fetch as jest.Mock).mockResolvedValue(fakeSuccessResponse);\n\n const startEvent = {\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 1,\n url: 'http://example.com',\n },\n };\n\n messageHandler(startEvent as MessageEvent);\n messageHandler({data: {type: WorkerMessageType.CLEAR_KEEPALIVE}} as MessageEvent);\n\n jest.advanceTimersByTime(3000);\n expect(clearIntervalSpy).not.toHaveBeenCalled();\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ /**
9
+ * This file contains the stringified version of the web worker code from webWorker.ts
10
+ * It can be used to create a Blob URL for the worker instead of loading it from a separate file
11
+ */
12
+
13
+ var webWorkerStr = "/* eslint-env worker */\n\nconst uuid = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\n// Enum values from the original imports\nconst HTTP_METHODS = {\n GET: 'GET',\n POST: 'POST',\n PUT: 'PUT',\n DELETE: 'DELETE',\n PATCH: 'PATCH',\n};\n\nconst WorkerMessageType = {\n START_KEEPALIVE: 'START_KEEPALIVE',\n CLEAR_KEEPALIVE: 'CLEAR_KEEPALIVE',\n KEEPALIVE_SUCCESS: 'KEEPALIVE_SUCCESS',\n KEEPALIVE_FAILURE: 'KEEPALIVE_FAILURE',\n};\n\nlet keepaliveTimer;\n\nconst messageHandler = (event) => {\n const {type} = event.data;\n\n const postKeepAlive = async (accessToken, deviceUrl, url) => {\n const response = await fetch(`${url}/status`, {\n method: HTTP_METHODS.POST,\n headers: {\n 'cisco-device-url': deviceUrl,\n 'spark-user-agent': 'webex-calling/beta',\n Authorization: `${accessToken}`,\n trackingId: `web_worker_${uuid()}`,\n },\n });\n\n if (!response.ok) {\n throw response;\n }\n\n return response;\n };\n\n if (type === WorkerMessageType.START_KEEPALIVE) {\n let keepAliveRetryCount = 0;\n const {accessToken, deviceUrl, interval, retryCountThreshold, url} = event.data;\n\n if (keepaliveTimer) {\n clearInterval(keepaliveTimer);\n keepaliveTimer = undefined;\n }\n\n keepaliveTimer = setInterval(async () => {\n if (keepAliveRetryCount < retryCountThreshold) {\n try {\n const res = await postKeepAlive(accessToken, deviceUrl, url);\n const statusCode = res.status;\n if (keepAliveRetryCount > 0) {\n self.postMessage({\n type: WorkerMessageType.KEEPALIVE_SUCCESS,\n statusCode,\n });\n }\n keepAliveRetryCount = 0;\n } catch (err) {\n let headers = {};\n if(err.headers?.has('Retry-After')) {\n headers['retry-after'] = err.headers.get('Retry-After');\n } \n\n if(err.headers?.has('Trackingid')) {\n headers['trackingid'] = err.headers.get('Trackingid');\n } \n\n const error = {\n headers,\n statusCode: err.status,\n statusText: err.statusText,\n type: err.type,\n };\n\n keepAliveRetryCount += 1\n self.postMessage({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: error,\n keepAliveRetryCount,\n });\n }\n }\n }, interval * 1000);\n }\n\n if (type === WorkerMessageType.CLEAR_KEEPALIVE) {\n if (keepaliveTimer) {\n clearInterval(keepaliveTimer);\n keepaliveTimer = undefined;\n }\n }\n};\n\nself.addEventListener('message', messageHandler);\n";
14
+ var _default = exports.default = webWorkerStr;
15
+ //# sourceMappingURL=webWorkerStr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["webWorkerStr","_default","exports","default"],"sources":["webWorkerStr.ts"],"sourcesContent":["/**\n * This file contains the stringified version of the web worker code from webWorker.ts\n * It can be used to create a Blob URL for the worker instead of loading it from a separate file\n */\n\nconst webWorkerStr = `/* eslint-env worker */\n\nconst uuid = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\n// Enum values from the original imports\nconst HTTP_METHODS = {\n GET: 'GET',\n POST: 'POST',\n PUT: 'PUT',\n DELETE: 'DELETE',\n PATCH: 'PATCH',\n};\n\nconst WorkerMessageType = {\n START_KEEPALIVE: 'START_KEEPALIVE',\n CLEAR_KEEPALIVE: 'CLEAR_KEEPALIVE',\n KEEPALIVE_SUCCESS: 'KEEPALIVE_SUCCESS',\n KEEPALIVE_FAILURE: 'KEEPALIVE_FAILURE',\n};\n\nlet keepaliveTimer;\n\nconst messageHandler = (event) => {\n const {type} = event.data;\n\n const postKeepAlive = async (accessToken, deviceUrl, url) => {\n const response = await fetch(\\`\\${url}/status\\`, {\n method: HTTP_METHODS.POST,\n headers: {\n 'cisco-device-url': deviceUrl,\n 'spark-user-agent': 'webex-calling/beta',\n Authorization: \\`\\${accessToken}\\`,\n trackingId: \\`web_worker_\\${uuid()}\\`,\n },\n });\n\n if (!response.ok) {\n throw response;\n }\n\n return response;\n };\n\n if (type === WorkerMessageType.START_KEEPALIVE) {\n let keepAliveRetryCount = 0;\n const {accessToken, deviceUrl, interval, retryCountThreshold, url} = event.data;\n\n if (keepaliveTimer) {\n clearInterval(keepaliveTimer);\n keepaliveTimer = undefined;\n }\n\n keepaliveTimer = setInterval(async () => {\n if (keepAliveRetryCount < retryCountThreshold) {\n try {\n const res = await postKeepAlive(accessToken, deviceUrl, url);\n const statusCode = res.status;\n if (keepAliveRetryCount > 0) {\n self.postMessage({\n type: WorkerMessageType.KEEPALIVE_SUCCESS,\n statusCode,\n });\n }\n keepAliveRetryCount = 0;\n } catch (err) {\n let headers = {};\n if(err.headers?.has('Retry-After')) {\n headers['retry-after'] = err.headers.get('Retry-After');\n } \n\n if(err.headers?.has('Trackingid')) {\n headers['trackingid'] = err.headers.get('Trackingid');\n } \n\n const error = {\n headers,\n statusCode: err.status,\n statusText: err.statusText,\n type: err.type,\n };\n\n keepAliveRetryCount += 1\n self.postMessage({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: error,\n keepAliveRetryCount,\n });\n }\n }\n }, interval * 1000);\n }\n\n if (type === WorkerMessageType.CLEAR_KEEPALIVE) {\n if (keepaliveTimer) {\n clearInterval(keepaliveTimer);\n keepaliveTimer = undefined;\n }\n }\n};\n\nself.addEventListener('message', messageHandler);\n`;\n\nexport default webWorkerStr;\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;;AAEA,IAAMA,YAAY,2zFA2GjB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaH,YAAY","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import * as Media from '@webex/internal-media-core';\nimport {LOGGER} from '../Logger/types';\nimport {ISDKConnector} from '../SDKConnector/types';\nimport {Eventing} from '../Events/impl';\nimport {CallingClientEventTypes} from '../Events/types';\nimport {DeviceType, ServiceData} from '../common/types';\nimport {ICall} from './calling/types';\nimport {CallingClientError} from '../Errors';\nimport {ILine} from './line/types';\n\nexport interface LoggerConfig {\n level: LOGGER;\n}\n\ninterface DiscoveryConfig {\n country: string;\n region: string;\n}\n\nexport interface CallingClientConfig {\n logger?: LoggerConfig;\n discovery?: DiscoveryConfig;\n serviceData?: ServiceData;\n jwe?: string;\n isMobiusSocketEnabled?: boolean;\n}\n\nexport type CallingClientErrorEmitterCallback = (\n err: CallingClientError,\n finalError?: boolean\n) => void;\n\n/**\n * An interface for the `CallingClient` module.\n * The `CallingClient` module is designed to provide a set of APIs related to line registration and calling functionalities within the SDK.\n *\n * @example\n * ```javascript\n * const callingClient = createClient(webex, callingConfig);\n * ```\n */\nexport interface ICallingClient extends Eventing<CallingClientEventTypes> {\n /**\n * Represents the `mediaEngine for managing media-related operations within the CallingClient.\n * The media engine provides access to audio and video devices such as cameras, microphones, and speakers within the media layer.\n *\n * @public\n * @example\n * ```\n * const microphones = await callingClient.mediaEngine.Media.getMicrophones();\n * const speakers = await callingClient.mediaEngine.Media.getSpeakers();\n * const cameras = await callingClient.mediaEngine.Media.getCameras();\n * ```\n */\n mediaEngine: typeof Media;\n\n /**\n * @ignore\n */\n getSDKConnector(): ISDKConnector;\n\n /**\n * @ignore\n */\n getLoggingLevel(): LOGGER;\n\n /**\n * Retrieves details of the line object(s) belonging to a user.\n *\n * This method gathers all the {@link ILine} objects and organizes them into a dictionary\n * where keys represent `lineId`s and values are arrays of {@link ILine} objects registered with\n * the `callingClient`\n *\n * @example\n * ```typescript\n * const lines = callingClient.getLines();\n * ```\n * The `lines` response object will have `lineId` as its key and\n * a list {@link ILine} objects as it's value.\n * ```\n * {\n * 'lineId1': lineObj1,\n * 'lineId2': lineObj2,\n * }\n * ```\n */\n getLines(): Record<string, ILine>;\n\n /**\n * Retrieves the list of devices registered for the given userId from Mobius.\n * @param userId - The user identifier whose devices should be fetched.\n * @returns List of devices associated with the user.\n */\n getDevices(userId?: string): Promise<DeviceType[]>;\n\n /**\n * Retrieves a dictionary of active calls grouped by `lineId`.\n *\n * This method gathers active {@link ICall} objects and organizes them into a dictionary\n * where keys represent `lineId`s and values are arrays of {@link ICall} objects of active calls associated\n * with each line.\n *\n * @example\n * ```typescript\n * const activeCalls = callingClient.getActiveCalls();\n * ```\n * The `activeCalls` response object will have `lineId` as its key and\n * a list {@link ICall} objects as it's value.\n *\n * ```\n * {\n * 'line1': [call1, call2],\n * 'line2': [call3],\n * }\n * ```\n */\n getActiveCalls(): Record<string, ICall[]>;\n\n /**\n * Retrieves the {@link ICall} object for the currently connected call in the client.\n *\n * This method iterates through active call objects and returns the call\n * that is currently connected (not on hold).\n *\n * @example\n * ```typescript\n * const connectedCall : ICall = callingClient.getConnectedCall();\n * ```\n * The `connectedCall` object will be the Call object of the connected call with the client\n */\n getConnectedCall(): ICall | undefined;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.MOBIUS_SOCKET_MESSAGE_TYPE = void 0;
8
+ /**
9
+ * Mobius WebSocket event names for request and response messages
10
+ * Response events follow the pattern: `{request_event}.response`
11
+ */
12
+ // eslint-disable-next-line import/prefer-default-export
13
+ var MOBIUS_SOCKET_MESSAGE_TYPE = exports.MOBIUS_SOCKET_MESSAGE_TYPE = /*#__PURE__*/function (MOBIUS_SOCKET_MESSAGE_TYPE) {
14
+ MOBIUS_SOCKET_MESSAGE_TYPE["UNKNOWN"] = "UNKNOWN";
15
+ // Registration messages
16
+ MOBIUS_SOCKET_MESSAGE_TYPE["REGISTER"] = "register";
17
+ MOBIUS_SOCKET_MESSAGE_TYPE["REGISTER_RESPONSE"] = "register.response";
18
+ MOBIUS_SOCKET_MESSAGE_TYPE["UNREGISTER"] = "unregister";
19
+ MOBIUS_SOCKET_MESSAGE_TYPE["UNREGISTER_RESPONSE"] = "unregister.response";
20
+ MOBIUS_SOCKET_MESSAGE_TYPE["DEVICE_STATUS"] = "device_status";
21
+ MOBIUS_SOCKET_MESSAGE_TYPE["DEVICE_STATUS_RESPONSE"] = "device_status.response";
22
+ MOBIUS_SOCKET_MESSAGE_TYPE["DEVICE_GET"] = "device_get";
23
+ MOBIUS_SOCKET_MESSAGE_TYPE["DEVICE_GET_RESPONSE"] = "device_get.response";
24
+ MOBIUS_SOCKET_MESSAGE_TYPE["DEVICE_LIST"] = "device_list";
25
+ MOBIUS_SOCKET_MESSAGE_TYPE["DEVICE_LIST_RESPONSE"] = "device_list.response";
26
+ // Call messages
27
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_SETUP"] = "call_setup";
28
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_SETUP_RESPONSE"] = "call_setup.response";
29
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_STATE"] = "call_state";
30
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_STATE_RESPONSE"] = "call_state.response";
31
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_STATUS"] = "call_status";
32
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_STATUS_RESPONSE"] = "call_status.response";
33
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_MEDIA"] = "call_media";
34
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_MEDIA_RESPONSE"] = "call_media.response";
35
+ // Supplementary services messages
36
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_HOLD"] = "call_hold";
37
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_HOLD_RESPONSE"] = "call_hold.response";
38
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_RESUME"] = "call_resume";
39
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_RESUME_RESPONSE"] = "call_resume.response";
40
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_TRANSFER"] = "call_transfer";
41
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_TRANSFER_RESPONSE"] = "call_transfer.response";
42
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_DELETE"] = "call_delete";
43
+ MOBIUS_SOCKET_MESSAGE_TYPE["CALL_DELETE_RESPONSE"] = "call_delete.response";
44
+ return MOBIUS_SOCKET_MESSAGE_TYPE;
45
+ }({});
46
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MOBIUS_SOCKET_MESSAGE_TYPE","exports"],"sources":["constants.ts"],"sourcesContent":["/**\n * Mobius WebSocket event names for request and response messages\n * Response events follow the pattern: `{request_event}.response`\n */\n// eslint-disable-next-line import/prefer-default-export\nexport enum MOBIUS_SOCKET_MESSAGE_TYPE {\n UNKNOWN = 'UNKNOWN',\n\n // Registration messages\n REGISTER = 'register',\n REGISTER_RESPONSE = 'register.response',\n UNREGISTER = 'unregister',\n UNREGISTER_RESPONSE = 'unregister.response',\n DEVICE_STATUS = 'device_status',\n DEVICE_STATUS_RESPONSE = 'device_status.response',\n DEVICE_GET = 'device_get',\n DEVICE_GET_RESPONSE = 'device_get.response',\n DEVICE_LIST = 'device_list',\n DEVICE_LIST_RESPONSE = 'device_list.response',\n\n // Call messages\n CALL_SETUP = 'call_setup',\n CALL_SETUP_RESPONSE = 'call_setup.response',\n CALL_STATE = 'call_state',\n CALL_STATE_RESPONSE = 'call_state.response',\n CALL_STATUS = 'call_status',\n CALL_STATUS_RESPONSE = 'call_status.response',\n CALL_MEDIA = 'call_media',\n CALL_MEDIA_RESPONSE = 'call_media.response',\n\n // Supplementary services messages\n CALL_HOLD = 'call_hold',\n CALL_HOLD_RESPONSE = 'call_hold.response',\n CALL_RESUME = 'call_resume',\n CALL_RESUME_RESPONSE = 'call_resume.response',\n CALL_TRANSFER = 'call_transfer',\n CALL_TRANSFER_RESPONSE = 'call_transfer.response',\n\n CALL_DELETE = 'call_delete',\n CALL_DELETE_RESPONSE = 'call_delete.response',\n}\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AAAA,IACYA,0BAA0B,GAAAC,OAAA,CAAAD,0BAAA,0BAA1BA,0BAA0B;EAA1BA,0BAA0B;EAGpC;EAHUA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAepC;EAfUA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAyBpC;EAzBUA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAAA,OAA1BA,0BAA0B;AAAA","ignoreList":[]}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ var _request = require("./request");
9
+ _Object$keys(_request).forEach(function (key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ if (key in exports && exports[key] === _request[key]) return;
12
+ _Object$defineProperty(exports, key, {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _request[key];
16
+ }
17
+ });
18
+ });
19
+ var _types = require("./types");
20
+ _Object$keys(_types).forEach(function (key) {
21
+ if (key === "default" || key === "__esModule") return;
22
+ if (key in exports && exports[key] === _types[key]) return;
23
+ _Object$defineProperty(exports, key, {
24
+ enumerable: true,
25
+ get: function get() {
26
+ return _types[key];
27
+ }
28
+ });
29
+ });
30
+ var _mobiusSocketMapper = require("./mobiusSocketMapper");
31
+ _Object$keys(_mobiusSocketMapper).forEach(function (key) {
32
+ if (key === "default" || key === "__esModule") return;
33
+ if (key in exports && exports[key] === _mobiusSocketMapper[key]) return;
34
+ _Object$defineProperty(exports, key, {
35
+ enumerable: true,
36
+ get: function get() {
37
+ return _mobiusSocketMapper[key];
38
+ }
39
+ });
40
+ });
41
+ var _constants = require("./constants");
42
+ _Object$keys(_constants).forEach(function (key) {
43
+ if (key === "default" || key === "__esModule") return;
44
+ if (key in exports && exports[key] === _constants[key]) return;
45
+ _Object$defineProperty(exports, key, {
46
+ enumerable: true,
47
+ get: function get() {
48
+ return _constants[key];
49
+ }
50
+ });
51
+ });
52
+ var _wsFeatureFlag = require("./wsFeatureFlag");
53
+ _Object$keys(_wsFeatureFlag).forEach(function (key) {
54
+ if (key === "default" || key === "__esModule") return;
55
+ if (key in exports && exports[key] === _wsFeatureFlag[key]) return;
56
+ _Object$defineProperty(exports, key, {
57
+ enumerable: true,
58
+ get: function get() {
59
+ return _wsFeatureFlag[key];
60
+ }
61
+ });
62
+ });
63
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_request","require","_Object$keys","forEach","key","exports","_Object$defineProperty","enumerable","get","_types","_mobiusSocketMapper","_constants","_wsFeatureFlag"],"sources":["index.ts"],"sourcesContent":["export * from './request';\nexport * from './types';\nexport * from './mobiusSocketMapper';\nexport * from './constants';\nexport * from './wsFeatureFlag';\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAAAC,YAAA,CAAAF,QAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAJ,QAAA,CAAAI,GAAA;EAAAE,sBAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAR,QAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,MAAA,GAAAR,OAAA;AAAAC,YAAA,CAAAO,MAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,MAAA,CAAAL,GAAA;EAAAE,sBAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAC,MAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,mBAAA,GAAAT,OAAA;AAAAC,YAAA,CAAAQ,mBAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,mBAAA,CAAAN,GAAA;EAAAE,sBAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAE,mBAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,UAAA,GAAAV,OAAA;AAAAC,YAAA,CAAAS,UAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,UAAA,CAAAP,GAAA;EAAAE,sBAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAG,UAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,cAAA,GAAAX,OAAA;AAAAC,YAAA,CAAAU,cAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,cAAA,CAAAR,GAAA;EAAAE,sBAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAI,cAAA,CAAAR,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.deriveMobiusSocketMessageType = deriveMobiusSocketMessageType;
8
+ var _types = require("../../common/types");
9
+ var _constants = require("./constants");
10
+ /**
11
+ * Derives the Mobius Socket message type from the URI and HTTP method.
12
+ * Uses both the URI path pattern and the HTTP method to disambiguate operations
13
+ * that share the same endpoint (e.g., PATCH vs DELETE on calls/{callId}).
14
+ *
15
+ * @param uri - The request URI
16
+ * @param httpMethodType - The HTTP method used for the request
17
+ * @returns The socket message type based on the URI pattern and HTTP method
18
+ *
19
+ * @example
20
+ * deriveMobiusSocketMessageType('/api/v1/calling/web/device', HTTP_METHODS.POST)
21
+ * // returns 'register'
22
+ *
23
+ * deriveMobiusSocketMessageType('/api/v1/calling/web/devices/abc123/calls/xyz789', HTTP_METHODS.PATCH)
24
+ * // returns 'call_state'
25
+ *
26
+ * deriveMobiusSocketMessageType('/api/v1/calling/web/devices/abc123/calls/xyz789', HTTP_METHODS.DELETE)
27
+ * // returns 'call_delete'
28
+ */
29
+ // eslint-disable-next-line import/prefer-default-export
30
+ function deriveMobiusSocketMessageType(uri, httpMethodType) {
31
+ if (!uri) {
32
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN;
33
+ }
34
+
35
+ // --- Supplementary services: .../services/{service}/{action} ---
36
+ if (uri.includes('/services')) {
37
+ if (uri.includes('/callhold/hold')) {
38
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.CALL_HOLD;
39
+ }
40
+ if (uri.includes('/callhold/resume')) {
41
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.CALL_RESUME;
42
+ }
43
+ if (uri.includes('/calltransfer/commit')) {
44
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.CALL_TRANSFER;
45
+ }
46
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN;
47
+ }
48
+
49
+ // --- Call sub-resource actions (checked before bare calls/{callId}) ---
50
+
51
+ // Call media: .../calls/{callId}/media
52
+ if (uri.includes('/calls/') && uri.includes('/media')) {
53
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.CALL_MEDIA;
54
+ }
55
+
56
+ // Call status: .../calls/{callId}/status
57
+ if (uri.includes('/calls/') && uri.includes('/status')) {
58
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.CALL_STATUS;
59
+ }
60
+
61
+ // Call state or delete: .../calls/{callId} (PATCH → state, DELETE → delete)
62
+ if (uri.match(/\/calls\/[^/]+$/)) {
63
+ if (httpMethodType === _types.HTTP_METHODS.PATCH) {
64
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.CALL_STATE;
65
+ }
66
+ if (httpMethodType === _types.HTTP_METHODS.DELETE) {
67
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.CALL_DELETE;
68
+ }
69
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN;
70
+ }
71
+
72
+ // Call setup: .../devices/{deviceId}/call (singular)
73
+ if (uri.endsWith('/call')) {
74
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.CALL_SETUP;
75
+ }
76
+
77
+ // --- Device-level operations ---
78
+
79
+ // Device keepalive: .../devices/{deviceId}/status (no /calls/ in path)
80
+ if (uri.includes('/devices/') && uri.endsWith('/status')) {
81
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.DEVICE_STATUS;
82
+ }
83
+
84
+ // Device registration: .../calling/web/device (singular)
85
+ if (uri.endsWith('/device')) {
86
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.REGISTER;
87
+ }
88
+
89
+ // Device unregister or get: .../devices/{deviceId} (DELETE → unregister, GET → device_get)
90
+ if (uri.match(/\/devices\/[^/?]+$/) && !uri.includes('/calls')) {
91
+ if (httpMethodType === _types.HTTP_METHODS.DELETE) {
92
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.UNREGISTER;
93
+ }
94
+ if (httpMethodType === _types.HTTP_METHODS.GET) {
95
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.DEVICE_GET;
96
+ }
97
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN;
98
+ }
99
+
100
+ // Device list: .../devices or .../devices?userid=...
101
+ if (uri.includes('/devices') && !uri.match(/\/devices\/[^/?]+/)) {
102
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.DEVICE_LIST;
103
+ }
104
+ return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN;
105
+ }
106
+ //# sourceMappingURL=mobiusSocketMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_types","require","_constants","deriveMobiusSocketMessageType","uri","httpMethodType","MOBIUS_SOCKET_MESSAGE_TYPE","UNKNOWN","includes","CALL_HOLD","CALL_RESUME","CALL_TRANSFER","CALL_MEDIA","CALL_STATUS","match","HTTP_METHODS","PATCH","CALL_STATE","DELETE","CALL_DELETE","endsWith","CALL_SETUP","DEVICE_STATUS","REGISTER","UNREGISTER","GET","DEVICE_GET","DEVICE_LIST"],"sources":["mobiusSocketMapper.ts"],"sourcesContent":["import {HTTP_METHODS} from '../../common/types';\nimport {MOBIUS_SOCKET_MESSAGE_TYPE} from './constants';\n\n/**\n * Derives the Mobius Socket message type from the URI and HTTP method.\n * Uses both the URI path pattern and the HTTP method to disambiguate operations\n * that share the same endpoint (e.g., PATCH vs DELETE on calls/{callId}).\n *\n * @param uri - The request URI\n * @param httpMethodType - The HTTP method used for the request\n * @returns The socket message type based on the URI pattern and HTTP method\n *\n * @example\n * deriveMobiusSocketMessageType('/api/v1/calling/web/device', HTTP_METHODS.POST)\n * // returns 'register'\n *\n * deriveMobiusSocketMessageType('/api/v1/calling/web/devices/abc123/calls/xyz789', HTTP_METHODS.PATCH)\n * // returns 'call_state'\n *\n * deriveMobiusSocketMessageType('/api/v1/calling/web/devices/abc123/calls/xyz789', HTTP_METHODS.DELETE)\n * // returns 'call_delete'\n */\n// eslint-disable-next-line import/prefer-default-export\nexport function deriveMobiusSocketMessageType(\n uri?: string,\n httpMethodType?: HTTP_METHODS\n): MOBIUS_SOCKET_MESSAGE_TYPE {\n if (!uri) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN;\n }\n\n // --- Supplementary services: .../services/{service}/{action} ---\n if (uri.includes('/services')) {\n if (uri.includes('/callhold/hold')) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.CALL_HOLD;\n }\n if (uri.includes('/callhold/resume')) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.CALL_RESUME;\n }\n if (uri.includes('/calltransfer/commit')) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.CALL_TRANSFER;\n }\n\n return MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN;\n }\n\n // --- Call sub-resource actions (checked before bare calls/{callId}) ---\n\n // Call media: .../calls/{callId}/media\n if (uri.includes('/calls/') && uri.includes('/media')) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.CALL_MEDIA;\n }\n\n // Call status: .../calls/{callId}/status\n if (uri.includes('/calls/') && uri.includes('/status')) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.CALL_STATUS;\n }\n\n // Call state or delete: .../calls/{callId} (PATCH → state, DELETE → delete)\n if (uri.match(/\\/calls\\/[^/]+$/)) {\n if (httpMethodType === HTTP_METHODS.PATCH) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.CALL_STATE;\n }\n if (httpMethodType === HTTP_METHODS.DELETE) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.CALL_DELETE;\n }\n\n return MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN;\n }\n\n // Call setup: .../devices/{deviceId}/call (singular)\n if (uri.endsWith('/call')) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.CALL_SETUP;\n }\n\n // --- Device-level operations ---\n\n // Device keepalive: .../devices/{deviceId}/status (no /calls/ in path)\n if (uri.includes('/devices/') && uri.endsWith('/status')) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.DEVICE_STATUS;\n }\n\n // Device registration: .../calling/web/device (singular)\n if (uri.endsWith('/device')) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.REGISTER;\n }\n\n // Device unregister or get: .../devices/{deviceId} (DELETE → unregister, GET → device_get)\n if (uri.match(/\\/devices\\/[^/?]+$/) && !uri.includes('/calls')) {\n if (httpMethodType === HTTP_METHODS.DELETE) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.UNREGISTER;\n }\n if (httpMethodType === HTTP_METHODS.GET) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.DEVICE_GET;\n }\n\n return MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN;\n }\n\n // Device list: .../devices or .../devices?userid=...\n if (uri.includes('/devices') && !uri.match(/\\/devices\\/[^/?]+/)) {\n return MOBIUS_SOCKET_MESSAGE_TYPE.DEVICE_LIST;\n }\n\n return MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,6BAA6BA,CAC3CC,GAAY,EACZC,cAA6B,EACD;EAC5B,IAAI,CAACD,GAAG,EAAE;IACR,OAAOE,qCAA0B,CAACC,OAAO;EAC3C;;EAEA;EACA,IAAIH,GAAG,CAACI,QAAQ,CAAC,WAAW,CAAC,EAAE;IAC7B,IAAIJ,GAAG,CAACI,QAAQ,CAAC,gBAAgB,CAAC,EAAE;MAClC,OAAOF,qCAA0B,CAACG,SAAS;IAC7C;IACA,IAAIL,GAAG,CAACI,QAAQ,CAAC,kBAAkB,CAAC,EAAE;MACpC,OAAOF,qCAA0B,CAACI,WAAW;IAC/C;IACA,IAAIN,GAAG,CAACI,QAAQ,CAAC,sBAAsB,CAAC,EAAE;MACxC,OAAOF,qCAA0B,CAACK,aAAa;IACjD;IAEA,OAAOL,qCAA0B,CAACC,OAAO;EAC3C;;EAEA;;EAEA;EACA,IAAIH,GAAG,CAACI,QAAQ,CAAC,SAAS,CAAC,IAAIJ,GAAG,CAACI,QAAQ,CAAC,QAAQ,CAAC,EAAE;IACrD,OAAOF,qCAA0B,CAACM,UAAU;EAC9C;;EAEA;EACA,IAAIR,GAAG,CAACI,QAAQ,CAAC,SAAS,CAAC,IAAIJ,GAAG,CAACI,QAAQ,CAAC,SAAS,CAAC,EAAE;IACtD,OAAOF,qCAA0B,CAACO,WAAW;EAC/C;;EAEA;EACA,IAAIT,GAAG,CAACU,KAAK,CAAC,iBAAiB,CAAC,EAAE;IAChC,IAAIT,cAAc,KAAKU,mBAAY,CAACC,KAAK,EAAE;MACzC,OAAOV,qCAA0B,CAACW,UAAU;IAC9C;IACA,IAAIZ,cAAc,KAAKU,mBAAY,CAACG,MAAM,EAAE;MAC1C,OAAOZ,qCAA0B,CAACa,WAAW;IAC/C;IAEA,OAAOb,qCAA0B,CAACC,OAAO;EAC3C;;EAEA;EACA,IAAIH,GAAG,CAACgB,QAAQ,CAAC,OAAO,CAAC,EAAE;IACzB,OAAOd,qCAA0B,CAACe,UAAU;EAC9C;;EAEA;;EAEA;EACA,IAAIjB,GAAG,CAACI,QAAQ,CAAC,WAAW,CAAC,IAAIJ,GAAG,CAACgB,QAAQ,CAAC,SAAS,CAAC,EAAE;IACxD,OAAOd,qCAA0B,CAACgB,aAAa;EACjD;;EAEA;EACA,IAAIlB,GAAG,CAACgB,QAAQ,CAAC,SAAS,CAAC,EAAE;IAC3B,OAAOd,qCAA0B,CAACiB,QAAQ;EAC5C;;EAEA;EACA,IAAInB,GAAG,CAACU,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAACV,GAAG,CAACI,QAAQ,CAAC,QAAQ,CAAC,EAAE;IAC9D,IAAIH,cAAc,KAAKU,mBAAY,CAACG,MAAM,EAAE;MAC1C,OAAOZ,qCAA0B,CAACkB,UAAU;IAC9C;IACA,IAAInB,cAAc,KAAKU,mBAAY,CAACU,GAAG,EAAE;MACvC,OAAOnB,qCAA0B,CAACoB,UAAU;IAC9C;IAEA,OAAOpB,qCAA0B,CAACC,OAAO;EAC3C;;EAEA;EACA,IAAIH,GAAG,CAACI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAACJ,GAAG,CAACU,KAAK,CAAC,mBAAmB,CAAC,EAAE;IAC/D,OAAOR,qCAA0B,CAACqB,WAAW;EAC/C;EAEA,OAAOrB,qCAA0B,CAACC,OAAO;AAC3C","ignoreList":[]}