@webex/calling 3.9.0-multi-llms.3 → 3.9.0-multi-llms.5

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 (27) hide show
  1. package/dist/CallingClient/registration/register.js +435 -365
  2. package/dist/CallingClient/registration/register.js.map +1 -1
  3. package/dist/CallingClient/registration/register.test.js +96 -24
  4. package/dist/CallingClient/registration/register.test.js.map +1 -1
  5. package/dist/CallingClient/registration/webWorker.js +20 -6
  6. package/dist/CallingClient/registration/webWorker.js.map +1 -1
  7. package/dist/CallingClient/registration/webWorker.test.js +71 -24
  8. package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
  9. package/dist/CallingClient/registration/webWorkerStr.js +1 -1
  10. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
  11. package/dist/Metrics/index.js +85 -50
  12. package/dist/Metrics/index.js.map +1 -1
  13. package/dist/Metrics/index.test.js +54 -25
  14. package/dist/Metrics/index.test.js.map +1 -1
  15. package/dist/common/Utils.js.map +1 -1
  16. package/dist/module/CallingClient/registration/register.js +23 -2
  17. package/dist/module/CallingClient/registration/webWorker.js +15 -2
  18. package/dist/module/CallingClient/registration/webWorkerStr.js +19 -3
  19. package/dist/module/Metrics/index.js +56 -23
  20. package/dist/types/CallingClient/registration/register.d.ts +1 -0
  21. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  22. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
  23. package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
  24. package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
  25. package/dist/types/Metrics/index.d.ts.map +1 -1
  26. package/dist/types/common/Utils.d.ts.map +1 -1
  27. package/package.json +3 -3
@@ -37,7 +37,7 @@ var messageHandler = function messageHandler(event) {
37
37
  _context.next = 5;
38
38
  break;
39
39
  }
40
- throw new Error("Keepalive failed with status: ".concat(response.status));
40
+ throw response;
41
41
  case 5:
42
42
  return _context.abrupt("return", response);
43
43
  case 6:
@@ -63,12 +63,12 @@ var messageHandler = function messageHandler(event) {
63
63
  keepaliveTimer = undefined;
64
64
  }
