@webex/calling 3.8.1 → 3.9.0

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 (68) hide show
  1. package/dist/CallSettings/WxCallBackendConnector.js +2 -2
  2. package/dist/CallSettings/WxCallBackendConnector.js.map +1 -1
  3. package/dist/CallSettings/WxCallBackendConnector.test.js +94 -27
  4. package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -1
  5. package/dist/CallSettings/types.js.map +1 -1
  6. package/dist/CallingClient/CallingClient.js +160 -105
  7. package/dist/CallingClient/CallingClient.js.map +1 -1
  8. package/dist/CallingClient/CallingClient.test.js +168 -102
  9. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  10. package/dist/CallingClient/constants.js +3 -3
  11. package/dist/CallingClient/constants.js.map +1 -1
  12. package/dist/CallingClient/line/line.test.js +4 -10
  13. package/dist/CallingClient/line/line.test.js.map +1 -1
  14. package/dist/CallingClient/registration/register.js +486 -380
  15. package/dist/CallingClient/registration/register.js.map +1 -1
  16. package/dist/CallingClient/registration/register.test.js +441 -309
  17. package/dist/CallingClient/registration/register.test.js.map +1 -1
  18. package/dist/CallingClient/registration/types.js.map +1 -1
  19. package/dist/CallingClient/registration/webWorker.js +115 -0
  20. package/dist/CallingClient/registration/webWorker.js.map +1 -0
  21. package/dist/CallingClient/registration/webWorker.test.js +256 -0
  22. package/dist/CallingClient/registration/webWorker.test.js.map +1 -0
  23. package/dist/CallingClient/registration/webWorkerStr.js +15 -0
  24. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -0
  25. package/dist/Errors/types.js +2 -0
  26. package/dist/Errors/types.js.map +1 -1
  27. package/dist/Metrics/index.js +9 -2
  28. package/dist/Metrics/index.js.map +1 -1
  29. package/dist/Metrics/index.test.js +10 -4
  30. package/dist/Metrics/index.test.js.map +1 -1
  31. package/dist/Metrics/types.js.map +1 -1
  32. package/dist/common/Utils.js +41 -34
  33. package/dist/common/Utils.js.map +1 -1
  34. package/dist/common/Utils.test.js +265 -119
  35. package/dist/common/Utils.test.js.map +1 -1
  36. package/dist/common/types.js +8 -1
  37. package/dist/common/types.js.map +1 -1
  38. package/dist/module/CallSettings/WxCallBackendConnector.js +1 -1
  39. package/dist/module/CallingClient/CallingClient.js +25 -10
  40. package/dist/module/CallingClient/constants.js +2 -2
  41. package/dist/module/CallingClient/registration/register.js +101 -65
  42. package/dist/module/CallingClient/registration/webWorker.js +59 -0
  43. package/dist/module/CallingClient/registration/webWorkerStr.js +93 -0
  44. package/dist/module/Errors/types.js +2 -0
  45. package/dist/module/Metrics/index.js +8 -1
  46. package/dist/module/common/Utils.js +10 -2
  47. package/dist/module/common/types.js +7 -0
  48. package/dist/types/CallSettings/types.d.ts +1 -1
  49. package/dist/types/CallSettings/types.d.ts.map +1 -1
  50. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  51. package/dist/types/CallingClient/constants.d.ts +2 -2
  52. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  53. package/dist/types/CallingClient/registration/register.d.ts +2 -2
  54. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  55. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  56. package/dist/types/CallingClient/registration/webWorker.d.ts +2 -0
  57. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -0
  58. package/dist/types/CallingClient/registration/webWorkerStr.d.ts +3 -0
  59. package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -0
  60. package/dist/types/Errors/types.d.ts +2 -0
  61. package/dist/types/Errors/types.d.ts.map +1 -1
  62. package/dist/types/Metrics/index.d.ts.map +1 -1
  63. package/dist/types/Metrics/types.d.ts +2 -1
  64. package/dist/types/Metrics/types.d.ts.map +1 -1
  65. package/dist/types/common/Utils.d.ts.map +1 -1
  66. package/dist/types/common/types.d.ts +12 -0
  67. package/dist/types/common/types.d.ts.map +1 -1
  68. package/package.json +4 -4
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.messageHandler = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
11
+ var _uuid = require("uuid");
12
+ var _types = require("../../common/types");
13
+ /* eslint-env worker */
14
+
15
+ var keepaliveTimer;
16
+ var messageHandler = exports.messageHandler = function messageHandler(event) {
17
+ var type = event.data.type;
18
+ var postKeepAlive = /*#__PURE__*/function () {
19
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(accessToken, deviceUrl, url) {
20
+ var response;
21
+ return _regenerator.default.wrap(function _callee$(_context) {
22
+ while (1) switch (_context.prev = _context.next) {
23
+ case 0:
24
+ _context.next = 2;
25
+ return fetch("".concat(url, "/status"), {
26
+ method: _types.HTTP_METHODS.POST,
27
+ headers: {
28
+ 'cisco-device-url': deviceUrl,
29
+ 'spark-user-agent': 'webex-calling/beta',
30
+ Authorization: "".concat(accessToken),
31
+ trackingId: "web_worker_".concat((0, _uuid.v4)())
32
+ }
33
+ });
34
+ case 2:
35
+ response = _context.sent;
36
+ if (response.ok) {
37
+ _context.next = 5;
38
+ break;
39
+ }
40
+ throw new Error("Keepalive failed with status: ".concat(response.status));
41
+ case 5:
42
+ return _context.abrupt("return", response);
43
+ case 6:
44
+ case "end":
45
+ return _context.stop();
46
+ }
47
+ }, _callee);
48
+ }));
49
+ return function postKeepAlive(_x, _x2, _x3) {
50
+ return _ref.apply(this, arguments);
51
+ };
52
+ }();
53
+ if (type === _types.WorkerMessageType.START_KEEPALIVE) {
54
+ var keepAliveRetryCount = 0;
55
+ var _event$data = event.data,
56
+ accessToken = _event$data.accessToken,
57
+ deviceUrl = _event$data.deviceUrl,
58
+ interval = _event$data.interval,
59
+ retryCountThreshold = _event$data.retryCountThreshold,
60
+ url = _event$data.url;
61
+ if (keepaliveTimer) {
62
+ clearInterval(keepaliveTimer);
63
+ keepaliveTimer = undefined;
64
+ }
65
+ keepaliveTimer = setInterval( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
66
+ var res, statusCode;
67
+ return _regenerator.default.wrap(function _callee2$(_context2) {
68
+ while (1) switch (_context2.prev = _context2.next) {
69
+ case 0:
70
+ if (!(keepAliveRetryCount < retryCountThreshold)) {
71
+ _context2.next = 14;
72
+ break;
73
+ }
74
+ _context2.prev = 1;
75
+ _context2.next = 4;
76
+ return postKeepAlive(accessToken, deviceUrl, url);
77
+ case 4:
78
+ res = _context2.sent;
79
+ statusCode = res.status;
80
+ if (keepAliveRetryCount > 0) {
81
+ postMessage({
82
+ type: _types.WorkerMessageType.KEEPALIVE_SUCCESS,
83
+ statusCode: statusCode
84
+ });
85
+ }
86
+ keepAliveRetryCount = 0;
87
+ _context2.next = 14;
88
+ break;
89
+ case 10:
90
+ _context2.prev = 10;
91
+ _context2.t0 = _context2["catch"](1);
92
+ keepAliveRetryCount += 1;
93
+ postMessage({
94
+ type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
95
+ err: _context2.t0,
96
+ keepAliveRetryCount: keepAliveRetryCount
97
+ });
98
+ case 14:
99
+ case "end":
100
+ return _context2.stop();
101
+ }
102
+ }, _callee2, null, [[1, 10]]);
103
+ })), interval * 1000);
104
+ }
105
+ if (type === _types.WorkerMessageType.CLEAR_KEEPALIVE) {
106
+ if (keepaliveTimer) {
107
+ clearInterval(keepaliveTimer);
108
+ keepaliveTimer = undefined;
109
+ }
110
+ }
111
+ };
112
+
113
+ // eslint-disable-next-line no-restricted-globals
114
+ self.addEventListener('message', messageHandler);
115
+ //# sourceMappingURL=webWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_uuid","require","_types","keepaliveTimer","messageHandler","exports","event","type","data","postKeepAlive","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","accessToken","deviceUrl","url","response","wrap","_callee$","_context","prev","next","fetch","concat","method","HTTP_METHODS","POST","headers","Authorization","trackingId","uuid","sent","ok","Error","status","abrupt","stop","_x","_x2","_x3","apply","arguments","WorkerMessageType","START_KEEPALIVE","keepAliveRetryCount","_event$data","interval","retryCountThreshold","clearInterval","undefined","setInterval","_callee2","res","statusCode","_callee2$","_context2","postMessage","KEEPALIVE_SUCCESS","t0","KEEPALIVE_FAILURE","err","CLEAR_KEEPALIVE","self","addEventListener"],"sources":["webWorker.ts"],"sourcesContent":["/* eslint-env worker */\nimport {v4 as uuid} from 'uuid';\nimport {HTTP_METHODS, KeepaliveStatusMessage, WorkerMessageType} from '../../common/types';\n\nlet keepaliveTimer: NodeJS.Timer | undefined;\n\nexport const messageHandler = (event: MessageEvent) => {\n const {type} = event.data;\n\n const postKeepAlive = async (accessToken: string, deviceUrl: string, url: string) => {\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 new Error(`Keepalive failed with status: ${response.status}`);\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 postMessage({\n type: WorkerMessageType.KEEPALIVE_SUCCESS,\n statusCode,\n } as KeepaliveStatusMessage);\n }\n keepAliveRetryCount = 0;\n } catch (err: unknown) {\n keepAliveRetryCount += 1;\n postMessage({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err,\n keepAliveRetryCount,\n } as KeepaliveStatusMessage);\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\n// eslint-disable-next-line no-restricted-globals\nself.addEventListener('message', messageHandler);\n"],"mappings":"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"}
@@ -0,0 +1,256 @@
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 = 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, fakeFailureRespponse;
42
+ return _regenerator.default.wrap(function _callee$(_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.messageHandler)({
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 = 5;
63
+ return capturedIntervalCallback();
64
+ case 5:
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
+ fakeFailureRespponse = {
77
+ ok: false,
78
+ status: 401
79
+ };
80
+ global.fetch.mockResolvedValue(fakeFailureRespponse);
81
+ (0, _webWorker.messageHandler)({
82
+ data: {
83
+ type: _types.WorkerMessageType.START_KEEPALIVE,
84
+ accessToken: 'dummy',
85
+ deviceUrl: 'dummyDevice',
86
+ interval: 1,
87
+ retryCountThreshold: 3,
88
+ url: 'http://example.com'
89
+ }
90
+ });
91
+
92
+ // Manually invoke the captured interval callback to simulate one tick
93
+ _context.next = 13;
94
+ return capturedIntervalCallback();
95
+ case 13:
96
+ expect(global.fetch.mock.calls.length).toBe(2);
97
+ expect(postMessageSpy).toHaveBeenCalledWith({
98
+ err: new Error("Keepalive failed with status: 401"),
99
+ keepAliveRetryCount: 1,
100
+ type: 'KEEPALIVE_FAILURE'
101
+ });
102
+ case 15:
103
+ case "end":
104
+ return _context.stop();
105
+ }
106
+ }, _callee);
107
+ })));
108
+ it('should post KEEPALIVE_FAILURE when fetch fails', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
109
+ var mockError;
110
+ return _regenerator.default.wrap(function _callee2$(_context2) {
111
+ while (1) switch (_context2.prev = _context2.next) {
112
+ case 0:
113
+ mockError = new Error('Network error');
114
+ global.fetch.mockRejectedValue({
115
+ ok: false,
116
+ err: mockError,
117
+ status: 401
118
+ });
119
+ (0, _webWorker.messageHandler)({
120
+ data: {
121
+ type: _types.WorkerMessageType.START_KEEPALIVE,
122
+ accessToken: 'dummy',
123
+ deviceUrl: 'dummyDevice',
124
+ interval: 1,
125
+ retryCountThreshold: 1,
126
+ url: 'http://example.com'
127
+ }
128
+ });
129
+ _context2.next = 5;
130
+ return capturedIntervalCallback();
131
+ case 5:
132
+ expect(postMessageSpy).toHaveBeenCalledWith({
133
+ type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
134
+ err: {
135
+ ok: false,
136
+ err: mockError,
137
+ status: 401
138
+ },
139
+ keepAliveRetryCount: 1
140
+ });
141
+ case 6:
142
+ case "end":
143
+ return _context2.stop();
144
+ }
145
+ }, _callee2);
146
+ })));
147
+ it('should post KEEPALIVE_SUCCESS after a failure when fetch succeeds', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
148
+ return _regenerator.default.wrap(function _callee3$(_context3) {
149
+ while (1) switch (_context3.prev = _context3.next) {
150
+ case 0:
151
+ // Set fetch so that first tick rejects (failure) and second tick resolves (success)
152
+ global.fetch.mockRejectedValueOnce(new Error('first failure')).mockResolvedValueOnce({
153
+ ok: true,
154
+ status: 200
155
+ });
156
+ (0, _webWorker.messageHandler)({
157
+ data: {
158
+ type: _types.WorkerMessageType.START_KEEPALIVE,
159
+ accessToken: 'dummy',
160
+ deviceUrl: 'dummyDevice',
161
+ interval: 1,
162
+ retryCountThreshold: 3,
163
+ url: 'http://example.com'
164
+ }
165
+ });
166
+
167
+ // First tick: trigger failure
168
+ _context3.next = 4;
169
+ return capturedIntervalCallback();
170
+ case 4:
171
+ expect(postMessageSpy.mock.calls[0][0].type).toBe(_types.WorkerMessageType.KEEPALIVE_FAILURE);
172
+
173
+ // Second tick: trigger success.
174
+ _context3.next = 7;
175
+ return capturedIntervalCallback();
176
+ case 7:
177
+ expect(postMessageSpy.mock.calls[1][0].type).toBe(_types.WorkerMessageType.KEEPALIVE_SUCCESS);
178
+ expect(postMessageSpy.mock.calls[1][0].statusCode).toBe(200);
179
+ case 9:
180
+ case "end":
181
+ return _context3.stop();
182
+ }
183
+ }, _callee3);
184
+ })));
185
+ it('should clear keepalive timer on receiving CLEAR_KEEPALIVE message', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
186
+ var fakeSuccessResponse, startEvent;
187
+ return _regenerator.default.wrap(function _callee4$(_context4) {
188
+ while (1) switch (_context4.prev = _context4.next) {
189
+ case 0:
190
+ fakeSuccessResponse = {
191
+ ok: true,
192
+ status: 200
193
+ };
194
+ global.fetch.mockResolvedValue(fakeSuccessResponse);
195
+ startEvent = {
196
+ data: {
197
+ type: _types.WorkerMessageType.START_KEEPALIVE,
198
+ accessToken: 'dummy',
199
+ deviceUrl: 'dummyDevice',
200
+ interval: 1,
201
+ retryCountThreshold: 1,
202
+ url: 'http://example.com'
203
+ }
204
+ };
205
+ (0, _webWorker.messageHandler)(startEvent);
206
+ (0, _webWorker.messageHandler)({
207
+ data: {
208
+ type: _types.WorkerMessageType.CLEAR_KEEPALIVE
209
+ }
210
+ });
211
+ jest.advanceTimersByTime(3000);
212
+ expect(global.fetch.mock.calls.length).toBeLessThanOrEqual(3);
213
+ expect(clearIntervalSpy).toHaveBeenCalled();
214
+ case 8:
215
+ case "end":
216
+ return _context4.stop();
217
+ }
218
+ }, _callee4);
219
+ })));
220
+ 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() {
221
+ var fakeSuccessResponse, startEvent;
222
+ return _regenerator.default.wrap(function _callee5$(_context5) {
223
+ while (1) switch (_context5.prev = _context5.next) {
224
+ case 0:
225
+ jest.spyOn(global, 'setInterval').mockReturnValue(undefined);
226
+ fakeSuccessResponse = {
227
+ ok: true,
228
+ status: 200
229
+ };
230
+ global.fetch.mockResolvedValue(fakeSuccessResponse);
231
+ startEvent = {
232
+ data: {
233
+ type: _types.WorkerMessageType.START_KEEPALIVE,
234
+ accessToken: 'dummy',
235
+ deviceUrl: 'dummyDevice',
236
+ interval: 1,
237
+ retryCountThreshold: 1,
238
+ url: 'http://example.com'
239
+ }
240
+ };
241
+ (0, _webWorker.messageHandler)(startEvent);
242
+ (0, _webWorker.messageHandler)({
243
+ data: {
244
+ type: _types.WorkerMessageType.CLEAR_KEEPALIVE
245
+ }
246
+ });
247
+ jest.advanceTimersByTime(3000);
248
+ expect(clearIntervalSpy).not.toHaveBeenCalled();
249
+ case 8:
250
+ case "end":
251
+ return _context5.stop();
252
+ }
253
+ }, _callee5);
254
+ })));
255
+ });
256
+ //# sourceMappingURL=webWorker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_uuid","require","_webWorker","_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","fakeFailureRespponse","wrap","_callee$","_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","err","Error","keepAliveRetryCount","stop","_callee2","mockError","_callee2$","_context2","mockRejectedValue","KEEPALIVE_FAILURE","_callee3","_callee3$","_context3","mockRejectedValueOnce","mockResolvedValueOnce","KEEPALIVE_SUCCESS","statusCode","_callee4","startEvent","_callee4$","_context4","CLEAR_KEEPALIVE","advanceTimersByTime","toBeLessThanOrEqual","_callee5","_callee5$","_context5","undefined"],"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 = {ok: true, status: 200};\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 fakeFailureRespponse = {ok: false, status: 401};\n (global.fetch as jest.Mock).mockResolvedValue(fakeFailureRespponse);\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 err: new Error(`Keepalive failed with status: 401`),\n keepAliveRetryCount: 1,\n type: 'KEEPALIVE_FAILURE',\n });\n });\n\n it('should post KEEPALIVE_FAILURE when fetch fails', async () => {\n const mockError = new Error('Network error');\n (global.fetch as jest.Mock).mockRejectedValue({\n ok: false,\n err: mockError,\n status: 401,\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 ok: false,\n err: mockError,\n status: 401,\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 (global.fetch as jest.Mock)\n .mockRejectedValueOnce(new Error('first failure'))\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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"}
@@ -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 new Error(`Keepalive failed with status: ${response.status}`);\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 keepAliveRetryCount += 1;\n self.postMessage({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err,\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 new Error(\\`Keepalive failed with status: \\${response.status}\\`);\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 keepAliveRetryCount += 1;\n self.postMessage({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err,\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,o5EA2FjB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaH,YAAY"}
@@ -14,12 +14,14 @@ var ERROR_LAYER = exports.ERROR_LAYER = /*#__PURE__*/function (ERROR_LAYER) {
14
14
  var ERROR_TYPE = exports.ERROR_TYPE = /*#__PURE__*/function (ERROR_TYPE) {
15
15
  ERROR_TYPE["CALL_ERROR"] = "call_error";
16
16
  ERROR_TYPE["DEFAULT"] = "default_error";
17
+ ERROR_TYPE["BAD_REQUEST"] = "bad_request";
17
18
  ERROR_TYPE["FORBIDDEN_ERROR"] = "forbidden";
18
19
  ERROR_TYPE["NOT_FOUND"] = "not_found";
19
20
  ERROR_TYPE["REGISTRATION_ERROR"] = "registration_error";
20
21
  ERROR_TYPE["SERVICE_UNAVAILABLE"] = "service_unavailable";
21
22
  ERROR_TYPE["TIMEOUT"] = "timeout";
22
23
  ERROR_TYPE["TOKEN_ERROR"] = "token_error";
24
+ ERROR_TYPE["TOO_MANY_REQUESTS"] = "too_many_requests";
23
25
  ERROR_TYPE["SERVER_ERROR"] = "server_error";
24
26
  return ERROR_TYPE;
25
27
  }({});
@@ -1 +1 @@
1
- {"version":3,"names":["ERROR_LAYER","exports","ERROR_TYPE","ERROR_CODE","CALL_ERROR_CODE","DEVICE_ERROR_CODE"],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-interface */\nimport {CorrelationId, IMetaContext, RegistrationStatus} from '../common/types';\n\nexport type ErrorMessage = string;\n\nexport enum ERROR_LAYER {\n CALL_CONTROL = 'call_control',\n MEDIA = 'media',\n}\n\nexport enum ERROR_TYPE {\n CALL_ERROR = 'call_error',\n DEFAULT = 'default_error',\n FORBIDDEN_ERROR = 'forbidden',\n NOT_FOUND = 'not_found',\n REGISTRATION_ERROR = 'registration_error',\n SERVICE_UNAVAILABLE = 'service_unavailable',\n TIMEOUT = 'timeout',\n TOKEN_ERROR = 'token_error',\n SERVER_ERROR = 'server_error',\n}\n\nexport enum ERROR_CODE {\n UNAUTHORIZED = 401,\n FORBIDDEN = 403,\n DEVICE_NOT_FOUND = 404,\n INTERNAL_SERVER_ERROR = 500,\n NOT_IMPLEMENTED = 501,\n SERVICE_UNAVAILABLE = 503,\n BAD_REQUEST = 400,\n REQUEST_TIMEOUT = 408,\n TOO_MANY_REQUESTS = 429,\n}\n\nexport enum CALL_ERROR_CODE {\n INVALID_STATUS_UPDATE = 111,\n DEVICE_NOT_REGISTERED = 112,\n CALL_NOT_FOUND = 113,\n ERROR_PROCESSING = 114,\n USER_BUSY = 115,\n PARSING_ERROR = 116,\n TIMEOUT_ERROR = 117,\n NOT_ACCEPTABLE = 118,\n CALL_REJECTED = 119,\n NOT_AVAILABLE = 120,\n}\n\nexport enum DEVICE_ERROR_CODE {\n DEVICE_LIMIT_EXCEEDED = 101,\n DEVICE_CREATION_DISABLED = 102,\n DEVICE_CREATION_FAILED = 103,\n}\n\nexport interface ErrorContext extends IMetaContext {}\n\nexport type ErrorObject = {\n message: ErrorMessage;\n type: ERROR_TYPE;\n context: ErrorContext;\n};\n\nexport interface LineErrorObject extends ErrorObject {\n status: RegistrationStatus;\n}\n\nexport interface CallErrorObject extends ErrorObject {\n correlationId: CorrelationId;\n errorLayer: ERROR_LAYER;\n}\n"],"mappings":";;;;;;;AAAA;AAAA,IAKYA,WAAW,GAAAC,OAAA,CAAAD,WAAA,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;AAAA,IAKXE,UAAU,GAAAD,OAAA,CAAAC,UAAA,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAAA,IAYVC,UAAU,GAAAF,OAAA,CAAAE,UAAA,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAAA,IAYVC,eAAe,GAAAH,OAAA,CAAAG,eAAA,0BAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAAA,IAafC,iBAAiB,GAAAJ,OAAA,CAAAI,iBAAA,0BAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA"}
1
+ {"version":3,"names":["ERROR_LAYER","exports","ERROR_TYPE","ERROR_CODE","CALL_ERROR_CODE","DEVICE_ERROR_CODE"],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-interface */\nimport {CorrelationId, IMetaContext, RegistrationStatus} from '../common/types';\n\nexport type ErrorMessage = string;\n\nexport enum ERROR_LAYER {\n CALL_CONTROL = 'call_control',\n MEDIA = 'media',\n}\n\nexport enum ERROR_TYPE {\n CALL_ERROR = 'call_error',\n DEFAULT = 'default_error',\n BAD_REQUEST = 'bad_request',\n FORBIDDEN_ERROR = 'forbidden',\n NOT_FOUND = 'not_found',\n REGISTRATION_ERROR = 'registration_error',\n SERVICE_UNAVAILABLE = 'service_unavailable',\n TIMEOUT = 'timeout',\n TOKEN_ERROR = 'token_error',\n TOO_MANY_REQUESTS = 'too_many_requests',\n SERVER_ERROR = 'server_error',\n}\n\nexport enum ERROR_CODE {\n UNAUTHORIZED = 401,\n FORBIDDEN = 403,\n DEVICE_NOT_FOUND = 404,\n INTERNAL_SERVER_ERROR = 500,\n NOT_IMPLEMENTED = 501,\n SERVICE_UNAVAILABLE = 503,\n BAD_REQUEST = 400,\n REQUEST_TIMEOUT = 408,\n TOO_MANY_REQUESTS = 429,\n}\n\nexport enum CALL_ERROR_CODE {\n INVALID_STATUS_UPDATE = 111,\n DEVICE_NOT_REGISTERED = 112,\n CALL_NOT_FOUND = 113,\n ERROR_PROCESSING = 114,\n USER_BUSY = 115,\n PARSING_ERROR = 116,\n TIMEOUT_ERROR = 117,\n NOT_ACCEPTABLE = 118,\n CALL_REJECTED = 119,\n NOT_AVAILABLE = 120,\n}\n\nexport enum DEVICE_ERROR_CODE {\n DEVICE_LIMIT_EXCEEDED = 101,\n DEVICE_CREATION_DISABLED = 102,\n DEVICE_CREATION_FAILED = 103,\n}\n\nexport interface ErrorContext extends IMetaContext {}\n\nexport type ErrorObject = {\n message: ErrorMessage;\n type: ERROR_TYPE;\n context: ErrorContext;\n};\n\nexport interface LineErrorObject extends ErrorObject {\n status: RegistrationStatus;\n}\n\nexport interface CallErrorObject extends ErrorObject {\n correlationId: CorrelationId;\n errorLayer: ERROR_LAYER;\n}\n"],"mappings":";;;;;;;AAAA;AAAA,IAKYA,WAAW,GAAAC,OAAA,CAAAD,WAAA,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;AAAA,IAKXE,UAAU,GAAAD,OAAA,CAAAC,UAAA,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAAA,IAcVC,UAAU,GAAAF,OAAA,CAAAE,UAAA,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAAA,IAYVC,eAAe,GAAAH,OAAA,CAAAG,eAAA,0BAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAAA,IAafC,iBAAiB,GAAAJ,OAAA,CAAAI,iBAAA,0BAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA"}
@@ -105,7 +105,7 @@ var MetricManager = /*#__PURE__*/function () {
105
105
  */
106
106
  }, {
107
107
  key: "submitRegistrationMetric",
108
- value: function submitRegistrationMetric(name, metricAction, type, clientError) {
108
+ value: function submitRegistrationMetric(name, metricAction, type, caller, serverType, trackingId, keepaliveCount, clientError) {
109
109
  var data;
110
110
  switch (name) {
111
111
  case _types.METRIC_EVENT.REGISTRATION:
@@ -120,7 +120,10 @@ var MetricManager = /*#__PURE__*/function () {
120
120
  fields: {
121
121
  device_url: (_this$deviceInfo8 = this.deviceInfo) === null || _this$deviceInfo8 === void 0 ? void 0 : (_this$deviceInfo8$dev = _this$deviceInfo8.device) === null || _this$deviceInfo8$dev === void 0 ? void 0 : _this$deviceInfo8$dev.clientDeviceUri,
122
122
  mobius_url: (_this$deviceInfo9 = this.deviceInfo) === null || _this$deviceInfo9 === void 0 ? void 0 : (_this$deviceInfo9$dev = _this$deviceInfo9.device) === null || _this$deviceInfo9$dev === void 0 ? void 0 : _this$deviceInfo9$dev.uri,
123
- calling_sdk_version: process.env.CALLING_SDK_VERSION || _constants.VERSION
123
+ calling_sdk_version: process.env.CALLING_SDK_VERSION || _constants.VERSION,
124
+ reg_source: caller,
125
+ server_type: serverType,
126
+ trackingId: trackingId
124
127
  },
125
128
  type: type
126
129
  };
@@ -140,6 +143,10 @@ var MetricManager = /*#__PURE__*/function () {
140
143
  device_url: (_this$deviceInfo11 = this.deviceInfo) === null || _this$deviceInfo11 === void 0 ? void 0 : (_this$deviceInfo11$de = _this$deviceInfo11.device) === null || _this$deviceInfo11$de === void 0 ? void 0 : _this$deviceInfo11$de.clientDeviceUri,
141
144
  mobius_url: (_this$deviceInfo12 = this.deviceInfo) === null || _this$deviceInfo12 === void 0 ? void 0 : (_this$deviceInfo12$de = _this$deviceInfo12.device) === null || _this$deviceInfo12$de === void 0 ? void 0 : _this$deviceInfo12$de.uri,
142
145
  calling_sdk_version: process.env.CALLING_SDK_VERSION || _constants.VERSION,
146
+ reg_source: caller,
147
+ server_type: serverType,
148
+ trackingId: trackingId,
149
+ keepalive_count: keepaliveCount,
143
150
  error: clientError.getError().message,
144
151
  error_type: clientError.getError().type
145
152
  },