@webex/internal-plugin-metrics 3.8.1-web-workers-keepalive.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.
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +44 -15
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.js +157 -27
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js +15 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics.js +1 -1
- package/dist/metrics.types.js.map +1 -1
- package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +8 -1
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +32 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/metrics.types.d.ts +1 -1
- package/package.json +10 -11
- package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +47 -15
- package/src/call-diagnostic/call-diagnostic-metrics.ts +144 -0
- package/src/call-diagnostic/call-diagnostic-metrics.util.ts +14 -0
- package/src/index.ts +2 -0
- package/src/metrics.types.ts +3 -1
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +88 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +404 -1
- package/test/unit/spec/prelogin-metrics-batcher.ts +71 -3
|
@@ -173,13 +173,20 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
173
173
|
*/
|
|
174
174
|
}, {
|
|
175
175
|
key: "getDiffBetweenTimestamps",
|
|
176
|
-
value: function getDiffBetweenTimestamps(a, b) {
|
|
176
|
+
value: function getDiffBetweenTimestamps(a, b, clampValues) {
|
|
177
177
|
var start = this.latencyTimestamps.get(a);
|
|
178
178
|
var end = this.latencyTimestamps.get(b);
|
|
179
|
-
if (typeof start
|
|
180
|
-
return
|
|
179
|
+
if (typeof start !== 'number' || typeof end !== 'number') {
|
|
180
|
+
return undefined;
|
|
181
181
|
}
|
|
182
|
-
|
|
182
|
+
var diff = end - start;
|
|
183
|
+
if (!clampValues) {
|
|
184
|
+
return diff;
|
|
185
|
+
}
|
|
186
|
+
var _clampValues$minimum = clampValues.minimum,
|
|
187
|
+
minimum = _clampValues$minimum === void 0 ? 0 : _clampValues$minimum,
|
|
188
|
+
maximum = clampValues.maximum;
|
|
189
|
+
return Math.min(maximum !== null && maximum !== void 0 ? maximum : Infinity, Math.max(diff, minimum));
|
|
183
190
|
}
|
|
184
191
|
|
|
185
192
|
/**
|
|
@@ -195,7 +202,9 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
195
202
|
}, {
|
|
196
203
|
key: "getMeetingInfoReqResp",
|
|
197
204
|
value: function getMeetingInfoReqResp() {
|
|
198
|
-
return this.getDiffBetweenTimestamps('internal.client.meetinginfo.request', 'internal.client.meetinginfo.response'
|
|
205
|
+
return this.getDiffBetweenTimestamps('internal.client.meetinginfo.request', 'internal.client.meetinginfo.response', {
|
|
206
|
+
maximum: 1200000
|
|
207
|
+
});
|
|
199
208
|
}
|
|
200
209
|
|
|
201
210
|
/**
|
|
@@ -236,7 +245,9 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
236
245
|
}, {
|
|
237
246
|
key: "getCallInitJoinReq",
|
|
238
247
|
value: function getCallInitJoinReq() {
|
|
239
|
-
return this.getDiffBetweenTimestamps('internal.client.interstitial-window.click.joinbutton', 'client.locus.join.request'
|
|
248
|
+
return this.getDiffBetweenTimestamps('internal.client.interstitial-window.click.joinbutton', 'client.locus.join.request', {
|
|
249
|
+
maximum: 1200000
|
|
250
|
+
});
|
|
240
251
|
}
|
|
241
252
|
|
|
242
253
|
/**
|
|
@@ -246,7 +257,9 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
246
257
|
}, {
|
|
247
258
|
key: "getJoinReqResp",
|
|
248
259
|
value: function getJoinReqResp() {
|
|
249
|
-
return this.getDiffBetweenTimestamps('client.locus.join.request', 'client.locus.join.response'
|
|
260
|
+
return this.getDiffBetweenTimestamps('client.locus.join.request', 'client.locus.join.response', {
|
|
261
|
+
maximum: 1200000
|
|
262
|
+
});
|
|
250
263
|
}
|
|
251
264
|
|
|
252
265
|
/**
|
|
@@ -266,7 +279,9 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
266
279
|
}, {
|
|
267
280
|
key: "getLocalSDPGenRemoteSDPRecv",
|
|
268
281
|
value: function getLocalSDPGenRemoteSDPRecv() {
|
|
269
|
-
return this.getDiffBetweenTimestamps('client.media-engine.local-sdp-generated', 'client.media-engine.remote-sdp-received'
|
|
282
|
+
return this.getDiffBetweenTimestamps('client.media-engine.local-sdp-generated', 'client.media-engine.remote-sdp-received', {
|
|
283
|
+
maximum: 1200000
|
|
284
|
+
});
|
|
270
285
|
}
|
|
271
286
|
|
|
272
287
|
/**
|
|
@@ -276,7 +291,9 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
276
291
|
}, {
|
|
277
292
|
key: "getICESetupTime",
|
|
278
293
|
value: function getICESetupTime() {
|
|
279
|
-
return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end'
|
|
294
|
+
return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end', {
|
|
295
|
+
maximum: 1200000
|
|
296
|
+
});
|
|
280
297
|
}
|
|
281
298
|
|
|
282
299
|
/**
|
|
@@ -394,7 +411,9 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
394
411
|
}, {
|
|
395
412
|
key: "getCallInitMediaEngineReady",
|
|
396
413
|
value: function getCallInitMediaEngineReady() {
|
|
397
|
-
return this.getDiffBetweenTimestamps('internal.client.interstitial-window.click.joinbutton', 'client.media-engine.ready'
|
|
414
|
+
return this.getDiffBetweenTimestamps('internal.client.interstitial-window.click.joinbutton', 'client.media-engine.ready', {
|
|
415
|
+
maximum: 1200000
|
|
416
|
+
});
|
|
398
417
|
}
|
|
399
418
|
|
|
400
419
|
/**
|
|
@@ -411,7 +430,8 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
411
430
|
var lobbyTimeLatency = this.getStayLobbyTime();
|
|
412
431
|
var lobbyTime = typeof lobbyTimeLatency === 'number' ? lobbyTimeLatency : 0;
|
|
413
432
|
if (interstitialJoinClickTimestamp && connectedMedia) {
|
|
414
|
-
|
|
433
|
+
var interstitialToMediaOKJmt = connectedMedia - interstitialJoinClickTimestamp - lobbyTime;
|
|
434
|
+
return Math.max(0, interstitialToMediaOKJmt);
|
|
415
435
|
}
|
|
416
436
|
return undefined;
|
|
417
437
|
}
|
|
@@ -474,11 +494,11 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
474
494
|
var lobbyTime = this.getStayLobbyTime();
|
|
475
495
|
if (clickToInterstitial && interstitialToJoinOk && joinConfJMT) {
|
|
476
496
|
var _this$getMeeting;
|
|
477
|
-
var totalMediaJMT = clickToInterstitial + interstitialToJoinOk + joinConfJMT;
|
|
497
|
+
var totalMediaJMT = Math.max(0, clickToInterstitial + interstitialToJoinOk + joinConfJMT);
|
|
478
498
|
if ((_this$getMeeting = this.getMeeting()) !== null && _this$getMeeting !== void 0 && _this$getMeeting.allowMediaInLobby) {
|
|
479
499
|
return totalMediaJMT;
|
|
480
500
|
}
|
|
481
|
-
return totalMediaJMT - lobbyTime;
|
|
501
|
+
return Math.max(0, totalMediaJMT - lobbyTime);
|
|
482
502
|
}
|
|
483
503
|
return undefined;
|
|
484
504
|
}
|
|
@@ -494,7 +514,7 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
494
514
|
var interstitialToJoinOk = this.getInterstitialToJoinOK();
|
|
495
515
|
var joinConfJMT = this.getJoinConfJMT();
|
|
496
516
|
if (clickToInterstitialWithUserDelay && interstitialToJoinOk && joinConfJMT) {
|
|
497
|
-
return clickToInterstitialWithUserDelay + interstitialToJoinOk + joinConfJMT;
|
|
517
|
+
return Math.max(0, clickToInterstitialWithUserDelay + interstitialToJoinOk + joinConfJMT);
|
|
498
518
|
}
|
|
499
519
|
return undefined;
|
|
500
520
|
}
|
|
@@ -509,7 +529,7 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
509
529
|
var interstitialToJoinOk = this.getInterstitialToJoinOK();
|
|
510
530
|
var joinConfJMT = this.getJoinConfJMT();
|
|
511
531
|
if (typeof interstitialToJoinOk === 'number' && typeof joinConfJMT === 'number') {
|
|
512
|
-
return interstitialToJoinOk - joinConfJMT;
|
|
532
|
+
return Math.max(0, interstitialToJoinOk - joinConfJMT);
|
|
513
533
|
}
|
|
514
534
|
return undefined;
|
|
515
535
|
}
|
|
@@ -560,6 +580,15 @@ var CallDiagnosticLatencies = exports.default = /*#__PURE__*/function (_WebexPlu
|
|
|
560
580
|
return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');
|
|
561
581
|
}
|
|
562
582
|
|
|
583
|
+
/**
|
|
584
|
+
* Time from share initiation to share stop (ms).
|
|
585
|
+
*/
|
|
586
|
+
}, {
|
|
587
|
+
key: "getShareDuration",
|
|
588
|
+
value: function getShareDuration() {
|
|
589
|
+
return this.getDiffBetweenTimestamps('internal.client.share.initiated', 'internal.client.share.stopped');
|
|
590
|
+
}
|
|
591
|
+
|
|
563
592
|
/**
|
|
564
593
|
* Total latency for all exchange ci token.
|
|
565
594
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","CallDiagnosticLatencies","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","latencyTimestamps","_map","precomputedLatencies","_createClass2","key","value","clearTimestamps","clear","setMeetingId","meetingId","getMeeting","webex","meetings","getBasicMeetingInformation","undefined","saveTimestamp","_ref","_ref$value","Date","getTime","_ref$options","options","saveFirstTimestampOnly","set","delete","saveLatency","accumulate","existingValue","get","measureLatency","callback","_this2","start","performance","now","finally","has","getDiffBetweenTimestamps","a","b","end","getMeetingInfoReqResp","getShowInterstitialTime","getU2CTime","u2cLatency","Math","floor","getRegisterWDMDeviceJMT","getCallInitJoinReq","getJoinReqResp","getTurnDiscoveryTime","getLocalSDPGenRemoteSDPRecv","getICESetupTime","getAudioICESetupTime","getVideoICESetupTime","getShareICESetupTime","getStayLobbyTime","getPageJMT","latency","getDownloadTimeJMT","getClickToInterstitial","clickToInterstitialLatency","getClickToInterstitialWithUserDelay","clickToInterstitialWithUserDelayLatency","getInterstitialToJoinOK","getCallInitMediaEngineReady","getInterstitialToMediaOKJMT","interstitialJoinClickTimestamp","connectedMedia","lobbyTimeLatency","lobbyTime","getTotalJMT","clickToInterstitial","interstitialToJoinOk","getTotalJMTWithUserDelay","clickToInterstitialWithUserDelay","getJoinConfJMT","joinReqResp","ICESetupTime","getTotalMediaJMT","joinConfJMT","_this$getMeeting","totalMediaJMT","allowMediaInLobby","getTotalMediaJMTWithUserDelay","getClientJMT","getAudioJoinRespRxStart","getVideoJoinRespRxStart","getReachabilityClustersReqResp","reachablityClusterReqResp","getAudioJoinRespTxStart","getVideoJoinRespTxStart","getExchangeCITokenJMT","exchangeCITokenJMT","getRefreshCaptchaReqResp","refreshCaptchaReqResp","getDownloadIntelligenceModelsReqResp","downloadIntelligenceModelsReqResp","getOtherAppApiReqResp","otherAppApiJMT","WebexPlugin"],"sources":["call-diagnostic-metrics-latencies.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {MetricEventNames, PreComputedLatencies} from '../metrics.types';\n\n// we only care about client event and feature event for now\n\n/**\n * @description Helper class to store latencies timestamp and to calculate various latencies for CA.\n * @exports\n * @class CallDiagnosticLatencies\n */\nexport default class CallDiagnosticLatencies extends WebexPlugin {\n latencyTimestamps: Map<MetricEventNames, number>;\n precomputedLatencies: Map<PreComputedLatencies, number>;\n // meetingId that the current latencies are for\n private meetingId?: string;\n\n /**\n * @constructor\n */\n constructor(...args) {\n super(...args);\n this.latencyTimestamps = new Map();\n this.precomputedLatencies = new Map();\n }\n\n /**\n * Clear timestamps\n */\n public clearTimestamps() {\n this.latencyTimestamps.clear();\n this.precomputedLatencies.clear();\n }\n\n /**\n * Associate current latencies with a meeting id\n * @param meetingId\n */\n private setMeetingId(meetingId: string) {\n this.meetingId = meetingId;\n }\n\n /**\n * Returns the meeting object associated with current latencies\n * @returns meeting object\n */\n private getMeeting() {\n if (this.meetingId) {\n // @ts-ignore\n return this.webex.meetings.getBasicMeetingInformation(this.meetingId);\n }\n\n return undefined;\n }\n\n /**\n * Store timestamp value\n * @param key - key\n * @param value - value\n * @param options - store options\n * @throws\n * @returns\n */\n public saveTimestamp({\n key,\n value = new Date().getTime(),\n options = {},\n }: {\n key: MetricEventNames;\n value?: number;\n options?: {meetingId?: string};\n }) {\n // save the meetingId so we can use the meeting object in latency calculations if needed\n const {meetingId} = options;\n if (meetingId) {\n this.setMeetingId(meetingId);\n }\n // for some events we're only interested in the first timestamp not last\n // as these events can happen multiple times\n if (\n key === 'client.media.rx.start' ||\n key === 'client.media.tx.start' ||\n key === 'internal.client.meetinginfo.request' ||\n key === 'internal.client.meetinginfo.response' ||\n key === 'client.media-engine.remote-sdp-received'\n ) {\n this.saveFirstTimestampOnly(key, value);\n } else {\n this.latencyTimestamps.set(key, value);\n // new offer/answer so reset the remote SDP timestamp\n if (key === 'client.media-engine.local-sdp-generated') {\n this.latencyTimestamps.delete('client.media-engine.remote-sdp-received');\n }\n }\n }\n\n /**\n * Store precomputed latency value\n * @param key - key\n * @param value - value\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @throws\n * @returns\n */\n public saveLatency(key: PreComputedLatencies, value: number, accumulate = false) {\n const existingValue = accumulate ? this.precomputedLatencies.get(key) || 0 : 0;\n this.precomputedLatencies.set(key, value + existingValue);\n }\n\n /**\n * Measure latency for a request\n * @param callback - callback for which you would like to measure latency\n * @param key - key\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @returns\n */\n public measureLatency(\n callback: () => Promise<unknown>,\n key: PreComputedLatencies,\n accumulate = false\n ) {\n const start = performance.now();\n\n return callback().finally(() => {\n this.saveLatency(key, performance.now() - start, accumulate);\n });\n }\n\n /**\n * Store only the first timestamp value for the given key\n * @param key - key\n * @param value -value\n * @throws\n * @returns\n */\n saveFirstTimestampOnly(key: MetricEventNames, value: number = new Date().getTime()) {\n if (this.latencyTimestamps.has(key)) {\n return;\n }\n this.latencyTimestamps.set(key, value);\n }\n\n /**\n * Helper to calculate end - start\n * @param a start\n * @param b end\n * @returns latency\n */\n public getDiffBetweenTimestamps(a: MetricEventNames, b: MetricEventNames) {\n const start = this.latencyTimestamps.get(a);\n const end = this.latencyTimestamps.get(b);\n\n if (typeof start === 'number' && typeof end === 'number') {\n return end - start;\n }\n\n return undefined;\n }\n\n /**\n * Meeting Info Request\n * @note Meeting Info request happen not just in the join phase. CA requires\n * metrics around meeting info request that are only part of join phase.\n * This internal.* event is used to track the real timestamps\n * (when the actual request/response happen). This is because the actual CA event is\n * sent inside the join method on the meeting object based on some logic, but that's not exactly when\n * those events are actually fired. The logic only confirms that they have happened, and we send them over.\n * @returns - latency\n */\n public getMeetingInfoReqResp() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meetinginfo.request',\n 'internal.client.meetinginfo.response'\n );\n }\n\n /**\n * Interstitial Time\n * @returns - latency\n */\n public getShowInterstitialTime() {\n return this.getDiffBetweenTimestamps(\n 'client.interstitial-window.start-launch',\n 'internal.client.interstitial-window.click.joinbutton'\n );\n }\n\n /**\n * getU2CTime\n * @returns - latency\n */\n public getU2CTime() {\n const u2cLatency = this.precomputedLatencies.get('internal.get.u2c.time');\n\n return typeof u2cLatency === 'number' ? Math.floor(u2cLatency) : undefined;\n }\n\n /**\n * Device Register Time\n * @returns - latency\n */\n public getRegisterWDMDeviceJMT() {\n return this.getDiffBetweenTimestamps(\n 'internal.register.device.request',\n 'internal.register.device.response'\n );\n }\n\n /**\n * Call Init Join Request\n * @returns - latency\n */\n public getCallInitJoinReq() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.request'\n );\n }\n\n /**\n * Locus Join Request\n * @returns - latency\n */\n public getJoinReqResp() {\n return this.getDiffBetweenTimestamps('client.locus.join.request', 'client.locus.join.response');\n }\n\n /**\n * Time taken to do turn discovery\n * @returns - latency\n */\n public getTurnDiscoveryTime() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.add-media.turn-discovery.start',\n 'internal.client.add-media.turn-discovery.end'\n );\n }\n\n /**\n * Local SDP Generated Remote SDP REceived\n * @returns - latency\n */\n public getLocalSDPGenRemoteSDPRecv() {\n return this.getDiffBetweenTimestamps(\n 'client.media-engine.local-sdp-generated',\n 'client.media-engine.remote-sdp-received'\n );\n }\n\n /**\n * ICE Setup Time\n * @returns - latency\n */\n public getICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Audio ICE time\n * @returns - latency\n */\n public getAudioICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Video ICE Time\n * @returns - latency\n */\n public getVideoICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Share ICE Time\n * @returns - latency\n */\n public getShareICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Stay Lobby Time\n * @returns - latency\n */\n public getStayLobbyTime() {\n return this.getDiffBetweenTimestamps(\n 'client.locus.join.response',\n 'internal.host.meeting.participant.admitted'\n );\n }\n\n /**\n * Page JMT\n * @returns - latency\n */\n public getPageJMT() {\n const latency = this.precomputedLatencies.get('internal.client.pageJMT');\n\n return typeof latency === 'number' ? latency : undefined;\n }\n\n /**\n * Download Time JMT\n * @returns - latency\n */\n public getDownloadTimeJMT() {\n const latency = this.precomputedLatencies.get('internal.download.time');\n\n return typeof latency === 'number' ? latency : undefined;\n }\n\n /**\n * Click To Interstitial\n * @returns - latency\n */\n public getClickToInterstitial() {\n // for normal join (where green join button exists before interstitial, i.e reminder, space list etc)\n if (this.latencyTimestamps.get('internal.client.meeting.click.joinbutton')) {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n const clickToInterstitialLatency = this.precomputedLatencies.get(\n 'internal.click.to.interstitial'\n );\n\n if (typeof clickToInterstitialLatency === 'number') {\n return clickToInterstitialLatency;\n }\n\n return undefined;\n }\n\n /**\n * Click To Interstitial With User Delay\n * @returns - latency\n */\n public getClickToInterstitialWithUserDelay() {\n // for normal join (where green join button exists before interstitial, i.e reminder, space list etc)\n if (this.latencyTimestamps.get('internal.client.meeting.click.joinbutton')) {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n const clickToInterstitialWithUserDelayLatency = this.precomputedLatencies.get(\n 'internal.click.to.interstitial.with.user.delay'\n );\n\n if (typeof clickToInterstitialWithUserDelayLatency === 'number') {\n return clickToInterstitialWithUserDelayLatency;\n }\n\n return undefined;\n }\n\n /**\n * Interstitial To Join Ok\n * @returns - latency\n */\n public getInterstitialToJoinOK() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.response'\n );\n }\n\n /**\n * Call Init To MediaEngineReady\n * @returns - latency\n */\n public getCallInitMediaEngineReady() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.media-engine.ready'\n );\n }\n\n /**\n * Interstitial To Media Ok\n * @returns - latency\n */\n public getInterstitialToMediaOKJMT() {\n const interstitialJoinClickTimestamp = this.latencyTimestamps.get(\n 'internal.client.interstitial-window.click.joinbutton'\n );\n\n // get the first timestamp\n const connectedMedia = this.latencyTimestamps.get('client.ice.end');\n\n const lobbyTimeLatency = this.getStayLobbyTime();\n const lobbyTime = typeof lobbyTimeLatency === 'number' ? lobbyTimeLatency : 0;\n\n if (interstitialJoinClickTimestamp && connectedMedia) {\n return connectedMedia - interstitialJoinClickTimestamp - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Total JMT\n * @returns - latency\n */\n public getTotalJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n\n if (typeof clickToInterstitial === 'number' && typeof interstitialToJoinOk === 'number') {\n return clickToInterstitial + interstitialToJoinOk;\n }\n\n return undefined;\n }\n\n /**\n * Total JMT With User Delay\n * @returns - latency\n */\n public getTotalJMTWithUserDelay() {\n const clickToInterstitialWithUserDelay = this.getClickToInterstitialWithUserDelay();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n\n if (\n typeof clickToInterstitialWithUserDelay === 'number' &&\n typeof interstitialToJoinOk === 'number'\n ) {\n return clickToInterstitialWithUserDelay + interstitialToJoinOk;\n }\n\n return undefined;\n }\n\n /**\n * Join Conf JMT\n * @returns - latency\n */\n public getJoinConfJMT() {\n const joinReqResp = this.getJoinReqResp();\n const ICESetupTime = this.getICESetupTime();\n\n if (joinReqResp && ICESetupTime) {\n return joinReqResp + ICESetupTime;\n }\n\n return undefined;\n }\n\n /**\n * Total Media JMT\n * @returns - latency\n */\n public getTotalMediaJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n const lobbyTime = this.getStayLobbyTime();\n\n if (clickToInterstitial && interstitialToJoinOk && joinConfJMT) {\n const totalMediaJMT = clickToInterstitial + interstitialToJoinOk + joinConfJMT;\n if (this.getMeeting()?.allowMediaInLobby) {\n return totalMediaJMT;\n }\n\n return totalMediaJMT - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Total Media JMT With User Delay\n * @returns - latency\n */\n public getTotalMediaJMTWithUserDelay() {\n const clickToInterstitialWithUserDelay = this.getClickToInterstitialWithUserDelay();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n\n if (clickToInterstitialWithUserDelay && interstitialToJoinOk && joinConfJMT) {\n return clickToInterstitialWithUserDelay + interstitialToJoinOk + joinConfJMT;\n }\n\n return undefined;\n }\n\n /**\n * Client JMT\n * @returns - latency\n */\n public getClientJMT() {\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n\n if (typeof interstitialToJoinOk === 'number' && typeof joinConfJMT === 'number') {\n return interstitialToJoinOk - joinConfJMT;\n }\n\n return undefined;\n }\n\n /**\n * Audio setup delay receive\n */\n public getAudioJoinRespRxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.rx.start');\n }\n\n /**\n * Video setup delay receive\n */\n public getVideoJoinRespRxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.rx.start');\n }\n\n /**\n * Total latency for all get cluster request.\n */\n public getReachabilityClustersReqResp() {\n const reachablityClusterReqResp = this.precomputedLatencies.get('internal.get.cluster.time');\n\n return typeof reachablityClusterReqResp === 'number'\n ? Math.floor(reachablityClusterReqResp)\n : undefined;\n }\n\n /**\n * Audio setup delay transmit\n */\n public getAudioJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Video setup delay transmit\n */\n public getVideoJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Total latency for all exchange ci token.\n */\n public getExchangeCITokenJMT() {\n const exchangeCITokenJMT = this.precomputedLatencies.get('internal.exchange.ci.token.time');\n\n return typeof exchangeCITokenJMT === 'number' ? Math.floor(exchangeCITokenJMT) : undefined;\n }\n\n /**\n * Total latency for all refresh captcha requests.\n */\n public getRefreshCaptchaReqResp() {\n const refreshCaptchaReqResp = this.precomputedLatencies.get('internal.refresh.captcha.time');\n\n return typeof refreshCaptchaReqResp === 'number'\n ? Math.floor(refreshCaptchaReqResp)\n : undefined;\n }\n\n /**\n * Get the latency for downloading intelligence models.\n * @returns - latency\n */\n public getDownloadIntelligenceModelsReqResp() {\n const downloadIntelligenceModelsReqResp = this.precomputedLatencies.get(\n 'internal.api.fetch.intelligence.models'\n );\n\n return typeof downloadIntelligenceModelsReqResp === 'number'\n ? Math.floor(downloadIntelligenceModelsReqResp)\n : undefined;\n }\n\n /**\n * Get the total latency for all other app API requests.\n * Excludes meeting info, because it's measured separately.\n * @returns - latency\n */\n public getOtherAppApiReqResp() {\n const otherAppApiJMT = this.precomputedLatencies.get('internal.other.app.api.time');\n\n return otherAppApiJMT > 0 ? Math.floor(otherAppApiJMT) : undefined;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","CallDiagnosticLatencies","exports","_WebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","latencyTimestamps","_map","precomputedLatencies","_createClass2","key","value","clearTimestamps","clear","setMeetingId","meetingId","getMeeting","webex","meetings","getBasicMeetingInformation","undefined","saveTimestamp","_ref","_ref$value","Date","getTime","_ref$options","options","saveFirstTimestampOnly","set","delete","saveLatency","accumulate","existingValue","get","measureLatency","callback","_this2","start","performance","now","finally","has","getDiffBetweenTimestamps","a","b","clampValues","end","diff","_clampValues$minimum","minimum","maximum","Math","min","Infinity","max","getMeetingInfoReqResp","getShowInterstitialTime","getU2CTime","u2cLatency","floor","getRegisterWDMDeviceJMT","getCallInitJoinReq","getJoinReqResp","getTurnDiscoveryTime","getLocalSDPGenRemoteSDPRecv","getICESetupTime","getAudioICESetupTime","getVideoICESetupTime","getShareICESetupTime","getStayLobbyTime","getPageJMT","latency","getDownloadTimeJMT","getClickToInterstitial","clickToInterstitialLatency","getClickToInterstitialWithUserDelay","clickToInterstitialWithUserDelayLatency","getInterstitialToJoinOK","getCallInitMediaEngineReady","getInterstitialToMediaOKJMT","interstitialJoinClickTimestamp","connectedMedia","lobbyTimeLatency","lobbyTime","interstitialToMediaOKJmt","getTotalJMT","clickToInterstitial","interstitialToJoinOk","getTotalJMTWithUserDelay","clickToInterstitialWithUserDelay","getJoinConfJMT","joinReqResp","ICESetupTime","getTotalMediaJMT","joinConfJMT","_this$getMeeting","totalMediaJMT","allowMediaInLobby","getTotalMediaJMTWithUserDelay","getClientJMT","getAudioJoinRespRxStart","getVideoJoinRespRxStart","getReachabilityClustersReqResp","reachablityClusterReqResp","getAudioJoinRespTxStart","getVideoJoinRespTxStart","getShareDuration","getExchangeCITokenJMT","exchangeCITokenJMT","getRefreshCaptchaReqResp","refreshCaptchaReqResp","getDownloadIntelligenceModelsReqResp","downloadIntelligenceModelsReqResp","getOtherAppApiReqResp","otherAppApiJMT","WebexPlugin"],"sources":["call-diagnostic-metrics-latencies.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {MetricEventNames, PreComputedLatencies} from '../metrics.types';\n\n// we only care about client event and feature event for now\n\n/**\n * @description Helper class to store latencies timestamp and to calculate various latencies for CA.\n * @exports\n * @class CallDiagnosticLatencies\n */\nexport default class CallDiagnosticLatencies extends WebexPlugin {\n latencyTimestamps: Map<MetricEventNames, number>;\n precomputedLatencies: Map<PreComputedLatencies, number>;\n // meetingId that the current latencies are for\n private meetingId?: string;\n\n /**\n * @constructor\n */\n constructor(...args) {\n super(...args);\n this.latencyTimestamps = new Map();\n this.precomputedLatencies = new Map();\n }\n\n /**\n * Clear timestamps\n */\n public clearTimestamps() {\n this.latencyTimestamps.clear();\n this.precomputedLatencies.clear();\n }\n\n /**\n * Associate current latencies with a meeting id\n * @param meetingId\n */\n private setMeetingId(meetingId: string) {\n this.meetingId = meetingId;\n }\n\n /**\n * Returns the meeting object associated with current latencies\n * @returns meeting object\n */\n private getMeeting() {\n if (this.meetingId) {\n // @ts-ignore\n return this.webex.meetings.getBasicMeetingInformation(this.meetingId);\n }\n\n return undefined;\n }\n\n /**\n * Store timestamp value\n * @param key - key\n * @param value - value\n * @param options - store options\n * @throws\n * @returns\n */\n public saveTimestamp({\n key,\n value = new Date().getTime(),\n options = {},\n }: {\n key: MetricEventNames;\n value?: number;\n options?: {meetingId?: string};\n }) {\n // save the meetingId so we can use the meeting object in latency calculations if needed\n const {meetingId} = options;\n if (meetingId) {\n this.setMeetingId(meetingId);\n }\n // for some events we're only interested in the first timestamp not last\n // as these events can happen multiple times\n if (\n key === 'client.media.rx.start' ||\n key === 'client.media.tx.start' ||\n key === 'internal.client.meetinginfo.request' ||\n key === 'internal.client.meetinginfo.response' ||\n key === 'client.media-engine.remote-sdp-received'\n ) {\n this.saveFirstTimestampOnly(key, value);\n } else {\n this.latencyTimestamps.set(key, value);\n // new offer/answer so reset the remote SDP timestamp\n if (key === 'client.media-engine.local-sdp-generated') {\n this.latencyTimestamps.delete('client.media-engine.remote-sdp-received');\n }\n }\n }\n\n /**\n * Store precomputed latency value\n * @param key - key\n * @param value - value\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @throws\n * @returns\n */\n public saveLatency(key: PreComputedLatencies, value: number, accumulate = false) {\n const existingValue = accumulate ? this.precomputedLatencies.get(key) || 0 : 0;\n this.precomputedLatencies.set(key, value + existingValue);\n }\n\n /**\n * Measure latency for a request\n * @param callback - callback for which you would like to measure latency\n * @param key - key\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @returns\n */\n public measureLatency(\n callback: () => Promise<unknown>,\n key: PreComputedLatencies,\n accumulate = false\n ) {\n const start = performance.now();\n\n return callback().finally(() => {\n this.saveLatency(key, performance.now() - start, accumulate);\n });\n }\n\n /**\n * Store only the first timestamp value for the given key\n * @param key - key\n * @param value -value\n * @throws\n * @returns\n */\n saveFirstTimestampOnly(key: MetricEventNames, value: number = new Date().getTime()) {\n if (this.latencyTimestamps.has(key)) {\n return;\n }\n this.latencyTimestamps.set(key, value);\n }\n\n /**\n * Helper to calculate end - start\n * @param a start\n * @param b end\n * @returns latency\n */\n public getDiffBetweenTimestamps(\n a: MetricEventNames,\n b: MetricEventNames,\n clampValues?: {minimum?: number; maximum?: number}\n ) {\n const start = this.latencyTimestamps.get(a);\n const end = this.latencyTimestamps.get(b);\n\n if (typeof start !== 'number' || typeof end !== 'number') {\n return undefined;\n }\n\n const diff = end - start;\n\n if (!clampValues) {\n return diff;\n }\n\n const {minimum = 0, maximum} = clampValues;\n\n return Math.min(maximum ?? Infinity, Math.max(diff, minimum));\n }\n\n /**\n * Meeting Info Request\n * @note Meeting Info request happen not just in the join phase. CA requires\n * metrics around meeting info request that are only part of join phase.\n * This internal.* event is used to track the real timestamps\n * (when the actual request/response happen). This is because the actual CA event is\n * sent inside the join method on the meeting object based on some logic, but that's not exactly when\n * those events are actually fired. The logic only confirms that they have happened, and we send them over.\n * @returns - latency\n */\n public getMeetingInfoReqResp() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meetinginfo.request',\n 'internal.client.meetinginfo.response',\n {maximum: 1200000}\n );\n }\n\n /**\n * Interstitial Time\n * @returns - latency\n */\n public getShowInterstitialTime() {\n return this.getDiffBetweenTimestamps(\n 'client.interstitial-window.start-launch',\n 'internal.client.interstitial-window.click.joinbutton'\n );\n }\n\n /**\n * getU2CTime\n * @returns - latency\n */\n public getU2CTime() {\n const u2cLatency = this.precomputedLatencies.get('internal.get.u2c.time');\n\n return typeof u2cLatency === 'number' ? Math.floor(u2cLatency) : undefined;\n }\n\n /**\n * Device Register Time\n * @returns - latency\n */\n public getRegisterWDMDeviceJMT() {\n return this.getDiffBetweenTimestamps(\n 'internal.register.device.request',\n 'internal.register.device.response'\n );\n }\n\n /**\n * Call Init Join Request\n * @returns - latency\n */\n public getCallInitJoinReq() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.request',\n {maximum: 1200000}\n );\n }\n\n /**\n * Locus Join Request\n * @returns - latency\n */\n public getJoinReqResp() {\n return this.getDiffBetweenTimestamps(\n 'client.locus.join.request',\n 'client.locus.join.response',\n {maximum: 1200000}\n );\n }\n\n /**\n * Time taken to do turn discovery\n * @returns - latency\n */\n public getTurnDiscoveryTime() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.add-media.turn-discovery.start',\n 'internal.client.add-media.turn-discovery.end'\n );\n }\n\n /**\n * Local SDP Generated Remote SDP REceived\n * @returns - latency\n */\n public getLocalSDPGenRemoteSDPRecv() {\n return this.getDiffBetweenTimestamps(\n 'client.media-engine.local-sdp-generated',\n 'client.media-engine.remote-sdp-received',\n {maximum: 1200000}\n );\n }\n\n /**\n * ICE Setup Time\n * @returns - latency\n */\n public getICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end', {maximum: 1200000});\n }\n\n /**\n * Audio ICE time\n * @returns - latency\n */\n public getAudioICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Video ICE Time\n * @returns - latency\n */\n public getVideoICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Share ICE Time\n * @returns - latency\n */\n public getShareICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Stay Lobby Time\n * @returns - latency\n */\n public getStayLobbyTime() {\n return this.getDiffBetweenTimestamps(\n 'client.locus.join.response',\n 'internal.host.meeting.participant.admitted'\n );\n }\n\n /**\n * Page JMT\n * @returns - latency\n */\n public getPageJMT() {\n const latency = this.precomputedLatencies.get('internal.client.pageJMT');\n\n return typeof latency === 'number' ? latency : undefined;\n }\n\n /**\n * Download Time JMT\n * @returns - latency\n */\n public getDownloadTimeJMT() {\n const latency = this.precomputedLatencies.get('internal.download.time');\n\n return typeof latency === 'number' ? latency : undefined;\n }\n\n /**\n * Click To Interstitial\n * @returns - latency\n */\n public getClickToInterstitial() {\n // for normal join (where green join button exists before interstitial, i.e reminder, space list etc)\n if (this.latencyTimestamps.get('internal.client.meeting.click.joinbutton')) {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n const clickToInterstitialLatency = this.precomputedLatencies.get(\n 'internal.click.to.interstitial'\n );\n\n if (typeof clickToInterstitialLatency === 'number') {\n return clickToInterstitialLatency;\n }\n\n return undefined;\n }\n\n /**\n * Click To Interstitial With User Delay\n * @returns - latency\n */\n public getClickToInterstitialWithUserDelay() {\n // for normal join (where green join button exists before interstitial, i.e reminder, space list etc)\n if (this.latencyTimestamps.get('internal.client.meeting.click.joinbutton')) {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n const clickToInterstitialWithUserDelayLatency = this.precomputedLatencies.get(\n 'internal.click.to.interstitial.with.user.delay'\n );\n\n if (typeof clickToInterstitialWithUserDelayLatency === 'number') {\n return clickToInterstitialWithUserDelayLatency;\n }\n\n return undefined;\n }\n\n /**\n * Interstitial To Join Ok\n * @returns - latency\n */\n public getInterstitialToJoinOK() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.response'\n );\n }\n\n /**\n * Call Init To MediaEngineReady\n * @returns - latency\n */\n public getCallInitMediaEngineReady() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.media-engine.ready',\n {maximum: 1200000}\n );\n }\n\n /**\n * Interstitial To Media Ok\n * @returns - latency\n */\n public getInterstitialToMediaOKJMT() {\n const interstitialJoinClickTimestamp = this.latencyTimestamps.get(\n 'internal.client.interstitial-window.click.joinbutton'\n );\n\n // get the first timestamp\n const connectedMedia = this.latencyTimestamps.get('client.ice.end');\n\n const lobbyTimeLatency = this.getStayLobbyTime();\n const lobbyTime = typeof lobbyTimeLatency === 'number' ? lobbyTimeLatency : 0;\n\n if (interstitialJoinClickTimestamp && connectedMedia) {\n const interstitialToMediaOKJmt = connectedMedia - interstitialJoinClickTimestamp - lobbyTime;\n\n return Math.max(0, interstitialToMediaOKJmt);\n }\n\n return undefined;\n }\n\n /**\n * Total JMT\n * @returns - latency\n */\n public getTotalJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n\n if (typeof clickToInterstitial === 'number' && typeof interstitialToJoinOk === 'number') {\n return clickToInterstitial + interstitialToJoinOk;\n }\n\n return undefined;\n }\n\n /**\n * Total JMT With User Delay\n * @returns - latency\n */\n public getTotalJMTWithUserDelay() {\n const clickToInterstitialWithUserDelay = this.getClickToInterstitialWithUserDelay();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n\n if (\n typeof clickToInterstitialWithUserDelay === 'number' &&\n typeof interstitialToJoinOk === 'number'\n ) {\n return clickToInterstitialWithUserDelay + interstitialToJoinOk;\n }\n\n return undefined;\n }\n\n /**\n * Join Conf JMT\n * @returns - latency\n */\n public getJoinConfJMT() {\n const joinReqResp = this.getJoinReqResp();\n const ICESetupTime = this.getICESetupTime();\n\n if (joinReqResp && ICESetupTime) {\n return joinReqResp + ICESetupTime;\n }\n\n return undefined;\n }\n\n /**\n * Total Media JMT\n * @returns - latency\n */\n public getTotalMediaJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n const lobbyTime = this.getStayLobbyTime();\n\n if (clickToInterstitial && interstitialToJoinOk && joinConfJMT) {\n const totalMediaJMT = Math.max(0, clickToInterstitial + interstitialToJoinOk + joinConfJMT);\n if (this.getMeeting()?.allowMediaInLobby) {\n return totalMediaJMT;\n }\n\n return Math.max(0, totalMediaJMT - lobbyTime);\n }\n\n return undefined;\n }\n\n /**\n * Total Media JMT With User Delay\n * @returns - latency\n */\n public getTotalMediaJMTWithUserDelay() {\n const clickToInterstitialWithUserDelay = this.getClickToInterstitialWithUserDelay();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n\n if (clickToInterstitialWithUserDelay && interstitialToJoinOk && joinConfJMT) {\n return Math.max(0, clickToInterstitialWithUserDelay + interstitialToJoinOk + joinConfJMT);\n }\n\n return undefined;\n }\n\n /**\n * Client JMT\n * @returns - latency\n */\n public getClientJMT() {\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n\n if (typeof interstitialToJoinOk === 'number' && typeof joinConfJMT === 'number') {\n return Math.max(0, interstitialToJoinOk - joinConfJMT);\n }\n\n return undefined;\n }\n\n /**\n * Audio setup delay receive\n */\n public getAudioJoinRespRxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.rx.start');\n }\n\n /**\n * Video setup delay receive\n */\n public getVideoJoinRespRxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.rx.start');\n }\n\n /**\n * Total latency for all get cluster request.\n */\n public getReachabilityClustersReqResp() {\n const reachablityClusterReqResp = this.precomputedLatencies.get('internal.get.cluster.time');\n\n return typeof reachablityClusterReqResp === 'number'\n ? Math.floor(reachablityClusterReqResp)\n : undefined;\n }\n\n /**\n * Audio setup delay transmit\n */\n public getAudioJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Video setup delay transmit\n */\n public getVideoJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Time from share initiation to share stop (ms).\n */\n public getShareDuration() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.share.initiated',\n 'internal.client.share.stopped'\n );\n }\n\n /**\n * Total latency for all exchange ci token.\n */\n public getExchangeCITokenJMT() {\n const exchangeCITokenJMT = this.precomputedLatencies.get('internal.exchange.ci.token.time');\n\n return typeof exchangeCITokenJMT === 'number' ? Math.floor(exchangeCITokenJMT) : undefined;\n }\n\n /**\n * Total latency for all refresh captcha requests.\n */\n public getRefreshCaptchaReqResp() {\n const refreshCaptchaReqResp = this.precomputedLatencies.get('internal.refresh.captcha.time');\n\n return typeof refreshCaptchaReqResp === 'number'\n ? Math.floor(refreshCaptchaReqResp)\n : undefined;\n }\n\n /**\n * Get the latency for downloading intelligence models.\n * @returns - latency\n */\n public getDownloadIntelligenceModelsReqResp() {\n const downloadIntelligenceModelsReqResp = this.precomputedLatencies.get(\n 'internal.api.fetch.intelligence.models'\n );\n\n return typeof downloadIntelligenceModelsReqResp === 'number'\n ? Math.floor(downloadIntelligenceModelsReqResp)\n : undefined;\n }\n\n /**\n * Get the total latency for all other app API requests.\n * Excludes meeting info, because it's measured separately.\n * @returns - latency\n */\n public getOtherAppApiReqResp() {\n const otherAppApiJMT = this.precomputedLatencies.get('internal.other.app.api.time');\n\n return otherAppApiJMT > 0 ? Math.floor(otherAppApiJMT) : undefined;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAEA,IAAAA,UAAA,GAAAC,OAAA;AAA8C,SAAAC,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,OAAA,GAAAO,MAAA,MAAAN,yBAAA,QAAAO,SAAA,OAAAH,gBAAA,CAAAC,OAAA,QAAAG,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAN,KAAA,EAAAO,SAAA,EAAAH,SAAA,YAAAD,MAAA,GAAAH,KAAA,CAAAQ,KAAA,OAAAD,SAAA,gBAAAE,2BAAA,CAAAP,OAAA,QAAAC,MAAA;AAAA,SAAAL,0BAAA,eAAAY,OAAA,qBAAAJ,kBAAA,oBAAAA,kBAAA,CAAAK,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAV,kBAAA,CAAAO,OAAA,8CAAAI,CAAA,sBAF9C,4CACA;AAKA;AAEA;AACA;AACA;AACA;AACA;AAJA,IAKqBC,uBAAuB,GAAAC,OAAA,CAAAjB,OAAA,0BAAAkB,YAAA;EAAA,IAAAC,UAAA,CAAAnB,OAAA,EAAAgB,uBAAA,EAAAE,YAAA;EAAA,IAAAE,MAAA,GAAA3B,YAAA,CAAAuB,uBAAA;EAM1C;AACF;AACA;EACE,SAAAA,wBAAA,EAAqB;IAAA,IAAAK,KAAA;IAAA,IAAAC,gBAAA,CAAAtB,OAAA,QAAAgB,uBAAA;IAAA,SAAAO,IAAA,GAAAlB,SAAA,CAAAmB,MAAA,EAANC,IAAI,OAAAC,KAAA,CAAAH,IAAA,GAAAI,IAAA,MAAAA,IAAA,GAAAJ,IAAA,EAAAI,IAAA;MAAJF,IAAI,CAAAE,IAAA,IAAAtB,SAAA,CAAAsB,IAAA;IAAA;IACjBN,KAAA,GAAAD,MAAA,CAAAN,IAAA,CAAAR,KAAA,CAAAc,MAAA,SAAAQ,MAAA,CAASH,IAAI;IAAE,IAAAI,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAPjB;IAAA,IAAAQ,gBAAA,CAAA7B,OAAA,MAAA8B,uBAAA,CAAA9B,OAAA,EAAAqB,KAAA;IAQEA,KAAA,CAAKU,iBAAiB,GAAG,IAAAC,IAAA,CAAAhC,OAAA,CAAQ,CAAC;IAClCqB,KAAA,CAAKY,oBAAoB,GAAG,IAAAD,IAAA,CAAAhC,OAAA,CAAQ,CAAC;IAAC,OAAAqB,KAAA;EACxC;;EAEA;AACF;AACA;EAFE,IAAAa,aAAA,CAAAlC,OAAA,EAAAgB,uBAAA;IAAAmB,GAAA;IAAAC,KAAA,EAGA,SAAAC,gBAAA,EAAyB;MACvB,IAAI,CAACN,iBAAiB,CAACO,KAAK,CAAC,CAAC;MAC9B,IAAI,CAACL,oBAAoB,CAACK,KAAK,CAAC,CAAC;IACnC;;IAEA;AACF;AACA;AACA;EAHE;IAAAH,GAAA;IAAAC,KAAA,EAIA,SAAAG,aAAqBC,SAAiB,EAAE;MACtC,IAAI,CAACA,SAAS,GAAGA,SAAS;IAC5B;;IAEA;AACF;AACA;AACA;EAHE;IAAAL,GAAA;IAAAC,KAAA,EAIA,SAAAK,WAAA,EAAqB;MACnB,IAAI,IAAI,CAACD,SAAS,EAAE;QAClB;QACA,OAAO,IAAI,CAACE,KAAK,CAACC,QAAQ,CAACC,0BAA0B,CAAC,IAAI,CAACJ,SAAS,CAAC;MACvE;MAEA,OAAOK,SAAS;IAClB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAV,GAAA;IAAAC,KAAA,EAQA,SAAAU,cAAAC,IAAA,EAQG;MAAA,IAPDZ,GAAG,GAAAY,IAAA,CAAHZ,GAAG;QAAAa,UAAA,GAAAD,IAAA,CACHX,KAAK;QAALA,KAAK,GAAAY,UAAA,cAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,GAAAF,UAAA;QAAAG,YAAA,GAAAJ,IAAA,CAC5BK,OAAO;QAAPA,OAAO,GAAAD,YAAA,cAAG,CAAC,CAAC,GAAAA,YAAA;MAMZ;MACA,IAAOX,SAAS,GAAIY,OAAO,CAApBZ,SAAS;MAChB,IAAIA,SAAS,EAAE;QACb,IAAI,CAACD,YAAY,CAACC,SAAS,CAAC;MAC9B;MACA;MACA;MACA,IACEL,GAAG,KAAK,uBAAuB,IAC/BA,GAAG,KAAK,uBAAuB,IAC/BA,GAAG,KAAK,qCAAqC,IAC7CA,GAAG,KAAK,sCAAsC,IAC9CA,GAAG,KAAK,yCAAyC,EACjD;QACA,IAAI,CAACkB,sBAAsB,CAAClB,GAAG,EAAEC,KAAK,CAAC;MACzC,CAAC,MAAM;QACL,IAAI,CAACL,iBAAiB,CAACuB,GAAG,CAACnB,GAAG,EAAEC,KAAK,CAAC;QACtC;QACA,IAAID,GAAG,KAAK,yCAAyC,EAAE;UACrD,IAAI,CAACJ,iBAAiB,CAACwB,MAAM,CAAC,yCAAyC,CAAC;QAC1E;MACF;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAApB,GAAA;IAAAC,KAAA,EAQA,SAAAoB,YAAmBrB,GAAyB,EAAEC,KAAa,EAAsB;MAAA,IAApBqB,UAAU,GAAApD,SAAA,CAAAmB,MAAA,QAAAnB,SAAA,QAAAwC,SAAA,GAAAxC,SAAA,MAAG,KAAK;MAC7E,IAAMqD,aAAa,GAAGD,UAAU,GAAG,IAAI,CAACxB,oBAAoB,CAAC0B,GAAG,CAACxB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;MAC9E,IAAI,CAACF,oBAAoB,CAACqB,GAAG,CAACnB,GAAG,EAAEC,KAAK,GAAGsB,aAAa,CAAC;IAC3D;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAvB,GAAA;IAAAC,KAAA,EAOA,SAAAwB,eACEC,QAAgC,EAChC1B,GAAyB,EAEzB;MAAA,IAAA2B,MAAA;MAAA,IADAL,UAAU,GAAApD,SAAA,CAAAmB,MAAA,QAAAnB,SAAA,QAAAwC,SAAA,GAAAxC,SAAA,MAAG,KAAK;MAElB,IAAM0D,KAAK,GAAGC,WAAW,CAACC,GAAG,CAAC,CAAC;MAE/B,OAAOJ,QAAQ,CAAC,CAAC,CAACK,OAAO,CAAC,YAAM;QAC9BJ,MAAI,CAACN,WAAW,CAACrB,GAAG,EAAE6B,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGF,KAAK,EAAEN,UAAU,CAAC;MAC9D,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAtB,GAAA;IAAAC,KAAA,EAOA,SAAAiB,uBAAuBlB,GAAqB,EAAwC;MAAA,IAAtCC,KAAa,GAAA/B,SAAA,CAAAmB,MAAA,QAAAnB,SAAA,QAAAwC,SAAA,GAAAxC,SAAA,MAAG,IAAI4C,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;MAChF,IAAI,IAAI,CAACnB,iBAAiB,CAACoC,GAAG,CAAChC,GAAG,CAAC,EAAE;QACnC;MACF;MACA,IAAI,CAACJ,iBAAiB,CAACuB,GAAG,CAACnB,GAAG,EAAEC,KAAK,CAAC;IACxC;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAD,GAAA;IAAAC,KAAA,EAMA,SAAAgC,yBACEC,CAAmB,EACnBC,CAAmB,EACnBC,WAAkD,EAClD;MACA,IAAMR,KAAK,GAAG,IAAI,CAAChC,iBAAiB,CAAC4B,GAAG,CAACU,CAAC,CAAC;MAC3C,IAAMG,GAAG,GAAG,IAAI,CAACzC,iBAAiB,CAAC4B,GAAG,CAACW,CAAC,CAAC;MAEzC,IAAI,OAAOP,KAAK,KAAK,QAAQ,IAAI,OAAOS,GAAG,KAAK,QAAQ,EAAE;QACxD,OAAO3B,SAAS;MAClB;MAEA,IAAM4B,IAAI,GAAGD,GAAG,GAAGT,KAAK;MAExB,IAAI,CAACQ,WAAW,EAAE;QAChB,OAAOE,IAAI;MACb;MAEA,IAAAC,oBAAA,GAA+BH,WAAW,CAAnCI,OAAO;QAAPA,OAAO,GAAAD,oBAAA,cAAG,CAAC,GAAAA,oBAAA;QAAEE,OAAO,GAAIL,WAAW,CAAtBK,OAAO;MAE3B,OAAOC,IAAI,CAACC,GAAG,CAACF,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAIG,QAAQ,EAAEF,IAAI,CAACG,GAAG,CAACP,IAAI,EAAEE,OAAO,CAAC,CAAC;IAC/D;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EATE;IAAAxC,GAAA;IAAAC,KAAA,EAUA,SAAA6C,sBAAA,EAA+B;MAC7B,OAAO,IAAI,CAACb,wBAAwB,CAClC,qCAAqC,EACrC,sCAAsC,EACtC;QAACQ,OAAO,EAAE;MAAO,CACnB,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAzC,GAAA;IAAAC,KAAA,EAIA,SAAA8C,wBAAA,EAAiC;MAC/B,OAAO,IAAI,CAACd,wBAAwB,CAClC,yCAAyC,EACzC,sDACF,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAjC,GAAA;IAAAC,KAAA,EAIA,SAAA+C,WAAA,EAAoB;MAClB,IAAMC,UAAU,GAAG,IAAI,CAACnD,oBAAoB,CAAC0B,GAAG,CAAC,uBAAuB,CAAC;MAEzE,OAAO,OAAOyB,UAAU,KAAK,QAAQ,GAAGP,IAAI,CAACQ,KAAK,CAACD,UAAU,CAAC,GAAGvC,SAAS;IAC5E;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAAkD,wBAAA,EAAiC;MAC/B,OAAO,IAAI,CAAClB,wBAAwB,CAClC,kCAAkC,EAClC,mCACF,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAjC,GAAA;IAAAC,KAAA,EAIA,SAAAmD,mBAAA,EAA4B;MAC1B,OAAO,IAAI,CAACnB,wBAAwB,CAClC,sDAAsD,EACtD,2BAA2B,EAC3B;QAACQ,OAAO,EAAE;MAAO,CACnB,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAzC,GAAA;IAAAC,KAAA,EAIA,SAAAoD,eAAA,EAAwB;MACtB,OAAO,IAAI,CAACpB,wBAAwB,CAClC,2BAA2B,EAC3B,4BAA4B,EAC5B;QAACQ,OAAO,EAAE;MAAO,CACnB,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAzC,GAAA;IAAAC,KAAA,EAIA,SAAAqD,qBAAA,EAA8B;MAC5B,OAAO,IAAI,CAACrB,wBAAwB,CAClC,gDAAgD,EAChD,8CACF,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAjC,GAAA;IAAAC,KAAA,EAIA,SAAAsD,4BAAA,EAAqC;MACnC,OAAO,IAAI,CAACtB,wBAAwB,CAClC,yCAAyC,EACzC,yCAAyC,EACzC;QAACQ,OAAO,EAAE;MAAO,CACnB,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAzC,GAAA;IAAAC,KAAA,EAIA,SAAAuD,gBAAA,EAAyB;MACvB,OAAO,IAAI,CAACvB,wBAAwB,CAAC,kBAAkB,EAAE,gBAAgB,EAAE;QAACQ,OAAO,EAAE;MAAO,CAAC,CAAC;IAChG;;IAEA;AACF;AACA;AACA;EAHE;IAAAzC,GAAA;IAAAC,KAAA,EAIA,SAAAwD,qBAAA,EAA8B;MAC5B,OAAO,IAAI,CAACxB,wBAAwB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IAC5E;;IAEA;AACF;AACA;AACA;EAHE;IAAAjC,GAAA;IAAAC,KAAA,EAIA,SAAAyD,qBAAA,EAA8B;MAC5B,OAAO,IAAI,CAACzB,wBAAwB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IAC5E;;IAEA;AACF;AACA;AACA;EAHE;IAAAjC,GAAA;IAAAC,KAAA,EAIA,SAAA0D,qBAAA,EAA8B;MAC5B,OAAO,IAAI,CAAC1B,wBAAwB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IAC5E;;IAEA;AACF;AACA;AACA;EAHE;IAAAjC,GAAA;IAAAC,KAAA,EAIA,SAAA2D,iBAAA,EAA0B;MACxB,OAAO,IAAI,CAAC3B,wBAAwB,CAClC,4BAA4B,EAC5B,4CACF,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAjC,GAAA;IAAAC,KAAA,EAIA,SAAA4D,WAAA,EAAoB;MAClB,IAAMC,OAAO,GAAG,IAAI,CAAChE,oBAAoB,CAAC0B,GAAG,CAAC,yBAAyB,CAAC;MAExE,OAAO,OAAOsC,OAAO,KAAK,QAAQ,GAAGA,OAAO,GAAGpD,SAAS;IAC1D;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAA8D,mBAAA,EAA4B;MAC1B,IAAMD,OAAO,GAAG,IAAI,CAAChE,oBAAoB,CAAC0B,GAAG,CAAC,wBAAwB,CAAC;MAEvE,OAAO,OAAOsC,OAAO,KAAK,QAAQ,GAAGA,OAAO,GAAGpD,SAAS;IAC1D;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAA+D,uBAAA,EAAgC;MAC9B;MACA,IAAI,IAAI,CAACpE,iBAAiB,CAAC4B,GAAG,CAAC,0CAA0C,CAAC,EAAE;QAC1E,OAAO,IAAI,CAACS,wBAAwB,CAClC,0CAA0C,EAC1C,oDACF,CAAC;MACH;MAEA,IAAMgC,0BAA0B,GAAG,IAAI,CAACnE,oBAAoB,CAAC0B,GAAG,CAC9D,gCACF,CAAC;MAED,IAAI,OAAOyC,0BAA0B,KAAK,QAAQ,EAAE;QAClD,OAAOA,0BAA0B;MACnC;MAEA,OAAOvD,SAAS;IAClB;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAAiE,oCAAA,EAA6C;MAC3C;MACA,IAAI,IAAI,CAACtE,iBAAiB,CAAC4B,GAAG,CAAC,0CAA0C,CAAC,EAAE;QAC1E,OAAO,IAAI,CAACS,wBAAwB,CAClC,0CAA0C,EAC1C,oDACF,CAAC;MACH;MAEA,IAAMkC,uCAAuC,GAAG,IAAI,CAACrE,oBAAoB,CAAC0B,GAAG,CAC3E,gDACF,CAAC;MAED,IAAI,OAAO2C,uCAAuC,KAAK,QAAQ,EAAE;QAC/D,OAAOA,uCAAuC;MAChD;MAEA,OAAOzD,SAAS;IAClB;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAAmE,wBAAA,EAAiC;MAC/B,OAAO,IAAI,CAACnC,wBAAwB,CAClC,sDAAsD,EACtD,4BACF,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAjC,GAAA;IAAAC,KAAA,EAIA,SAAAoE,4BAAA,EAAqC;MACnC,OAAO,IAAI,CAACpC,wBAAwB,CAClC,sDAAsD,EACtD,2BAA2B,EAC3B;QAACQ,OAAO,EAAE;MAAO,CACnB,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAzC,GAAA;IAAAC,KAAA,EAIA,SAAAqE,4BAAA,EAAqC;MACnC,IAAMC,8BAA8B,GAAG,IAAI,CAAC3E,iBAAiB,CAAC4B,GAAG,CAC/D,sDACF,CAAC;;MAED;MACA,IAAMgD,cAAc,GAAG,IAAI,CAAC5E,iBAAiB,CAAC4B,GAAG,CAAC,gBAAgB,CAAC;MAEnE,IAAMiD,gBAAgB,GAAG,IAAI,CAACb,gBAAgB,CAAC,CAAC;MAChD,IAAMc,SAAS,GAAG,OAAOD,gBAAgB,KAAK,QAAQ,GAAGA,gBAAgB,GAAG,CAAC;MAE7E,IAAIF,8BAA8B,IAAIC,cAAc,EAAE;QACpD,IAAMG,wBAAwB,GAAGH,cAAc,GAAGD,8BAA8B,GAAGG,SAAS;QAE5F,OAAOhC,IAAI,CAACG,GAAG,CAAC,CAAC,EAAE8B,wBAAwB,CAAC;MAC9C;MAEA,OAAOjE,SAAS;IAClB;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAA2E,YAAA,EAAqB;MACnB,IAAMC,mBAAmB,GAAG,IAAI,CAACb,sBAAsB,CAAC,CAAC;MACzD,IAAMc,oBAAoB,GAAG,IAAI,CAACV,uBAAuB,CAAC,CAAC;MAE3D,IAAI,OAAOS,mBAAmB,KAAK,QAAQ,IAAI,OAAOC,oBAAoB,KAAK,QAAQ,EAAE;QACvF,OAAOD,mBAAmB,GAAGC,oBAAoB;MACnD;MAEA,OAAOpE,SAAS;IAClB;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAA8E,yBAAA,EAAkC;MAChC,IAAMC,gCAAgC,GAAG,IAAI,CAACd,mCAAmC,CAAC,CAAC;MACnF,IAAMY,oBAAoB,GAAG,IAAI,CAACV,uBAAuB,CAAC,CAAC;MAE3D,IACE,OAAOY,gCAAgC,KAAK,QAAQ,IACpD,OAAOF,oBAAoB,KAAK,QAAQ,EACxC;QACA,OAAOE,gCAAgC,GAAGF,oBAAoB;MAChE;MAEA,OAAOpE,SAAS;IAClB;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAAgF,eAAA,EAAwB;MACtB,IAAMC,WAAW,GAAG,IAAI,CAAC7B,cAAc,CAAC,CAAC;MACzC,IAAM8B,YAAY,GAAG,IAAI,CAAC3B,eAAe,CAAC,CAAC;MAE3C,IAAI0B,WAAW,IAAIC,YAAY,EAAE;QAC/B,OAAOD,WAAW,GAAGC,YAAY;MACnC;MAEA,OAAOzE,SAAS;IAClB;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAAmF,iBAAA,EAA0B;MACxB,IAAMP,mBAAmB,GAAG,IAAI,CAACb,sBAAsB,CAAC,CAAC;MACzD,IAAMc,oBAAoB,GAAG,IAAI,CAACV,uBAAuB,CAAC,CAAC;MAC3D,IAAMiB,WAAW,GAAG,IAAI,CAACJ,cAAc,CAAC,CAAC;MACzC,IAAMP,SAAS,GAAG,IAAI,CAACd,gBAAgB,CAAC,CAAC;MAEzC,IAAIiB,mBAAmB,IAAIC,oBAAoB,IAAIO,WAAW,EAAE;QAAA,IAAAC,gBAAA;QAC9D,IAAMC,aAAa,GAAG7C,IAAI,CAACG,GAAG,CAAC,CAAC,EAAEgC,mBAAmB,GAAGC,oBAAoB,GAAGO,WAAW,CAAC;QAC3F,KAAAC,gBAAA,GAAI,IAAI,CAAChF,UAAU,CAAC,CAAC,cAAAgF,gBAAA,eAAjBA,gBAAA,CAAmBE,iBAAiB,EAAE;UACxC,OAAOD,aAAa;QACtB;QAEA,OAAO7C,IAAI,CAACG,GAAG,CAAC,CAAC,EAAE0C,aAAa,GAAGb,SAAS,CAAC;MAC/C;MAEA,OAAOhE,SAAS;IAClB;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAAwF,8BAAA,EAAuC;MACrC,IAAMT,gCAAgC,GAAG,IAAI,CAACd,mCAAmC,CAAC,CAAC;MACnF,IAAMY,oBAAoB,GAAG,IAAI,CAACV,uBAAuB,CAAC,CAAC;MAC3D,IAAMiB,WAAW,GAAG,IAAI,CAACJ,cAAc,CAAC,CAAC;MAEzC,IAAID,gCAAgC,IAAIF,oBAAoB,IAAIO,WAAW,EAAE;QAC3E,OAAO3C,IAAI,CAACG,GAAG,CAAC,CAAC,EAAEmC,gCAAgC,GAAGF,oBAAoB,GAAGO,WAAW,CAAC;MAC3F;MAEA,OAAO3E,SAAS;IAClB;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAAyF,aAAA,EAAsB;MACpB,IAAMZ,oBAAoB,GAAG,IAAI,CAACV,uBAAuB,CAAC,CAAC;MAC3D,IAAMiB,WAAW,GAAG,IAAI,CAACJ,cAAc,CAAC,CAAC;MAEzC,IAAI,OAAOH,oBAAoB,KAAK,QAAQ,IAAI,OAAOO,WAAW,KAAK,QAAQ,EAAE;QAC/E,OAAO3C,IAAI,CAACG,GAAG,CAAC,CAAC,EAAEiC,oBAAoB,GAAGO,WAAW,CAAC;MACxD;MAEA,OAAO3E,SAAS;IAClB;;IAEA;AACF;AACA;EAFE;IAAAV,GAAA;IAAAC,KAAA,EAGA,SAAA0F,wBAAA,EAAiC;MAC/B,OAAO,IAAI,CAAC1D,wBAAwB,CAAC,4BAA4B,EAAE,uBAAuB,CAAC;IAC7F;;IAEA;AACF;AACA;EAFE;IAAAjC,GAAA;IAAAC,KAAA,EAGA,SAAA2F,wBAAA,EAAiC;MAC/B,OAAO,IAAI,CAAC3D,wBAAwB,CAAC,4BAA4B,EAAE,uBAAuB,CAAC;IAC7F;;IAEA;AACF;AACA;EAFE;IAAAjC,GAAA;IAAAC,KAAA,EAGA,SAAA4F,+BAAA,EAAwC;MACtC,IAAMC,yBAAyB,GAAG,IAAI,CAAChG,oBAAoB,CAAC0B,GAAG,CAAC,2BAA2B,CAAC;MAE5F,OAAO,OAAOsE,yBAAyB,KAAK,QAAQ,GAChDpD,IAAI,CAACQ,KAAK,CAAC4C,yBAAyB,CAAC,GACrCpF,SAAS;IACf;;IAEA;AACF;AACA;EAFE;IAAAV,GAAA;IAAAC,KAAA,EAGA,SAAA8F,wBAAA,EAAiC;MAC/B,OAAO,IAAI,CAAC9D,wBAAwB,CAAC,4BAA4B,EAAE,uBAAuB,CAAC;IAC7F;;IAEA;AACF;AACA;EAFE;IAAAjC,GAAA;IAAAC,KAAA,EAGA,SAAA+F,wBAAA,EAAiC;MAC/B,OAAO,IAAI,CAAC/D,wBAAwB,CAAC,4BAA4B,EAAE,uBAAuB,CAAC;IAC7F;;IAEA;AACF;AACA;EAFE;IAAAjC,GAAA;IAAAC,KAAA,EAGA,SAAAgG,iBAAA,EAA0B;MACxB,OAAO,IAAI,CAAChE,wBAAwB,CAClC,iCAAiC,EACjC,+BACF,CAAC;IACH;;IAEA;AACF;AACA;EAFE;IAAAjC,GAAA;IAAAC,KAAA,EAGA,SAAAiG,sBAAA,EAA+B;MAC7B,IAAMC,kBAAkB,GAAG,IAAI,CAACrG,oBAAoB,CAAC0B,GAAG,CAAC,iCAAiC,CAAC;MAE3F,OAAO,OAAO2E,kBAAkB,KAAK,QAAQ,GAAGzD,IAAI,CAACQ,KAAK,CAACiD,kBAAkB,CAAC,GAAGzF,SAAS;IAC5F;;IAEA;AACF;AACA;EAFE;IAAAV,GAAA;IAAAC,KAAA,EAGA,SAAAmG,yBAAA,EAAkC;MAChC,IAAMC,qBAAqB,GAAG,IAAI,CAACvG,oBAAoB,CAAC0B,GAAG,CAAC,+BAA+B,CAAC;MAE5F,OAAO,OAAO6E,qBAAqB,KAAK,QAAQ,GAC5C3D,IAAI,CAACQ,KAAK,CAACmD,qBAAqB,CAAC,GACjC3F,SAAS;IACf;;IAEA;AACF;AACA;AACA;EAHE;IAAAV,GAAA;IAAAC,KAAA,EAIA,SAAAqG,qCAAA,EAA8C;MAC5C,IAAMC,iCAAiC,GAAG,IAAI,CAACzG,oBAAoB,CAAC0B,GAAG,CACrE,wCACF,CAAC;MAED,OAAO,OAAO+E,iCAAiC,KAAK,QAAQ,GACxD7D,IAAI,CAACQ,KAAK,CAACqD,iCAAiC,CAAC,GAC7C7F,SAAS;IACf;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAV,GAAA;IAAAC,KAAA,EAKA,SAAAuG,sBAAA,EAA+B;MAC7B,IAAMC,cAAc,GAAG,IAAI,CAAC3G,oBAAoB,CAAC0B,GAAG,CAAC,6BAA6B,CAAC;MAEnF,OAAOiF,cAAc,GAAG,CAAC,GAAG/D,IAAI,CAACQ,KAAK,CAACuD,cAAc,CAAC,GAAG/F,SAAS;IACpE;EAAC;EAAA,OAAA7B,uBAAA;AAAA,EAhmBkD6H,sBAAW"}
|
|
@@ -14,8 +14,11 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
14
14
|
exports.default = void 0;
|
|
15
15
|
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
16
16
|
var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
|
|
17
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
|
|
18
|
+
var _set = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/set"));
|
|
17
19
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
18
20
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
21
|
+
var _from = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/from"));
|
|
19
22
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
20
23
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
|
|
21
24
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
@@ -75,6 +78,8 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
75
78
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "delayedClientFeatureEvents", []);
|
|
76
79
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "eventErrorCache", new _weakMap.default());
|
|
77
80
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isMercuryConnected", false);
|
|
81
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "eventLimitTracker", new _map.default());
|
|
82
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "eventLimitWarningsLogged", new _set.default());
|
|
78
83
|
// the default validator before piping an event to the batcher
|
|
79
84
|
// this function can be overridden by the user
|
|
80
85
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "validator", function (options) {
|
|
@@ -613,6 +618,128 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
613
618
|
this.eventErrorCache = new _weakMap.default();
|
|
614
619
|
}
|
|
615
620
|
|
|
621
|
+
/**
|
|
622
|
+
* Checks if an event should be limited based on criteria defined in the event dictionary.
|
|
623
|
+
* Returns true if the event should be sent, false if it has reached its limit.
|
|
624
|
+
* @param event - The diagnostic event object
|
|
625
|
+
* @returns boolean indicating whether the event should be sent
|
|
626
|
+
*/
|
|
627
|
+
}, {
|
|
628
|
+
key: "shouldSendEvent",
|
|
629
|
+
value: function shouldSendEvent(_ref7) {
|
|
630
|
+
var _event$identifiers;
|
|
631
|
+
var event = _ref7.event;
|
|
632
|
+
var eventName = event === null || event === void 0 ? void 0 : event.name;
|
|
633
|
+
var correlationId = event === null || event === void 0 ? void 0 : (_event$identifiers = event.identifiers) === null || _event$identifiers === void 0 ? void 0 : _event$identifiers.correlationId;
|
|
634
|
+
if (!correlationId || correlationId === 'unknown') {
|
|
635
|
+
return true;
|
|
636
|
+
}
|
|
637
|
+
var limitKeyPrefix = "".concat(eventName, ":").concat(correlationId);
|
|
638
|
+
switch (eventName) {
|
|
639
|
+
case 'client.media.render.start':
|
|
640
|
+
case 'client.media.render.stop':
|
|
641
|
+
case 'client.media.rx.start':
|
|
642
|
+
case 'client.media.rx.stop':
|
|
643
|
+
case 'client.media.tx.start':
|
|
644
|
+
case 'client.media.tx.stop':
|
|
645
|
+
{
|
|
646
|
+
// Send only once per mediaType-correlationId pair (or mediaType-correlationId-shareInstanceId for share/share_audio)
|
|
647
|
+
var mediaType = event === null || event === void 0 ? void 0 : event.mediaType;
|
|
648
|
+
if (mediaType) {
|
|
649
|
+
if (mediaType === 'share' || mediaType === 'share_audio') {
|
|
650
|
+
var shareInstanceId = event === null || event === void 0 ? void 0 : event.shareInstanceId;
|
|
651
|
+
if (shareInstanceId) {
|
|
652
|
+
var limitKey = "".concat(limitKeyPrefix, ":").concat(mediaType, ":").concat(shareInstanceId);
|
|
653
|
+
return this.checkAndIncrementEventCount(limitKey, 1, "".concat(eventName, " for ").concat(mediaType, " instance ").concat(shareInstanceId));
|
|
654
|
+
}
|
|
655
|
+
} else {
|
|
656
|
+
var _limitKey = "".concat(limitKeyPrefix, ":").concat(mediaType);
|
|
657
|
+
return this.checkAndIncrementEventCount(_limitKey, 1, "".concat(eventName, " for mediaType ").concat(mediaType));
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
break;
|
|
661
|
+
}
|
|
662
|
+
case 'client.roap-message.received':
|
|
663
|
+
case 'client.roap-message.sent':
|
|
664
|
+
{
|
|
665
|
+
var _event$roap, _event$roap2;
|
|
666
|
+
// Send only once per correlationId and roap.messageType/roap.type
|
|
667
|
+
var roapMessageType = (event === null || event === void 0 ? void 0 : (_event$roap = event.roap) === null || _event$roap === void 0 ? void 0 : _event$roap.messageType) || (event === null || event === void 0 ? void 0 : (_event$roap2 = event.roap) === null || _event$roap2 === void 0 ? void 0 : _event$roap2.type);
|
|
668
|
+
if (roapMessageType) {
|
|
669
|
+
var _limitKey2 = "".concat(limitKeyPrefix, ":").concat(roapMessageType);
|
|
670
|
+
return this.checkAndIncrementEventCount(_limitKey2, 1, "".concat(eventName, " for ROAP type ").concat(roapMessageType));
|
|
671
|
+
}
|
|
672
|
+
break;
|
|
673
|
+
}
|
|
674
|
+
default:
|
|
675
|
+
return true;
|
|
676
|
+
}
|
|
677
|
+
return true;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
/**
|
|
681
|
+
* Checks the current count for a limit key and increments if under limit.
|
|
682
|
+
* @param limitKey - The unique key for this limit combination
|
|
683
|
+
* @param maxCount - Maximum allowed count
|
|
684
|
+
* @param eventDescription - Description for logging
|
|
685
|
+
* @returns true if under limit and incremented, false if at/over limit
|
|
686
|
+
*/
|
|
687
|
+
}, {
|
|
688
|
+
key: "checkAndIncrementEventCount",
|
|
689
|
+
value: function checkAndIncrementEventCount(limitKey, maxCount, eventDescription) {
|
|
690
|
+
var currentCount = this.eventLimitTracker.get(limitKey) || 0;
|
|
691
|
+
if (currentCount >= maxCount) {
|
|
692
|
+
// Log warning only once per limit key
|
|
693
|
+
if (!this.eventLimitWarningsLogged.has(limitKey)) {
|
|
694
|
+
this.logger.log(_config2.CALL_DIAGNOSTIC_LOG_IDENTIFIER, "CallDiagnosticMetrics: Event limit reached for ".concat(eventDescription, ". ") + "Max count ".concat(maxCount, " exceeded. Event will not be sent."), "limitKey: ".concat(limitKey));
|
|
695
|
+
this.eventLimitWarningsLogged.add(limitKey);
|
|
696
|
+
}
|
|
697
|
+
return false;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
// Increment count and allow event
|
|
701
|
+
this.eventLimitTracker.set(limitKey, currentCount + 1);
|
|
702
|
+
return true;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
/**
|
|
706
|
+
* Clears event limit tracking
|
|
707
|
+
*/
|
|
708
|
+
}, {
|
|
709
|
+
key: "clearEventLimits",
|
|
710
|
+
value: function clearEventLimits() {
|
|
711
|
+
this.eventLimitTracker.clear();
|
|
712
|
+
this.eventLimitWarningsLogged.clear();
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
/**
|
|
716
|
+
* Clears event limit tracking for a specific correlationId only.
|
|
717
|
+
* Keeps limits for other meetings intact.
|
|
718
|
+
*/
|
|
719
|
+
}, {
|
|
720
|
+
key: "clearEventLimitsForCorrelationId",
|
|
721
|
+
value: function clearEventLimitsForCorrelationId(correlationId) {
|
|
722
|
+
if (!correlationId) {
|
|
723
|
+
return;
|
|
724
|
+
}
|
|
725
|
+
// Keys are formatted as "eventName:correlationId:..." across all limiters.
|
|
726
|
+
var hasCorrIdAtSecondToken = function hasCorrIdAtSecondToken(key) {
|
|
727
|
+
return key.split(':')[1] === correlationId;
|
|
728
|
+
};
|
|
729
|
+
for (var _i = 0, _Array$from = (0, _from.default)(this.eventLimitTracker.keys()); _i < _Array$from.length; _i++) {
|
|
730
|
+
var key = _Array$from[_i];
|
|
731
|
+
if (hasCorrIdAtSecondToken(key)) {
|
|
732
|
+
this.eventLimitTracker.delete(key);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
for (var _i2 = 0, _Array$from3 = (0, _from.default)(this.eventLimitWarningsLogged.values()); _i2 < _Array$from3.length; _i2++) {
|
|
736
|
+
var _key2 = _Array$from3[_i2];
|
|
737
|
+
if (hasCorrIdAtSecondToken(_key2)) {
|
|
738
|
+
this.eventLimitWarningsLogged.delete(_key2);
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
|
|
616
743
|
/**
|
|
617
744
|
* Generate error payload for Client Event
|
|
618
745
|
* @param rawError
|
|
@@ -725,12 +852,12 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
725
852
|
*/
|
|
726
853
|
}, {
|
|
727
854
|
key: "createCommonEventObjectInMeeting",
|
|
728
|
-
value: function createCommonEventObjectInMeeting(
|
|
855
|
+
value: function createCommonEventObjectInMeeting(_ref8) {
|
|
729
856
|
var _this$webex$meetings2, _this$webex$meetings3, _this$webex$meetings4, _options$joinFlowVers, _meeting$callStateFor;
|
|
730
|
-
var name =
|
|
731
|
-
options =
|
|
732
|
-
|
|
733
|
-
eventType =
|
|
857
|
+
var name = _ref8.name,
|
|
858
|
+
options = _ref8.options,
|
|
859
|
+
_ref8$eventType = _ref8.eventType,
|
|
860
|
+
eventType = _ref8$eventType === void 0 ? 'client' : _ref8$eventType;
|
|
734
861
|
var meetingId = options.meetingId,
|
|
735
862
|
mediaConnections = options.mediaConnections,
|
|
736
863
|
globalMeetingId = options.globalMeetingId,
|
|
@@ -808,10 +935,10 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
808
935
|
*/
|
|
809
936
|
}, {
|
|
810
937
|
key: "createClientEventObjectInMeeting",
|
|
811
|
-
value: function createClientEventObjectInMeeting(
|
|
812
|
-
var name =
|
|
813
|
-
options =
|
|
814
|
-
errors =
|
|
938
|
+
value: function createClientEventObjectInMeeting(_ref9) {
|
|
939
|
+
var name = _ref9.name,
|
|
940
|
+
options = _ref9.options,
|
|
941
|
+
errors = _ref9.errors;
|
|
815
942
|
var commonObject = this.createCommonEventObjectInMeeting({
|
|
816
943
|
name: name,
|
|
817
944
|
options: options,
|
|
@@ -834,9 +961,9 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
834
961
|
*/
|
|
835
962
|
}, {
|
|
836
963
|
key: "createFeatureEventObjectInMeeting",
|
|
837
|
-
value: function createFeatureEventObjectInMeeting(
|
|
838
|
-
var name =
|
|
839
|
-
options =
|
|
964
|
+
value: function createFeatureEventObjectInMeeting(_ref10) {
|
|
965
|
+
var name = _ref10.name,
|
|
966
|
+
options = _ref10.options;
|
|
840
967
|
var commonObject = this.createCommonEventObjectInMeeting({
|
|
841
968
|
name: name,
|
|
842
969
|
options: options,
|
|
@@ -857,11 +984,11 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
857
984
|
*/
|
|
858
985
|
}, {
|
|
859
986
|
key: "createClientEventObjectPreMeeting",
|
|
860
|
-
value: function createClientEventObjectPreMeeting(
|
|
987
|
+
value: function createClientEventObjectPreMeeting(_ref11) {
|
|
861
988
|
var _this$webex$meetings5, _this$webex$meetings6, _this$webex$meetings7;
|
|
862
|
-
var name =
|
|
863
|
-
options =
|
|
864
|
-
errors =
|
|
989
|
+
var name = _ref11.name,
|
|
990
|
+
options = _ref11.options,
|
|
991
|
+
errors = _ref11.errors;
|
|
865
992
|
var correlationId = options.correlationId,
|
|
866
993
|
globalMeetingId = options.globalMeetingId,
|
|
867
994
|
webexConferenceIdStr = options.webexConferenceIdStr,
|
|
@@ -917,10 +1044,10 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
917
1044
|
*/
|
|
918
1045
|
}, {
|
|
919
1046
|
key: "prepareClientEvent",
|
|
920
|
-
value: function prepareClientEvent(
|
|
921
|
-
var name =
|
|
922
|
-
payload =
|
|
923
|
-
options =
|
|
1047
|
+
value: function prepareClientEvent(_ref12) {
|
|
1048
|
+
var name = _ref12.name,
|
|
1049
|
+
payload = _ref12.payload,
|
|
1050
|
+
options = _ref12.options;
|
|
924
1051
|
var meetingId = options.meetingId,
|
|
925
1052
|
correlationId = options.correlationId,
|
|
926
1053
|
rawError = options.rawError;
|
|
@@ -976,11 +1103,11 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
976
1103
|
*/
|
|
977
1104
|
}, {
|
|
978
1105
|
key: "submitClientEvent",
|
|
979
|
-
value: function submitClientEvent(
|
|
980
|
-
var name =
|
|
981
|
-
payload =
|
|
982
|
-
options =
|
|
983
|
-
delaySubmitEvent =
|
|
1106
|
+
value: function submitClientEvent(_ref13) {
|
|
1107
|
+
var name = _ref13.name,
|
|
1108
|
+
payload = _ref13.payload,
|
|
1109
|
+
options = _ref13.options,
|
|
1110
|
+
delaySubmitEvent = _ref13.delaySubmitEvent;
|
|
984
1111
|
if (delaySubmitEvent) {
|
|
985
1112
|
// Preserve the time when the event was triggered if delaying the submission to Call Diagnostics
|
|
986
1113
|
var delayedOptions = _objectSpread(_objectSpread({}, options), {}, {
|
|
@@ -999,6 +1126,9 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
999
1126
|
payload: payload,
|
|
1000
1127
|
options: options
|
|
1001
1128
|
});
|
|
1129
|
+
if (!this.shouldSendEvent(diagnosticEvent)) {
|
|
1130
|
+
return _promise.default.resolve();
|
|
1131
|
+
}
|
|
1002
1132
|
if (options !== null && options !== void 0 && options.preLoginId) {
|
|
1003
1133
|
return this.submitToCallDiagnosticsPreLogin(diagnosticEvent, options === null || options === void 0 ? void 0 : options.preLoginId);
|
|
1004
1134
|
}
|
|
@@ -1089,12 +1219,12 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
1089
1219
|
* @throws
|
|
1090
1220
|
*/
|
|
1091
1221
|
function () {
|
|
1092
|
-
var _buildClientEventFetchRequestOptions = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(
|
|
1222
|
+
var _buildClientEventFetchRequestOptions = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref14) {
|
|
1093
1223
|
var name, payload, options, clientEvent, diagnosticEvent, request;
|
|
1094
1224
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
1095
1225
|
while (1) switch (_context.prev = _context.next) {
|
|
1096
1226
|
case 0:
|
|
1097
|
-
name =
|
|
1227
|
+
name = _ref14.name, payload = _ref14.payload, options = _ref14.options;
|
|
1098
1228
|
this.logger.log(_config2.CALL_DIAGNOSTIC_LOG_IDENTIFIER, 'CallDiagnosticMetrics: @buildClientEventFetchRequestOptions. Building request options object for fetch()...', "name: ".concat(name));
|
|
1099
1229
|
clientEvent = this.prepareClientEvent({
|
|
1100
1230
|
name: name,
|