65
65
  keepaliveTimer = setInterval(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
66
- var res, statusCode;
66
+ var res, statusCode, headers, error;
67
67
  return _regenerator.default.wrap(function _callee2$(_context2) {
68
68
  while (1) switch (_context2.prev = _context2.next) {
69
69
  case 0:
70
70
  if (!(keepAliveRetryCount < retryCountThreshold)) {
71
- _context2.next = 14;
71
+ _context2.next = 18;
72
72
  break;
73
73
  }
74
74
  _context2.prev = 1;
@@ -84,18 +84,32 @@ var messageHandler = function messageHandler(event) {
84
84
  });
85
85
  }
86
86
  keepAliveRetryCount = 0;
87
- _context2.next = 14;
87
+ _context2.next = 18;
88
88
  break;
89
89
  case 10:
90
90
  _context2.prev = 10;
91
91
  _context2.t0 = _context2["catch"](1);
92
+ headers = {};
93
+ if (_context2.t0.headers.has('Retry-After')) {
94
+ headers['retry-after'] = _context2.t0.headers.get('Retry-After');
95
+ }
96
+ if (_context2.t0.headers.has('Trackingid')) {
97
+ // eslint-disable-next-line dot-notation
98
+ headers['trackingid'] = _context2.t0.headers.get('Trackingid');
99
+ }
100
+ error = {
101
+ headers: headers,
102
+ statusCode: _context2.t0.status,
103
+ statusText: _context2.t0.statusText,
104
+ type: _context2.t0.type
105
+ };
92
106
  keepAliveRetryCount += 1;
93
107
  postMessage({
94
108
  type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
95
- err: _context2.t0,
109
+ err: error,
96
110
  keepAliveRetryCount: keepAliveRetryCount
97
111
  });
98
- case 14:
112
+ case 18:
99
113
  case "end":
100
114
  return _context2.stop();
101
115
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_uuid","require","_types","keepaliveTimer","messageHandler","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","_default","exports"],"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.Timeout | undefined;\n\nconst 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);\nexport default messageHandler;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_uuid","require","_types","keepaliveTimer","messageHandler","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","abrupt","stop","_x","_x2","_x3","apply","arguments","WorkerMessageType","START_KEEPALIVE","keepAliveRetryCount","_event$data","interval","retryCountThreshold","clearInterval","undefined","setInterval","_callee2","res","statusCode","error","_callee2$","_context2","status","postMessage","KEEPALIVE_SUCCESS","t0","has","get","statusText","KEEPALIVE_FAILURE","err","CLEAR_KEEPALIVE","self","addEventListener","_default","exports"],"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.Timeout | undefined;\n\nconst 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 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 postMessage({\n type: WorkerMessageType.KEEPALIVE_SUCCESS,\n statusCode,\n } as KeepaliveStatusMessage);\n }\n keepAliveRetryCount = 0;\n } catch (err: any) {\n const headers = {} as Record<string, string>;\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 // eslint-disable-next-line dot-notation\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 keepAliveRetryCount += 1;\n postMessage({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: error,\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);\nexport default messageHandler;\n"],"mappings":"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","ignoreList":[]}
@@ -38,7 +38,7 @@ describe('webWorker', function () {
38
38
  jest.useRealTimers();
39
39
  });
40
40
  it('should start keepalive lifecycle correctly', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
41
- var fakeSuccessResponse, fakeFailureRespponse;
41
+ var fakeSuccessResponse, failureHeaders, fakeFailureResponse;
42
42
  return _regenerator.default.wrap(function _callee$(_context) {
43
43
  while (1) switch (_context.prev = _context.next) {
44
44
  case 0:
@@ -73,11 +73,24 @@ describe('webWorker', function () {
73
73
  }
74
74
  });
75
75
  expect(postMessageSpy).not.toHaveBeenCalled();
76
- fakeFailureRespponse = {
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 = {
77
88
  ok: false,
78
- status: 401
89
+ status: 429,
90
+ statusText: 'Too Many Requests',
91
+ headers: failureHeaders
79
92
  };
80
- global.fetch.mockResolvedValue(fakeFailureRespponse);
93
+ global.fetch.mockResolvedValue(fakeFailureResponse);
81
94
  (0, _webWorker.default)({
82
95
  data: {
83
96
  type: _types.WorkerMessageType.START_KEEPALIVE,
@@ -90,31 +103,47 @@ describe('webWorker', function () {
90
103
  });
91
104
 
92
105
  // Manually invoke the captured interval callback to simulate one tick
93
- _context.next = 13;
106
+ _context.next = 14;
94
107
  return capturedIntervalCallback();
95
- case 13:
108
+ case 14:
96
109
  expect(global.fetch.mock.calls.length).toBe(2);
97
110
  expect(postMessageSpy).toHaveBeenCalledWith({
98
- err: new Error("Keepalive failed with status: 401"),
99
- keepAliveRetryCount: 1,
100
- type: 'KEEPALIVE_FAILURE'
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
101
122
  });
102
- case 15:
123
+ case 16:
103
124
  case "end":
104
125
  return _context.stop();
105
126
  }
106
127
  }, _callee);
107
128
  })));
108
129
  it('should post KEEPALIVE_FAILURE when fetch fails', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
109
- var mockError;
130
+ var failureHeaders2;
110
131
  return _regenerator.default.wrap(function _callee2$(_context2) {
111
132
  while (1) switch (_context2.prev = _context2.next) {
112
133
  case 0:
113
- mockError = new Error('Network error');
114
- global.fetch.mockRejectedValue({
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({
115
143
  ok: false,
116
- err: mockError,
117
- status: 401
144
+ status: 401,
145
+ statusText: 'Unauthorized',
146
+ headers: failureHeaders2
118
147
  });
119
148
  (0, _webWorker.default)({
120
149
  data: {
@@ -132,9 +161,12 @@ describe('webWorker', function () {
132
161
  expect(postMessageSpy).toHaveBeenCalledWith({
133
162
  type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
134
163
  err: {
135
- ok: false,
136
- err: mockError,
137
- status: 401
164
+ headers: {
165
+ trackingid: 'web_worker_mock-uuid'
166
+ },
167
+ statusCode: 401,
168
+ statusText: 'Unauthorized',
169
+ type: undefined
138
170
  },
139
171
  keepAliveRetryCount: 1
140
172
  });
@@ -145,11 +177,26 @@ describe('webWorker', function () {
145
177
  }, _callee2);
146
178
  })));
147
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;
148
181
  return _regenerator.default.wrap(function _callee3$(_context3) {
149
182
  while (1) switch (_context3.prev = _context3.next) {
150
183
  case 0:
151
184
  // Set fetch so that first tick rejects (failure) and second tick resolves (success)
152
- global.fetch.mockRejectedValueOnce(new Error('first failure')).mockResolvedValueOnce({
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({
153
200
  ok: true,
154
201
  status: 200
155
202
  });
@@ -165,18 +212,18 @@ describe('webWorker', function () {
165
212
  });
166
213
 
167
214
  // First tick: trigger failure
168
- _context3.next = 4;
215
+ _context3.next = 6;
169
216
  return capturedIntervalCallback();
170
- case 4:
217
+ case 6:
171
218
  expect(postMessageSpy.mock.calls[0][0].type).toBe(_types.WorkerMessageType.KEEPALIVE_FAILURE);
172
219
 
173
220
  // Second tick: trigger success.
174
- _context3.next = 7;
221
+ _context3.next = 9;
175
222
  return capturedIntervalCallback();
176
- case 7:
223
+ case 9:
177
224
  expect(postMessageSpy.mock.calls[1][0].type).toBe(_types.WorkerMessageType.KEEPALIVE_SUCCESS);
178
225
  expect(postMessageSpy.mock.calls[1][0].statusCode).toBe(200);
179
- case 9:
226
+ case 11:
180
227
  case "end":
181
228
  return _context3.stop();
182
229
  }
@@ -1 +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","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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","ignoreList":[]}
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","_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","has","key","get","statusText","KEEPALIVE_FAILURE","err","trackingid","statusCode","undefined","keepAliveRetryCount","stop","_callee2","failureHeaders2","_callee2$","_context2","mockResolvedValueOnce","_callee3","failureHeaders3","mockError","_callee3$","_context3","KEEPALIVE_SUCCESS","_callee4","startEvent","_callee4$","_context4","CLEAR_KEEPALIVE","advanceTimersByTime","toBeLessThanOrEqual","_callee5","_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":[]}
@@ -10,6 +10,6 @@ exports.default = void 0;
10
10
  * It can be used to create a Blob URL for the worker instead of loading it from a separate file
11
11
  */
12
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";
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
14
  var _default = exports.default = webWorkerStr;
15
15
  //# sourceMappingURL=webWorkerStr.js.map
@@ -1 +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","ignoreList":[]}
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,yzFA2GjB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaH,YAAY","ignoreList":[]}