@webex/internal-plugin-metrics 3.12.0-next.30 → 3.12.0-next.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/call-diagnostic/call-diagnostic-metrics.js +23 -2
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
- package/dist/metrics.js +1 -1
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +30 -0
- package/package.json +3 -3
- package/src/call-diagnostic/call-diagnostic-metrics.ts +23 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +75 -0
|
@@ -132,6 +132,23 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
132
132
|
return null;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Returns the user activation state reported from the browser's navigator.userActivation API
|
|
137
|
+
* @returns object with hasBeenActive and isActive booleans, or undefined if unavailable
|
|
138
|
+
*/
|
|
139
|
+
}, {
|
|
140
|
+
key: "getUserActivation",
|
|
141
|
+
value: function getUserActivation() {
|
|
142
|
+
var userActivation = typeof navigator !== 'undefined' ? navigator.userActivation : undefined;
|
|
143
|
+
if (userActivation) {
|
|
144
|
+
return {
|
|
145
|
+
hasBeenActive: userActivation.hasBeenActive,
|
|
146
|
+
isActive: userActivation.isActive
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
|
|
135
152
|
/**
|
|
136
153
|
* Returns the telemetryOptOut value of the current user
|
|
137
154
|
* @returns one of 'manual', 'automatic', undefined
|
|
@@ -956,7 +973,9 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
956
973
|
// @ts-ignore
|
|
957
974
|
webClientPreload: (_this$webex$meetings2 = this.webex.meetings) === null || _this$webex$meetings2 === void 0 ? void 0 : (_this$webex$meetings3 = _this$webex$meetings2.config) === null || _this$webex$meetings3 === void 0 ? void 0 : (_this$webex$meetings4 = _this$webex$meetings3.metrics) === null || _this$webex$meetings4 === void 0 ? void 0 : _this$webex$meetings4.webClientPreload,
|
|
958
975
|
isVipMeeting: (meeting === null || meeting === void 0 ? void 0 : (_meeting$meetingInfo0 = meeting.meetingInfo) === null || _meeting$meetingInfo0 === void 0 ? void 0 : _meeting$meetingInfo0.vipmeeting) || false,
|
|
959
|
-
isAutomatedUser: typeof window !== 'undefined' && typeof navigator !== 'undefined' && !!((_navigator = navigator) !== null && _navigator !== void 0 && _navigator.webdriver)
|
|
976
|
+
isAutomatedUser: typeof window !== 'undefined' && typeof navigator !== 'undefined' && !!((_navigator = navigator) !== null && _navigator !== void 0 && _navigator.webdriver),
|
|
977
|
+
// if webdriver is true, it's most likely in a test environment
|
|
978
|
+
userActivation: this.getUserActivation()
|
|
960
979
|
});
|
|
961
980
|
var joinFlowVersion = (_options$joinFlowVers = options.joinFlowVersion) !== null && _options$joinFlowVers !== void 0 ? _options$joinFlowVers : (_meeting$callStateFor = meeting.callStateForMetrics) === null || _meeting$callStateFor === void 0 ? void 0 : _meeting$callStateFor.joinFlowVersion;
|
|
962
981
|
if (joinFlowVersion) {
|
|
@@ -1067,7 +1086,9 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
|
|
|
1067
1086
|
telemetryOptOut: this.getTelemetryOptOut(),
|
|
1068
1087
|
// @ts-ignore
|
|
1069
1088
|
webClientPreload: (_this$webex$meetings5 = this.webex.meetings) === null || _this$webex$meetings5 === void 0 ? void 0 : (_this$webex$meetings6 = _this$webex$meetings5.config) === null || _this$webex$meetings6 === void 0 ? void 0 : (_this$webex$meetings7 = _this$webex$meetings6.metrics) === null || _this$webex$meetings7 === void 0 ? void 0 : _this$webex$meetings7.webClientPreload,
|
|
1070
|
-
isAutomatedUser: typeof window !== 'undefined' && typeof navigator !== 'undefined' && !!((_navigator2 = navigator) !== null && _navigator2 !== void 0 && _navigator2.webdriver)
|
|
1089
|
+
isAutomatedUser: typeof window !== 'undefined' && typeof navigator !== 'undefined' && !!((_navigator2 = navigator) !== null && _navigator2 !== void 0 && _navigator2.webdriver),
|
|
1090
|
+
// if webdriver is true, it's most likely in a test environment
|
|
1091
|
+
userActivation: this.getUserActivation()
|
|
1071
1092
|
};
|
|
1072
1093
|
if (options.joinFlowVersion) {
|
|
1073
1094
|
clientEventObject.joinFlowVersion = options.joinFlowVersion;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_common","require","_uuid","_interopRequireDefault","_lodash","_webexCore","_metrics","_callDiagnosticMetrics","_config","_callDiagnosticMetricsBatcher","_preloginMetricsBatcher","_config2","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","_BrowserDetection","BrowserDetection","getOSVersion","getBrowserName","getBrowserVersion","CallDiagnosticMetrics","exports","_StatelessWebexPlugin","_this","_classCallCheck2","_len","args","Array","_key","concat","_weakMap","_map","_set","options","_promise","resolve","event","valid","preLoginId","finalEvent","eventPayload","type","markTelemetryOptOutOnResponse","preLoginMetricsBatcher","savePreLoginId","request","logger","webex","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","parent","PreLoginMetricsBatcher","_inherits2","_createClass2","key","value","getCurLoginType","canAuthorize","credentials","isUnverifiedGuest","getTelemetryOptOut","isTelemetryOptOutManual","isTelemetryOptOutAutomatic","undefined","setIsTelemetryOptOutManual","setIsTelemetryOptOutAutomatic","getIsConvergedArchitectureEnabled","_ref","meetingId","_meeting$meetingInfo","meeting","meetings","getBasicMeetingInformation","meetingInfo","enableConvergedArchitecture","setMercuryConnectedStatus","status","isMercuryConnected","getSubServiceType","webexScheduled","enableEvent","pmr","WEBEX_SUB_SERVICE_TYPES","PMR","SCHEDULED_MEETING","enableConvergedWebinarLargeScale","LARGE_SCALE_WEBINAR","isConvergedWebinarWebcast","WEBCAST","WEBINAR","getOrigin","_this$webex$meetings$","_this$webex$meetings$2","_this$webex$meetings$3","_this$webex$meetings$4","_this$webex$meetings$5","_this$webex$meetings$6","defaultClientType","config","metrics","clientType","defaultSubClientType","subClientType","providedClientVersion","clientVersion","defaultSDKClientVersion","CLIENT_NAME","version","versionMetadata","extractVersionMetadata","hasLoggedBrowserSerial","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","_stringify","getBrowserSerial","_this$webex$meetings","_this$webex$meetings$7","_this$webex$meetings$8","_this$webex$meetings$9","_this$webex$meetings$0","_this$webex$meetings$1","origin","name","networkType","userAgent","userAgentToString","clientName","webexVersion","clientInfo","publicNetworkPrefix","anonymizeIPAddress","geoHintInfo","clientAddress","localNetworkPrefix","meetingCollection","get","statsAnalyzer","getLocalIpAddress","osVersion","os","getOSNameInternal","browser","browserVersion","environment","newEnvironment","clientLaunchMethod","browserLaunchMethod","vendorId","Error","getIdentifiers","_meeting$locusInfo","_meeting$meetingInfo2","_meeting$meetingInfo3","_meeting$meetingInfo6","_meeting$meetingInfo8","mediaConnections","correlationId","webexConferenceIdStr","globalMeetingId","sessionCorrelationId","identifiers","device","_ref2","installationId","userId","deviceId","url","orgId","locusUrl","internal","services","machineId","locusInfo","fullState","locusId","split","pop","locusSessionId","sessionId","locusStartTime","lastActive","confIdStr","confID","_meeting$meetingInfo4","_meeting$meetingInfo5","_meeting$meetingInfo7","siteName","_meeting$meetingInfo9","webexSiteName","_mediaConnections$","_mediaConnections$2","mediaAgentAlias","mediaAgentGroupId","prepareDiagnosticEvent","eventData","_this$webex$meetings$10","triggeredTime","eventId","uuid","v4","originTime","triggered","Date","toISOString","sent","senderCountryCode","countryCode","clearEmptyKeysRecursively","prepareClientFeatureEvent","_ref3","payload","featureEventObject","createFeatureEventObjectInMeeting","merge","featureEvent","submitFeatureEvent","_ref4","delaySubmitEvent","delayedOptions","delayedClientFeatureEvents","CALL_FEATURE_LOG_IDENTIFIER","validator","submitToCallFeatures","submitMQE","_ref5","console","warn","submitClientMetrics","CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND","fields","clientEventObject","canProceed","webClientDomain","window","location","hostname","intervals","callingServiceType","meetingJoinInfo","clientSignallingProtocol","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","webexSubServiceType","diagnosticEvent","submitToCallDiagnostics","getErrorPayloadForClientErrorCode","_ref6","clientErrorCode","serviceErrorCode","serviceErrorName","rawErrorMessage","payloadOverrides","httpStatusCode","error","partialParsedError","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","fatal","shownToUser","category","errorCode","errorData","errorName","clearErrorCache","eventErrorCache","shouldSendEvent","_ref7","_event$identifiers","eventName","limitKeyPrefix","mediaType","shareInstanceId","limitKey","checkAndIncrementEventCount","_event$roap","_event$roap2","roapMessageType","roap","messageType","maxCount","eventDescription","currentCount","eventLimitTracker","eventLimitWarningsLogged","has","add","set","clearEventLimits","clear","clearEventLimitsForCorrelationId","hasCorrIdAtSecondToken","_i","_Array$from","_from","keys","delete","_i2","_Array$from3","values","generateClientEventErrorPayload","rawError","_rawError$error","_rawError$error$body","_rawError$body","_rawError$body2","_rawError$body3","_rawError$body3$reaso","cachedError","message","statusCode","isBrowserMediaErrorName","BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP","isSdpOfferCreationError","_rawError$cause","causeType","cause","SDP_OFFER_CREATION_ERROR_MAP","GENERAL","body","code","reason","reasonCode","SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP","isLocusServiceErrorCode","NEW_LOCUS_ERROR_CLIENT_CODE","isMeetingInfoServiceError","MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE","isNetworkError","NETWORK_ERROR","isUnauthorizedError","AUTHENTICATION_FAILED_CODE","UNKNOWN_ERROR","createCommonEventObjectInMeeting","_ref8","_this$webex$meetings2","_this$webex$meetings3","_this$webex$meetings4","_meeting$meetingInfo0","_navigator","_options$joinFlowVers","_meeting$callStateFor","_ref8$eventType","eventType","CALL_FEATURE_EVENT_FAILED_TO_SEND","commonEventObject","userType","getCurUserType","loginType","callStateForMetrics","telemetryOptOut","isConvergedArchitectureEnabled","userNameInput","emailInput","webClientPreload","isVipMeeting","vipmeeting","isAutomatedUser","navigator","webdriver","joinFlowVersion","meetingJoinedTime","isoLocalClientMeetingJoinTime","meetingJoinPhase","createClientEventObjectInMeeting","_ref9","errors","commonObject","_ref0","createClientEventObjectPreMeeting","_ref1","_this$webex$meetings5","_this$webex$meetings6","_this$webex$meetings7","_navigator2","prepareClientEvent","_ref10","_this$generateClientE","_this$generateClientE2","_slicedToArray2","generatedError","cached","submitClientEvent","_ref11","delayedClientEvents","submitToCallDiagnosticsPreLogin","submitDelayedClientEvents","overrides","_this2","promises","map","delayedSubmitClientEventParams","optionsWithOverrides","all","submitDelayedClientFeatureEvents","_this3","_buildClientEventFetchRequestOptions","_asyncToGenerator2","_regenerator","mark","_callee","_ref12","clientEvent","wrap","_context","prev","next","prepareDiagnosticMetricItem","method","service","resource","headers","waitForServiceTimeout","authorization","abrupt","prepareFetchOptions","stop","buildClientEventFetchRequestOptions","_x","isServiceErrorExpected","clientErrorPayload","setDeviceInfo","StatelessWebexPlugin"],"sources":["call-diagnostic-metrics.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {BrowserDetection, getBrowserSerial} from '@webex/common';\nimport uuid from 'uuid';\nimport {merge} from 'lodash';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\nimport {getOSNameInternal} from '../metrics';\n\nimport {\n anonymizeIPAddress,\n clearEmptyKeysRecursively,\n isLocusServiceErrorCode,\n prepareDiagnosticMetricItem,\n userAgentToString,\n extractVersionMetadata,\n isMeetingInfoServiceError,\n isBrowserMediaErrorName,\n isNetworkError,\n isUnauthorizedError,\n isSdpOfferCreationError,\n} from './call-diagnostic-metrics.util';\nimport {CLIENT_NAME} from '../config';\nimport {\n Event,\n ClientType,\n SubClientType,\n NetworkType,\n EnvironmentType,\n NewEnvironmentType,\n ClientEvent,\n SubmitClientEventOptions,\n MediaQualityEvent,\n SubmitMQEOptions,\n SubmitMQEPayload,\n ClientLaunchMethodType,\n ClientEventError,\n ClientEventPayload,\n ClientInfo,\n ClientEventPayloadError,\n ClientSubServiceType,\n BrowserLaunchMethodType,\n DelayedClientEvent,\n DelayedClientFeatureEvent,\n FeatureEvent,\n ClientFeatureEventPayload,\n} from '../metrics.types';\nimport CallDiagnosticEventsBatcher from './call-diagnostic-metrics-batcher';\nimport PreLoginMetricsBatcher from '../prelogin-metrics-batcher';\n\nimport {\n CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD,\n CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND,\n NEW_LOCUS_ERROR_CLIENT_CODE,\n SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP,\n UNKNOWN_ERROR,\n BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP,\n MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n NETWORK_ERROR,\n AUTHENTICATION_FAILED_CODE,\n WEBEX_SUB_SERVICE_TYPES,\n SDP_OFFER_CREATION_ERROR_MAP,\n CALL_FEATURE_LOG_IDENTIFIER,\n CALL_FEATURE_EVENT_FAILED_TO_SEND,\n} from './config';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\ntype GetOriginOptions = {\n clientType: ClientType;\n subClientType: SubClientType;\n networkType?: NetworkType;\n clientLaunchMethod?: ClientLaunchMethodType;\n browserLaunchMethod?: BrowserLaunchMethodType;\n environment?: EnvironmentType;\n newEnvironment?: NewEnvironmentType;\n vendorId?: string;\n};\n\ntype GetIdentifiersOptions = {\n meeting?: any;\n mediaConnections?: any[];\n correlationId?: string;\n sessionCorrelationId?: string;\n preLoginId?: string;\n globalMeetingId?: string;\n webexConferenceIdStr?: string;\n};\n\n/**\n * @description Util class to handle Call Analyzer Metrics\n * @export\n * @class CallDiagnosticMetrics\n */\nexport default class CallDiagnosticMetrics extends StatelessWebexPlugin {\n // @ts-ignore\n private callDiagnosticEventsBatcher: CallDiagnosticEventsBatcher;\n // @ts-ignore\n private preLoginMetricsBatcher: PreLoginMetricsBatcher;\n\n private logger: any; // to avoid adding @ts-ignore everywhere\n private hasLoggedBrowserSerial: boolean;\n private device: any;\n private delayedClientEvents: DelayedClientEvent[] = [];\n private delayedClientFeatureEvents: DelayedClientFeatureEvent[] = [];\n private eventErrorCache: WeakMap<any, any> = new WeakMap();\n private isMercuryConnected = false;\n private eventLimitTracker: Map<string, number> = new Map();\n private eventLimitWarningsLogged: Set<string> = new Set();\n private isTelemetryOptOutManual = false;\n private isTelemetryOptOutAutomatic = false;\n\n // the default validator before piping an event to the batcher\n // this function can be overridden by the user\n public validator: (options: {\n type: 'mqe' | 'ce';\n event: Event;\n }) => Promise<{event: Event; valid: boolean}> = (options: {type: 'mqe' | 'ce'; event: Event}) =>\n Promise.resolve({event: options?.event, valid: true});\n\n /**\n * Constructor\n * @param args\n */\n constructor(...args) {\n super(...args);\n // @ts-ignore\n this.logger = this.webex.logger;\n // @ts-ignore\n this.callDiagnosticEventsBatcher = new CallDiagnosticEventsBatcher({}, {parent: this.webex});\n // @ts-ignore\n this.preLoginMetricsBatcher = new PreLoginMetricsBatcher({}, {parent: this.webex});\n }\n\n /**\n * Returns the login type of the current user\n * @returns one of 'login-ci','unverified-guest', null\n */\n getCurLoginType() {\n // @ts-ignore\n if (this.webex.canAuthorize) {\n // @ts-ignore\n return this.webex.credentials.isUnverifiedGuest ? 'unverified-guest' : 'login-ci';\n }\n\n return null;\n }\n\n /**\n * Returns the telemetryOptOut value of the current user\n * @returns one of 'manual', 'automatic', undefined\n */\n public getTelemetryOptOut() {\n if (this.isTelemetryOptOutManual) {\n return 'manual';\n }\n if (this.isTelemetryOptOutAutomatic) {\n return 'automatic';\n }\n\n return undefined;\n }\n\n /**\n * Sets the manual telemetry opt-out status for the current user\n * @param value - boolean value indicating manual telemetry opt-out status\n */\n public setIsTelemetryOptOutManual(value: boolean) {\n this.isTelemetryOptOutManual = value;\n }\n\n /**\n * Sets the automatic telemetry opt-out status for the current user\n * @param value - boolean value indicating automatic telemetry opt-out status\n */\n public setIsTelemetryOptOutAutomatic(value: boolean) {\n this.isTelemetryOptOutAutomatic = value;\n }\n\n /**\n * Returns if the meeting has converged architecture enabled\n * @param options.meetingId\n */\n getIsConvergedArchitectureEnabled({meetingId}: {meetingId?: string}): boolean {\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n return meeting?.meetingInfo?.enableConvergedArchitecture;\n }\n\n return undefined;\n }\n\n /**\n * Sets mercury connected status for event data object in CA events\n * @public\n * @param status - boolean value indicating mercury connection status\n * @return {void}\n */\n public setMercuryConnectedStatus(status: boolean): void {\n this.isMercuryConnected = status;\n }\n\n /**\n * Returns meeting's subServiceType\n * @param meeting\n * @returns\n */\n getSubServiceType(meeting?: any): ClientSubServiceType {\n if (meeting) {\n // @ts-ignore\n const meetingInfo = meeting?.meetingInfo;\n // if not Scheduled, not Webinar, pmr - then pmr\n if (!meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.PMR;\n }\n // if Scheduled, not Webinar, not pmr - then ScheduledMeeting\n if (meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.SCHEDULED_MEETING;\n }\n\n // if ConvergedArchitecture enable and isConvergedWebinarWebcast -- then webcast\n if (meetingInfo?.enableConvergedArchitecture && meetingInfo?.enableEvent) {\n // if enableConvergedWebinarLargeScale - then large scale webinar\n if (meetingInfo?.enableConvergedWebinarLargeScale) {\n return WEBEX_SUB_SERVICE_TYPES.LARGE_SCALE_WEBINAR;\n }\n\n return meetingInfo?.isConvergedWebinarWebcast\n ? WEBEX_SUB_SERVICE_TYPES.WEBCAST\n : WEBEX_SUB_SERVICE_TYPES.WEBINAR;\n }\n\n // if Scheduled, enable event, not pmr - then Webinar\n if (meetingInfo?.webexScheduled && meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.WEBINAR;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get origin object for Call Diagnostic Event payload.\n * @param options\n * @param meetingId\n * @returns\n */\n getOrigin(options: GetOriginOptions, meetingId?: string) {\n const defaultClientType: ClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.clientType;\n const defaultSubClientType: SubClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.subClientType;\n // @ts-ignore\n const providedClientVersion: string = this.webex.meetings.config?.metrics?.clientVersion;\n // @ts-ignore\n const defaultSDKClientVersion = `${CLIENT_NAME}/${this.webex.version}`;\n\n let versionMetadata: Pick<ClientInfo, 'majorVersion' | 'minorVersion'> = {};\n\n // sdk version split doesn't really make sense for now...\n if (providedClientVersion) {\n versionMetadata = extractVersionMetadata(providedClientVersion);\n }\n\n if (!this.hasLoggedBrowserSerial) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticMetrics: @createClientEventObjectInMeeting => collected browser data`,\n JSON.stringify(getBrowserSerial())\n );\n\n this.hasLoggedBrowserSerial = true;\n }\n\n if (\n (defaultClientType && defaultSubClientType) ||\n (options.clientType && options.subClientType)\n ) {\n const origin: Event['origin'] = {\n name: 'endpoint',\n networkType: options?.networkType || 'unknown',\n userAgent: userAgentToString({\n // @ts-ignore\n clientName: this.webex.meetings?.config?.metrics?.clientName,\n // @ts-ignore\n webexVersion: this.webex.version,\n }),\n clientInfo: {\n clientType: options?.clientType || defaultClientType,\n clientVersion: providedClientVersion || defaultSDKClientVersion,\n ...versionMetadata,\n publicNetworkPrefix:\n // @ts-ignore\n anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress) || undefined,\n localNetworkPrefix:\n anonymizeIPAddress(\n // @ts-ignore\n this.webex.meetings.meetingCollection\n .get(meetingId)\n ?.statsAnalyzer?.getLocalIpAddress()\n ) || undefined,\n osVersion: getOSVersion() || 'unknown',\n subClientType: options?.subClientType || defaultSubClientType,\n os: getOSNameInternal(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion(),\n },\n };\n\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n if (meeting?.environment) {\n origin.environment = meeting.environment;\n }\n }\n\n if (options?.environment) {\n origin.environment = options.environment;\n }\n\n if (options?.newEnvironment) {\n origin.newEnvironment = options.newEnvironment;\n }\n\n if (options?.clientLaunchMethod) {\n origin.clientInfo.clientLaunchMethod = options.clientLaunchMethod;\n }\n\n if (options?.browserLaunchMethod) {\n origin.clientInfo.browserLaunchMethod = options.browserLaunchMethod;\n }\n\n if (options?.vendorId) {\n origin.clientInfo.vendorId = options.vendorId;\n }\n\n return origin;\n }\n\n throw new Error(\"ClientType and SubClientType can't be undefined\");\n }\n\n /**\n * Gather identifier details for call diagnostic payload.\n * @throws Error if initialization fails.\n * @param options\n */\n getIdentifiers(options: GetIdentifiersOptions) {\n const {\n meeting,\n mediaConnections,\n correlationId,\n webexConferenceIdStr,\n globalMeetingId,\n preLoginId,\n sessionCorrelationId,\n } = options;\n const identifiers: Event['event']['identifiers'] = {\n correlationId: 'unknown', // concerned with setting this to unknown. This will fail diagnostic events parsing because it's not a uuid pattern\n };\n\n if (meeting) {\n identifiers.correlationId = meeting.correlationId;\n if (meeting.sessionCorrelationId) {\n identifiers.sessionCorrelationId = meeting.sessionCorrelationId;\n }\n }\n\n if (sessionCorrelationId) {\n identifiers.sessionCorrelationId = sessionCorrelationId;\n }\n\n if (sessionCorrelationId) {\n identifiers.sessionCorrelationId = sessionCorrelationId;\n }\n\n if (correlationId) {\n identifiers.correlationId = correlationId;\n }\n\n // TODO: should we use patterns.uuid to validate correlationId and session correlation id? they will fail the diagnostic events validation pipeline if improperly formatted\n\n if (this.device) {\n const {device} = this;\n const {installationId} = device?.config || {};\n\n identifiers.userId = device?.userId || preLoginId;\n identifiers.deviceId = device?.url;\n identifiers.orgId = device?.orgId;\n // @ts-ignore\n identifiers.locusUrl = this.webex.internal.services.get('locus');\n\n if (installationId) {\n identifiers.machineId = installationId;\n }\n }\n\n if (meeting?.locusInfo?.fullState) {\n identifiers.locusUrl = meeting.locusUrl;\n identifiers.locusId = meeting.locusUrl && meeting.locusUrl.split('/').pop();\n identifiers.locusSessionId = meeting.locusInfo.fullState.sessionId;\n identifiers.locusStartTime =\n meeting.locusInfo.fullState && meeting.locusInfo.fullState.lastActive;\n }\n\n if (meeting?.meetingInfo?.confIdStr || meeting?.meetingInfo?.confID) {\n identifiers.webexConferenceIdStr = `${\n meeting.meetingInfo?.confIdStr || meeting.meetingInfo?.confID\n }`;\n }\n\n if (meeting?.meetingInfo?.meetingId) {\n identifiers.globalMeetingId = meeting.meetingInfo?.meetingId;\n }\n\n if (meeting?.meetingInfo?.siteName) {\n identifiers.webexSiteName = meeting.meetingInfo?.siteName;\n }\n\n if (mediaConnections) {\n identifiers.mediaAgentAlias = mediaConnections?.[0]?.mediaAgentAlias;\n identifiers.mediaAgentGroupId = mediaConnections?.[0]?.mediaAgentGroupId;\n }\n\n if (!identifiers?.webexConferenceIdStr && webexConferenceIdStr) {\n identifiers.webexConferenceIdStr = `${webexConferenceIdStr}`;\n }\n\n if (!identifiers?.globalMeetingId && globalMeetingId) {\n identifiers.globalMeetingId = globalMeetingId;\n }\n\n if (identifiers.correlationId === undefined) {\n throw new Error('Identifiers initialization failed.');\n }\n\n return identifiers;\n }\n\n /**\n * Create diagnostic event, which can hold client event, feature event or MQE event data.\n * This just initiates the shared properties that are required for all the 3 event categories.\n * @param eventData\n * @param options\n * @returns\n */\n prepareDiagnosticEvent(eventData: Event['event'], options: any) {\n const {meetingId, triggeredTime} = options;\n const origin = this.getOrigin(options, meetingId);\n\n const event: Event = {\n eventId: uuid.v4(),\n version: 1,\n origin,\n originTime: {\n triggered: triggeredTime || new Date().toISOString(),\n // is overridden in prepareRequest batcher\n sent: 'not_defined_yet',\n },\n // @ts-ignore\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: eventData,\n };\n\n // sanitize (remove empty properties, CA requires it)\n // but we don't want to sanitize MQE as most of the times\n // values will be 0, [] etc, and they are required.\n if (eventData.name !== 'client.mediaquality.event') {\n clearEmptyKeysRecursively(event);\n }\n\n return event;\n }\n\n /**\n * Create feature event\n * @param name\n * @param payload\n * @param options\n * @returns\n */\n private prepareClientFeatureEvent({\n name,\n payload,\n options,\n }: {\n name: FeatureEvent['name'];\n payload?: ClientFeatureEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n const {meetingId, correlationId} = options;\n let featureEventObject: FeatureEvent['payload'];\n\n // events that will most likely happen in join phase\n if (meetingId) {\n featureEventObject = this.createFeatureEventObjectInMeeting({name, options});\n } else {\n throw new Error('Not implemented');\n }\n\n // merge any new properties, or override existing ones\n featureEventObject = merge(featureEventObject, payload);\n\n // append client event data to the call diagnostic event\n const featureEvent = this.prepareDiagnosticEvent(featureEventObject, options);\n\n return featureEvent;\n }\n\n /**\n * Submit Feature Event\n * submit to business_ucf\n * @returns\n */\n public submitFeatureEvent({\n name,\n payload,\n options,\n delaySubmitEvent,\n }: {\n name: FeatureEvent['name'];\n payload?: ClientFeatureEventPayload;\n options?: SubmitClientEventOptions;\n delaySubmitEvent?: boolean;\n }) {\n if (delaySubmitEvent) {\n // Preserve the time when the event was triggered if delaying the submission to Call Features\n const delayedOptions = {\n ...options,\n triggeredTime: new Date().toISOString(),\n };\n\n this.delayedClientFeatureEvents.push({\n name,\n payload,\n options: delayedOptions,\n });\n\n return Promise.resolve();\n }\n\n this.logger.log(\n CALL_FEATURE_LOG_IDENTIFIER,\n 'CallFeatureMetrics: @submitFeatureEvent. Submit Client Feature Event CA event.',\n `name: ${name}`\n );\n const featureEvent = this.prepareClientFeatureEvent({name, payload, options});\n\n this.validator({type: 'ce', event: featureEvent});\n\n return this.submitToCallFeatures(featureEvent);\n }\n\n /**\n * Submit Feature Event\n * type is business\n * @param event\n */\n submitToCallFeatures(event: Event): Promise<any> {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['business'],\n };\n\n return this.callDiagnosticEventsBatcher.request(finalEvent);\n }\n\n /**\n * Submit Media Quality Event\n * @param args - submit params\n * @param arg.name - event key\n * @param arg.payload - additional payload to be merge with the default payload\n * @param arg.options - options\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: SubmitMQEPayload;\n options: SubmitMQEOptions;\n }) {\n const {meetingId, mediaConnections, webexConferenceIdStr, globalMeetingId} = options;\n\n // events that will most likely happen in join phase\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send MQE but no meeting was found...',\n `event: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return;\n }\n\n // merge identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n });\n\n // create media quality event object\n let clientEventObject: MediaQualityEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n intervals: payload.intervals,\n callingServiceType: 'LOCUS',\n meetingJoinInfo: {\n clientSignallingProtocol: 'WebRTC',\n },\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n // @ts-ignore\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || 'unknown',\n startTime: new Date().toISOString(),\n },\n webexSubServiceType: this.getSubServiceType(meeting),\n };\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append media quality event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n this.validator({type: 'mqe', event: diagnosticEvent});\n this.submitToCallDiagnostics(diagnosticEvent);\n } else {\n throw new Error(\n 'Media quality events cant be sent outside the context of a meeting. Meeting id is required.'\n );\n }\n }\n\n /**\n * Return Client Event payload by client error code\n * @param arg - get error arg\n * @param arg.clientErrorCode\n * @param arg.serviceErrorCode\n * @param arg.payloadOverrides\n * @param arg.httpStatusCode\n * @returns\n */\n public getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n serviceErrorName,\n rawErrorMessage,\n payloadOverrides,\n httpStatusCode,\n }: {\n clientErrorCode: number;\n serviceErrorCode: any;\n serviceErrorName?: any;\n rawErrorMessage?: string;\n payloadOverrides?: any;\n httpStatusCode?: number;\n }): ClientEventError {\n let error: ClientEventError;\n\n if (clientErrorCode) {\n const partialParsedError = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n if (partialParsedError) {\n error = merge(\n {fatal: true, shownToUser: false, name: 'other', category: 'other'}, // default values\n {errorCode: clientErrorCode},\n serviceErrorName ? {errorData: {errorName: serviceErrorName}} : {},\n {serviceErrorCode},\n {rawErrorMessage},\n httpStatusCode === undefined ? {} : {httpStatusCode},\n partialParsedError,\n payloadOverrides || {}\n );\n\n return error;\n }\n }\n\n return undefined;\n }\n\n /**\n * Clear the error cache\n */\n clearErrorCache() {\n this.eventErrorCache = new WeakMap();\n }\n\n /**\n * Checks if an event should be limited based on criteria defined in the event dictionary.\n * Returns true if the event should be sent, false if it has reached its limit.\n * @param event - The diagnostic event object\n * @returns boolean indicating whether the event should be sent\n */\n private shouldSendEvent({event}: Event): boolean {\n const eventName = event?.name as string;\n const correlationId = event?.identifiers?.correlationId;\n\n if (!correlationId || correlationId === 'unknown') {\n return true;\n }\n\n const limitKeyPrefix = `${eventName}:${correlationId}`;\n\n switch (eventName) {\n case 'client.media.render.start':\n case 'client.media.render.stop':\n case 'client.media.rx.start':\n case 'client.media.rx.stop':\n case 'client.media.tx.start':\n case 'client.media.tx.stop': {\n // Send only once per mediaType-correlationId pair (or mediaType-correlationId-shareInstanceId for share/share_audio)\n const mediaType = event?.mediaType;\n if (mediaType) {\n if (mediaType === 'share' || mediaType === 'share_audio') {\n const shareInstanceId = event?.shareInstanceId;\n if (shareInstanceId) {\n const limitKey = `${limitKeyPrefix}:${mediaType}:${shareInstanceId}`;\n\n return this.checkAndIncrementEventCount(\n limitKey,\n 1,\n `${eventName} for ${mediaType} instance ${shareInstanceId}`\n );\n }\n } else {\n const limitKey = `${limitKeyPrefix}:${mediaType}`;\n\n return this.checkAndIncrementEventCount(\n limitKey,\n 1,\n `${eventName} for mediaType ${mediaType}`\n );\n }\n }\n break;\n }\n\n case 'client.roap-message.received':\n case 'client.roap-message.sent': {\n // Send only once per correlationId and roap.messageType/roap.type\n const roapMessageType = event?.roap?.messageType || event?.roap?.type;\n if (roapMessageType) {\n const limitKey = `${limitKeyPrefix}:${roapMessageType}`;\n\n return this.checkAndIncrementEventCount(\n limitKey,\n 1,\n `${eventName} for ROAP type ${roapMessageType}`\n );\n }\n break;\n }\n\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n * Checks the current count for a limit key and increments if under limit.\n * @param limitKey - The unique key for this limit combination\n * @param maxCount - Maximum allowed count\n * @param eventDescription - Description for logging\n * @returns true if under limit and incremented, false if at/over limit\n */\n private checkAndIncrementEventCount(\n limitKey: string,\n maxCount: number,\n eventDescription: string\n ): boolean {\n const currentCount = this.eventLimitTracker.get(limitKey) || 0;\n\n if (currentCount >= maxCount) {\n // Log warning only once per limit key\n if (!this.eventLimitWarningsLogged.has(limitKey)) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticMetrics: Event limit reached for ${eventDescription}. ` +\n `Max count ${maxCount} exceeded. Event will not be sent.`,\n `limitKey: ${limitKey}`\n );\n this.eventLimitWarningsLogged.add(limitKey);\n }\n\n return false;\n }\n\n // Increment count and allow event\n this.eventLimitTracker.set(limitKey, currentCount + 1);\n\n return true;\n }\n\n /**\n * Clears event limit tracking\n */\n public clearEventLimits(): void {\n this.eventLimitTracker.clear();\n this.eventLimitWarningsLogged.clear();\n }\n\n /**\n * Clears event limit tracking for a specific correlationId only.\n * Keeps limits for other meetings intact.\n */\n public clearEventLimitsForCorrelationId(correlationId: string): void {\n if (!correlationId) {\n return;\n }\n // Keys are formatted as \"eventName:correlationId:...\" across all limiters.\n const hasCorrIdAtSecondToken = (key: string) => key.split(':')[1] === correlationId;\n for (const key of Array.from(this.eventLimitTracker.keys())) {\n if (hasCorrIdAtSecondToken(key)) {\n this.eventLimitTracker.delete(key);\n }\n }\n for (const key of Array.from(this.eventLimitWarningsLogged.values())) {\n if (hasCorrIdAtSecondToken(key)) {\n this.eventLimitWarningsLogged.delete(key);\n }\n }\n }\n\n /**\n * Generate error payload for Client Event\n * @param rawError\n */\n generateClientEventErrorPayload(rawError: any) {\n const cachedError = this.eventErrorCache.get(rawError);\n\n if (cachedError) {\n return [cachedError, true];\n }\n\n const rawErrorMessage = rawError.message;\n const httpStatusCode = rawError.statusCode;\n let payload;\n\n if (rawError.name) {\n if (isBrowserMediaErrorName(rawError.name)) {\n payload = this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode: BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP[rawError.name],\n serviceErrorName: rawError.name,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isSdpOfferCreationError(rawError) && !payload) {\n // error code is 30005, but that's not specific enough. we also need to check error.cause.type\n const causeType = rawError.cause?.type;\n\n payload = this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode:\n SDP_OFFER_CREATION_ERROR_MAP[causeType] || SDP_OFFER_CREATION_ERROR_MAP.GENERAL,\n serviceErrorName: rawError.name,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n const serviceErrorCode =\n rawError?.error?.body?.errorCode ||\n rawError?.body?.errorCode ||\n rawError?.body?.code ||\n rawError?.body?.reason?.reasonCode;\n\n if (serviceErrorCode) {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n if (clientErrorCode && !payload) {\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // by default, if it is locus error, return new locus err\n if (isLocusServiceErrorCode(serviceErrorCode) && !payload) {\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NEW_LOCUS_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isMeetingInfoServiceError(rawError) && !payload) {\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode: MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isNetworkError(rawError) && !payload) {\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NETWORK_ERROR,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isUnauthorizedError(rawError) && !payload) {\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode: AUTHENTICATION_FAILED_CODE,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (!payload) {\n // otherwise return unkown error but passing serviceErrorCode and serviceErrorName so that we know the issue\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode: UNKNOWN_ERROR,\n serviceErrorCode: serviceErrorCode || UNKNOWN_ERROR,\n serviceErrorName: rawError?.name,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // cache the payload for future use\n this.eventErrorCache.set(rawError, payload);\n\n return [payload, false];\n }\n\n /**\n * Create common object for in meeting events\n * @param name\n * @param options\n * @param eventType - 'client' | 'feature'\n * @returns object\n */\n private createCommonEventObjectInMeeting({\n name,\n options,\n eventType = 'client',\n }: {\n name: string;\n options?: SubmitClientEventOptions;\n eventType?: 'client' | 'feature';\n }) {\n const {\n meetingId,\n mediaConnections,\n globalMeetingId,\n webexConferenceIdStr,\n sessionCorrelationId,\n } = options;\n\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send common event but no meeting was found...',\n `name: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(\n eventType === 'feature'\n ? CALL_FEATURE_EVENT_FAILED_TO_SEND\n : CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND,\n {\n fields: {\n meetingId,\n name,\n },\n }\n );\n\n return undefined;\n }\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting?.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n sessionCorrelationId,\n });\n\n // create common event object structure\n const commonEventObject = {\n name,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n userType: meeting.getCurUserType(),\n loginType:\n 'loginType' in meeting.callStateForMetrics\n ? meeting.callStateForMetrics.loginType\n : this.getCurLoginType(),\n telemetryOptOut: this.getTelemetryOptOut(),\n isConvergedArchitectureEnabled: this.getIsConvergedArchitectureEnabled({\n meetingId,\n }),\n ...(meeting.userNameInput && {userNameInput: meeting.userNameInput}),\n ...(meeting.emailInput && {emailInput: meeting.emailInput}),\n webexSubServiceType: this.getSubServiceType(meeting),\n // @ts-ignore\n webClientPreload: this.webex.meetings?.config?.metrics?.webClientPreload,\n isVipMeeting: meeting?.meetingInfo?.vipmeeting || false,\n isAutomatedUser:\n typeof window !== 'undefined' && typeof navigator !== 'undefined' && !!navigator?.webdriver, // if webdriver is true, it's most likely in a test environment\n };\n\n const joinFlowVersion = options.joinFlowVersion ?? meeting.callStateForMetrics?.joinFlowVersion;\n if (joinFlowVersion) {\n // @ts-ignore\n commonEventObject.joinFlowVersion = joinFlowVersion;\n }\n const meetingJoinedTime = meeting.isoLocalClientMeetingJoinTime;\n if (meetingJoinedTime) {\n // @ts-ignore\n commonEventObject.meetingJoinedTime = meetingJoinedTime;\n }\n\n if (options.meetingJoinPhase) {\n // @ts-ignore\n commonEventObject.meetingJoinPhase = options.meetingJoinPhase;\n }\n\n return commonEventObject;\n }\n\n /**\n * Create client event object for in meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - options\n * @returns object\n */\n private createClientEventObjectInMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const commonObject = this.createCommonEventObjectInMeeting({\n name,\n options,\n eventType: 'client',\n });\n if (!commonObject) return undefined;\n\n return {\n ...commonObject,\n errors,\n eventData: {\n ...commonObject.eventData,\n isMercuryConnected: this.isMercuryConnected,\n },\n } as ClientEvent['payload'];\n }\n\n /**\n * Create feature event object for in meeting function event\n * @param name\n * @param options\n * @returns object\n */\n private createFeatureEventObjectInMeeting({\n name,\n options,\n }: {\n name: FeatureEvent['name'];\n options?: SubmitClientEventOptions;\n }) {\n const commonObject = this.createCommonEventObjectInMeeting({\n name,\n options,\n eventType: 'feature',\n });\n if (!commonObject) return undefined;\n\n return {\n ...commonObject,\n key: 'UcfFeatureUsage',\n } as FeatureEvent['payload'];\n }\n\n /**\n * Create client event object for pre meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - payload\n * @returns object\n */\n private createClientEventObjectPreMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {correlationId, globalMeetingId, webexConferenceIdStr, preLoginId, sessionCorrelationId} =\n options;\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n correlationId,\n sessionCorrelationId,\n preLoginId,\n globalMeetingId,\n webexConferenceIdStr,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n errors,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n isMercuryConnected: this.isMercuryConnected,\n },\n loginType: this.getCurLoginType(),\n telemetryOptOut: this.getTelemetryOptOut(),\n // @ts-ignore\n webClientPreload: this.webex.meetings?.config?.metrics?.webClientPreload,\n isAutomatedUser:\n typeof window !== 'undefined' && typeof navigator !== 'undefined' && !!navigator?.webdriver, // if webdriver is true, it's most likely in a test environment\n };\n\n if (options.joinFlowVersion) {\n clientEventObject.joinFlowVersion = options.joinFlowVersion;\n }\n\n if (options.meetingJoinPhase) {\n clientEventObject.meetingJoinPhase = options.meetingJoinPhase;\n }\n\n if (options.userNameInput) {\n clientEventObject.userNameInput = options.userNameInput;\n }\n\n if (options.emailInput) {\n clientEventObject.emailInput = options.emailInput;\n }\n\n return clientEventObject;\n }\n\n /**\n * Prepare Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @returns {any} options to be with fetch\n * @throws\n */\n private prepareClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n const {meetingId, correlationId, rawError} = options;\n let clientEventObject: ClientEvent['payload'];\n\n // check if we need to generate errors\n const errors: ClientEventPayloadError = [];\n\n if (rawError) {\n const [generatedError, cached] = this.generateClientEventErrorPayload(rawError);\n if (generatedError) {\n errors.push(generatedError);\n }\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @prepareClientEvent. Generated errors:',\n `generatedError (cached: ${cached}): ${JSON.stringify(generatedError)}`\n );\n }\n\n // events that will most likely happen in join phase\n if (meetingId) {\n clientEventObject = this.createClientEventObjectInMeeting({name, options, errors});\n } else if (correlationId) {\n // any pre join events or events that are outside the meeting.\n clientEventObject = this.createClientEventObjectPreMeeting({name, options, errors});\n } else {\n throw new Error('Not implemented');\n }\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append client event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n\n return diagnosticEvent;\n }\n\n /**\n * Submit Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @param arg.delaySubmitEvent - a boolean value indicating whether to delay the submission of client events.\n * @throws\n */\n public submitClientEvent({\n name,\n payload,\n options,\n delaySubmitEvent,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n delaySubmitEvent?: boolean;\n }) {\n if (delaySubmitEvent) {\n // Preserve the time when the event was triggered if delaying the submission to Call Diagnostics\n const delayedOptions = {\n ...options,\n triggeredTime: new Date().toISOString(),\n };\n\n this.delayedClientEvents.push({\n name,\n payload,\n options: delayedOptions,\n });\n\n return Promise.resolve();\n }\n\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitClientEvent. Submit Client Event CA event.',\n `name: ${name}`\n );\n const diagnosticEvent = this.prepareClientEvent({name, payload, options});\n\n if (!this.shouldSendEvent(diagnosticEvent)) {\n return Promise.resolve();\n }\n\n if (options?.preLoginId) {\n return this.submitToCallDiagnosticsPreLogin(diagnosticEvent, options?.preLoginId);\n }\n\n this.validator({type: 'ce', event: diagnosticEvent});\n\n return this.submitToCallDiagnostics(diagnosticEvent);\n }\n\n /**\n * Submit Delayed Client Event CA events. Clears delayedClientEvents array after submission.\n */\n public submitDelayedClientEvents(overrides?: Partial<DelayedClientEvent['options']>) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitDelayedClientEvents. Submitting delayed client events.'\n );\n\n if (this.delayedClientEvents.length === 0) {\n return Promise.resolve();\n }\n\n const promises = this.delayedClientEvents.map((delayedSubmitClientEventParams) => {\n const {name, payload, options} = delayedSubmitClientEventParams;\n const optionsWithOverrides: DelayedClientEvent['options'] = {...options, ...overrides};\n\n return this.submitClientEvent({name, payload, options: optionsWithOverrides});\n });\n\n this.delayedClientEvents = [];\n\n return Promise.all(promises);\n }\n\n /**\n * Submit Delayed feature Event CA events. Clears submitDelayedClientFeatureEvents array after submission.\n */\n public submitDelayedClientFeatureEvents(overrides?: Partial<DelayedClientEvent['options']>) {\n this.logger.log(\n CALL_FEATURE_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitDelayedClientFeatureEvents. Submitting delayed feature events.'\n );\n\n if (this.delayedClientFeatureEvents.length === 0) {\n return Promise.resolve();\n }\n\n const promises = this.delayedClientFeatureEvents.map((delayedSubmitClientEventParams) => {\n const {name, payload, options} = delayedSubmitClientEventParams;\n const optionsWithOverrides: DelayedClientEvent['options'] = {...options, ...overrides};\n\n return this.submitFeatureEvent({name, payload, options: optionsWithOverrides});\n });\n\n this.delayedClientFeatureEvents = [];\n\n return Promise.all(promises);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service.\n * @param event\n * @returns promise\n */\n submitToCallDiagnostics(event: Event): Promise<any> {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n markTelemetryOptOutOnResponse: true,\n };\n\n return this.callDiagnosticEventsBatcher.request(finalEvent);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service, pre login.\n * @param event\n * @param preLoginId\n * @param markTelemetryOptOutOnResponse\n * @returns\n */\n submitToCallDiagnosticsPreLogin = (event: Event, preLoginId?: string): Promise<any> => {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n markTelemetryOptOutOnResponse: true,\n };\n\n this.preLoginMetricsBatcher.savePreLoginId(preLoginId);\n\n return this.preLoginMetricsBatcher.request(finalEvent);\n };\n\n /**\n * Builds a request options object to later be passed to fetch().\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - client event options\n * @returns {Promise<any>}\n * @throws\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @buildClientEventFetchRequestOptions. Building request options object for fetch()...',\n `name: ${name}`\n );\n\n const clientEvent = this.prepareClientEvent({name, payload, options});\n\n // build metrics-a event type\n // @ts-ignore\n const diagnosticEvent = prepareDiagnosticMetricItem(this.webex, {\n eventPayload: clientEvent,\n type: ['diagnostic-event'],\n });\n\n const request = {\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: [diagnosticEvent],\n },\n headers: {},\n // @ts-ignore\n waitForServiceTimeout: this.webex.internal.metrics.config.waitForServiceTimeout,\n };\n\n if (options.preLoginId) {\n request.headers = {\n authorization: false,\n 'x-prelogin-userid': options.preLoginId,\n };\n request.resource = 'clientmetrics-prelogin';\n }\n\n // @ts-ignore\n return this.webex.prepareFetchOptions(request);\n }\n\n /**\n * Returns true if the specified serviceErrorCode maps to an expected error.\n * @param {number} serviceErrorCode the service error code\n * @returns {boolean}\n */\n public isServiceErrorExpected(serviceErrorCode: number): boolean {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n const clientErrorPayload = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n return clientErrorPayload?.category === 'expected';\n }\n\n /**\n * This method is used to set the device information by internal-plugin-device\n * @param {device} object The webex.internal.device object\n * @returns {undefined}\n */\n public setDeviceInfo(device: any): void {\n // This was created to fix the circular dependency between internal-plugin-device and internal-plugin-metrics\n this.logger.log('CallDiagnosticMetrics: @setDeviceInfo called', {\n userId: device?.userId,\n deviceId: device?.url,\n orgId: device?.orgId,\n });\n this.device = device;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_common","require","_uuid","_interopRequireDefault","_lodash","_webexCore","_metrics","_callDiagnosticMetrics","_config","_callDiagnosticMetricsBatcher","_preloginMetricsBatcher","_config2","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","_BrowserDetection","BrowserDetection","getOSVersion","getBrowserName","getBrowserVersion","CallDiagnosticMetrics","exports","_StatelessWebexPlugin","_this","_classCallCheck2","_len","args","Array","_key","concat","_weakMap","_map","_set","options","_promise","resolve","event","valid","preLoginId","finalEvent","eventPayload","type","markTelemetryOptOutOnResponse","preLoginMetricsBatcher","savePreLoginId","request","logger","webex","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","parent","PreLoginMetricsBatcher","_inherits2","_createClass2","key","value","getCurLoginType","canAuthorize","credentials","isUnverifiedGuest","getUserActivation","userActivation","navigator","undefined","hasBeenActive","isActive","getTelemetryOptOut","isTelemetryOptOutManual","isTelemetryOptOutAutomatic","setIsTelemetryOptOutManual","setIsTelemetryOptOutAutomatic","getIsConvergedArchitectureEnabled","_ref","meetingId","_meeting$meetingInfo","meeting","meetings","getBasicMeetingInformation","meetingInfo","enableConvergedArchitecture","setMercuryConnectedStatus","status","isMercuryConnected","getSubServiceType","webexScheduled","enableEvent","pmr","WEBEX_SUB_SERVICE_TYPES","PMR","SCHEDULED_MEETING","enableConvergedWebinarLargeScale","LARGE_SCALE_WEBINAR","isConvergedWebinarWebcast","WEBCAST","WEBINAR","getOrigin","_this$webex$meetings$","_this$webex$meetings$2","_this$webex$meetings$3","_this$webex$meetings$4","_this$webex$meetings$5","_this$webex$meetings$6","defaultClientType","config","metrics","clientType","defaultSubClientType","subClientType","providedClientVersion","clientVersion","defaultSDKClientVersion","CLIENT_NAME","version","versionMetadata","extractVersionMetadata","hasLoggedBrowserSerial","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","_stringify","getBrowserSerial","_this$webex$meetings","_this$webex$meetings$7","_this$webex$meetings$8","_this$webex$meetings$9","_this$webex$meetings$0","_this$webex$meetings$1","origin","name","networkType","userAgent","userAgentToString","clientName","webexVersion","clientInfo","publicNetworkPrefix","anonymizeIPAddress","geoHintInfo","clientAddress","localNetworkPrefix","meetingCollection","get","statsAnalyzer","getLocalIpAddress","osVersion","os","getOSNameInternal","browser","browserVersion","environment","newEnvironment","clientLaunchMethod","browserLaunchMethod","vendorId","Error","getIdentifiers","_meeting$locusInfo","_meeting$meetingInfo2","_meeting$meetingInfo3","_meeting$meetingInfo6","_meeting$meetingInfo8","mediaConnections","correlationId","webexConferenceIdStr","globalMeetingId","sessionCorrelationId","identifiers","device","_ref2","installationId","userId","deviceId","url","orgId","locusUrl","internal","services","machineId","locusInfo","fullState","locusId","split","pop","locusSessionId","sessionId","locusStartTime","lastActive","confIdStr","confID","_meeting$meetingInfo4","_meeting$meetingInfo5","_meeting$meetingInfo7","siteName","_meeting$meetingInfo9","webexSiteName","_mediaConnections$","_mediaConnections$2","mediaAgentAlias","mediaAgentGroupId","prepareDiagnosticEvent","eventData","_this$webex$meetings$10","triggeredTime","eventId","uuid","v4","originTime","triggered","Date","toISOString","sent","senderCountryCode","countryCode","clearEmptyKeysRecursively","prepareClientFeatureEvent","_ref3","payload","featureEventObject","createFeatureEventObjectInMeeting","merge","featureEvent","submitFeatureEvent","_ref4","delaySubmitEvent","delayedOptions","delayedClientFeatureEvents","CALL_FEATURE_LOG_IDENTIFIER","validator","submitToCallFeatures","submitMQE","_ref5","console","warn","submitClientMetrics","CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND","fields","clientEventObject","canProceed","webClientDomain","window","location","hostname","intervals","callingServiceType","meetingJoinInfo","clientSignallingProtocol","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","webexSubServiceType","diagnosticEvent","submitToCallDiagnostics","getErrorPayloadForClientErrorCode","_ref6","clientErrorCode","serviceErrorCode","serviceErrorName","rawErrorMessage","payloadOverrides","httpStatusCode","error","partialParsedError","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","fatal","shownToUser","category","errorCode","errorData","errorName","clearErrorCache","eventErrorCache","shouldSendEvent","_ref7","_event$identifiers","eventName","limitKeyPrefix","mediaType","shareInstanceId","limitKey","checkAndIncrementEventCount","_event$roap","_event$roap2","roapMessageType","roap","messageType","maxCount","eventDescription","currentCount","eventLimitTracker","eventLimitWarningsLogged","has","add","set","clearEventLimits","clear","clearEventLimitsForCorrelationId","hasCorrIdAtSecondToken","_i","_Array$from","_from","keys","delete","_i2","_Array$from3","values","generateClientEventErrorPayload","rawError","_rawError$error","_rawError$error$body","_rawError$body","_rawError$body2","_rawError$body3","_rawError$body3$reaso","cachedError","message","statusCode","isBrowserMediaErrorName","BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP","isSdpOfferCreationError","_rawError$cause","causeType","cause","SDP_OFFER_CREATION_ERROR_MAP","GENERAL","body","code","reason","reasonCode","SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP","isLocusServiceErrorCode","NEW_LOCUS_ERROR_CLIENT_CODE","isMeetingInfoServiceError","MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE","isNetworkError","NETWORK_ERROR","isUnauthorizedError","AUTHENTICATION_FAILED_CODE","UNKNOWN_ERROR","createCommonEventObjectInMeeting","_ref8","_this$webex$meetings2","_this$webex$meetings3","_this$webex$meetings4","_meeting$meetingInfo0","_navigator","_options$joinFlowVers","_meeting$callStateFor","_ref8$eventType","eventType","CALL_FEATURE_EVENT_FAILED_TO_SEND","commonEventObject","userType","getCurUserType","loginType","callStateForMetrics","telemetryOptOut","isConvergedArchitectureEnabled","userNameInput","emailInput","webClientPreload","isVipMeeting","vipmeeting","isAutomatedUser","webdriver","joinFlowVersion","meetingJoinedTime","isoLocalClientMeetingJoinTime","meetingJoinPhase","createClientEventObjectInMeeting","_ref9","errors","commonObject","_ref0","createClientEventObjectPreMeeting","_ref1","_this$webex$meetings5","_this$webex$meetings6","_this$webex$meetings7","_navigator2","prepareClientEvent","_ref10","_this$generateClientE","_this$generateClientE2","_slicedToArray2","generatedError","cached","submitClientEvent","_ref11","delayedClientEvents","submitToCallDiagnosticsPreLogin","submitDelayedClientEvents","overrides","_this2","promises","map","delayedSubmitClientEventParams","optionsWithOverrides","all","submitDelayedClientFeatureEvents","_this3","_buildClientEventFetchRequestOptions","_asyncToGenerator2","_regenerator","mark","_callee","_ref12","clientEvent","wrap","_context","prev","next","prepareDiagnosticMetricItem","method","service","resource","headers","waitForServiceTimeout","authorization","abrupt","prepareFetchOptions","stop","buildClientEventFetchRequestOptions","_x","isServiceErrorExpected","clientErrorPayload","setDeviceInfo","StatelessWebexPlugin"],"sources":["call-diagnostic-metrics.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {BrowserDetection, getBrowserSerial} from '@webex/common';\nimport uuid from 'uuid';\nimport {merge} from 'lodash';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\nimport {getOSNameInternal} from '../metrics';\n\nimport {\n anonymizeIPAddress,\n clearEmptyKeysRecursively,\n isLocusServiceErrorCode,\n prepareDiagnosticMetricItem,\n userAgentToString,\n extractVersionMetadata,\n isMeetingInfoServiceError,\n isBrowserMediaErrorName,\n isNetworkError,\n isUnauthorizedError,\n isSdpOfferCreationError,\n} from './call-diagnostic-metrics.util';\nimport {CLIENT_NAME} from '../config';\nimport {\n Event,\n ClientType,\n SubClientType,\n NetworkType,\n EnvironmentType,\n NewEnvironmentType,\n ClientEvent,\n SubmitClientEventOptions,\n MediaQualityEvent,\n SubmitMQEOptions,\n SubmitMQEPayload,\n ClientLaunchMethodType,\n ClientEventError,\n ClientEventPayload,\n ClientInfo,\n ClientEventPayloadError,\n ClientSubServiceType,\n BrowserLaunchMethodType,\n DelayedClientEvent,\n DelayedClientFeatureEvent,\n FeatureEvent,\n ClientFeatureEventPayload,\n} from '../metrics.types';\nimport CallDiagnosticEventsBatcher from './call-diagnostic-metrics-batcher';\nimport PreLoginMetricsBatcher from '../prelogin-metrics-batcher';\n\nimport {\n CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD,\n CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND,\n NEW_LOCUS_ERROR_CLIENT_CODE,\n SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP,\n UNKNOWN_ERROR,\n BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP,\n MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n NETWORK_ERROR,\n AUTHENTICATION_FAILED_CODE,\n WEBEX_SUB_SERVICE_TYPES,\n SDP_OFFER_CREATION_ERROR_MAP,\n CALL_FEATURE_LOG_IDENTIFIER,\n CALL_FEATURE_EVENT_FAILED_TO_SEND,\n} from './config';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\ntype GetOriginOptions = {\n clientType: ClientType;\n subClientType: SubClientType;\n networkType?: NetworkType;\n clientLaunchMethod?: ClientLaunchMethodType;\n browserLaunchMethod?: BrowserLaunchMethodType;\n environment?: EnvironmentType;\n newEnvironment?: NewEnvironmentType;\n vendorId?: string;\n};\n\ntype GetIdentifiersOptions = {\n meeting?: any;\n mediaConnections?: any[];\n correlationId?: string;\n sessionCorrelationId?: string;\n preLoginId?: string;\n globalMeetingId?: string;\n webexConferenceIdStr?: string;\n};\n\n/**\n * @description Util class to handle Call Analyzer Metrics\n * @export\n * @class CallDiagnosticMetrics\n */\nexport default class CallDiagnosticMetrics extends StatelessWebexPlugin {\n // @ts-ignore\n private callDiagnosticEventsBatcher: CallDiagnosticEventsBatcher;\n // @ts-ignore\n private preLoginMetricsBatcher: PreLoginMetricsBatcher;\n\n private logger: any; // to avoid adding @ts-ignore everywhere\n private hasLoggedBrowserSerial: boolean;\n private device: any;\n private delayedClientEvents: DelayedClientEvent[] = [];\n private delayedClientFeatureEvents: DelayedClientFeatureEvent[] = [];\n private eventErrorCache: WeakMap<any, any> = new WeakMap();\n private isMercuryConnected = false;\n private eventLimitTracker: Map<string, number> = new Map();\n private eventLimitWarningsLogged: Set<string> = new Set();\n private isTelemetryOptOutManual = false;\n private isTelemetryOptOutAutomatic = false;\n\n // the default validator before piping an event to the batcher\n // this function can be overridden by the user\n public validator: (options: {\n type: 'mqe' | 'ce';\n event: Event;\n }) => Promise<{event: Event; valid: boolean}> = (options: {type: 'mqe' | 'ce'; event: Event}) =>\n Promise.resolve({event: options?.event, valid: true});\n\n /**\n * Constructor\n * @param args\n */\n constructor(...args) {\n super(...args);\n // @ts-ignore\n this.logger = this.webex.logger;\n // @ts-ignore\n this.callDiagnosticEventsBatcher = new CallDiagnosticEventsBatcher({}, {parent: this.webex});\n // @ts-ignore\n this.preLoginMetricsBatcher = new PreLoginMetricsBatcher({}, {parent: this.webex});\n }\n\n /**\n * Returns the login type of the current user\n * @returns one of 'login-ci','unverified-guest', null\n */\n getCurLoginType() {\n // @ts-ignore\n if (this.webex.canAuthorize) {\n // @ts-ignore\n return this.webex.credentials.isUnverifiedGuest ? 'unverified-guest' : 'login-ci';\n }\n\n return null;\n }\n\n /**\n * Returns the user activation state reported from the browser's navigator.userActivation API\n * @returns object with hasBeenActive and isActive booleans, or undefined if unavailable\n */\n getUserActivation(): {hasBeenActive: boolean; isActive: boolean} | undefined {\n const userActivation =\n typeof navigator !== 'undefined'\n ? (navigator as {userActivation?: {hasBeenActive: boolean; isActive: boolean}})\n .userActivation\n : undefined;\n\n if (userActivation) {\n return {\n hasBeenActive: userActivation.hasBeenActive,\n isActive: userActivation.isActive,\n };\n }\n\n return undefined;\n }\n\n /**\n * Returns the telemetryOptOut value of the current user\n * @returns one of 'manual', 'automatic', undefined\n */\n public getTelemetryOptOut() {\n if (this.isTelemetryOptOutManual) {\n return 'manual';\n }\n if (this.isTelemetryOptOutAutomatic) {\n return 'automatic';\n }\n\n return undefined;\n }\n\n /**\n * Sets the manual telemetry opt-out status for the current user\n * @param value - boolean value indicating manual telemetry opt-out status\n */\n public setIsTelemetryOptOutManual(value: boolean) {\n this.isTelemetryOptOutManual = value;\n }\n\n /**\n * Sets the automatic telemetry opt-out status for the current user\n * @param value - boolean value indicating automatic telemetry opt-out status\n */\n public setIsTelemetryOptOutAutomatic(value: boolean) {\n this.isTelemetryOptOutAutomatic = value;\n }\n\n /**\n * Returns if the meeting has converged architecture enabled\n * @param options.meetingId\n */\n getIsConvergedArchitectureEnabled({meetingId}: {meetingId?: string}): boolean {\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n return meeting?.meetingInfo?.enableConvergedArchitecture;\n }\n\n return undefined;\n }\n\n /**\n * Sets mercury connected status for event data object in CA events\n * @public\n * @param status - boolean value indicating mercury connection status\n * @return {void}\n */\n public setMercuryConnectedStatus(status: boolean): void {\n this.isMercuryConnected = status;\n }\n\n /**\n * Returns meeting's subServiceType\n * @param meeting\n * @returns\n */\n getSubServiceType(meeting?: any): ClientSubServiceType {\n if (meeting) {\n // @ts-ignore\n const meetingInfo = meeting?.meetingInfo;\n // if not Scheduled, not Webinar, pmr - then pmr\n if (!meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.PMR;\n }\n // if Scheduled, not Webinar, not pmr - then ScheduledMeeting\n if (meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.SCHEDULED_MEETING;\n }\n\n // if ConvergedArchitecture enable and isConvergedWebinarWebcast -- then webcast\n if (meetingInfo?.enableConvergedArchitecture && meetingInfo?.enableEvent) {\n // if enableConvergedWebinarLargeScale - then large scale webinar\n if (meetingInfo?.enableConvergedWebinarLargeScale) {\n return WEBEX_SUB_SERVICE_TYPES.LARGE_SCALE_WEBINAR;\n }\n\n return meetingInfo?.isConvergedWebinarWebcast\n ? WEBEX_SUB_SERVICE_TYPES.WEBCAST\n : WEBEX_SUB_SERVICE_TYPES.WEBINAR;\n }\n\n // if Scheduled, enable event, not pmr - then Webinar\n if (meetingInfo?.webexScheduled && meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.WEBINAR;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get origin object for Call Diagnostic Event payload.\n * @param options\n * @param meetingId\n * @returns\n */\n getOrigin(options: GetOriginOptions, meetingId?: string) {\n const defaultClientType: ClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.clientType;\n const defaultSubClientType: SubClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.subClientType;\n // @ts-ignore\n const providedClientVersion: string = this.webex.meetings.config?.metrics?.clientVersion;\n // @ts-ignore\n const defaultSDKClientVersion = `${CLIENT_NAME}/${this.webex.version}`;\n\n let versionMetadata: Pick<ClientInfo, 'majorVersion' | 'minorVersion'> = {};\n\n // sdk version split doesn't really make sense for now...\n if (providedClientVersion) {\n versionMetadata = extractVersionMetadata(providedClientVersion);\n }\n\n if (!this.hasLoggedBrowserSerial) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticMetrics: @createClientEventObjectInMeeting => collected browser data`,\n JSON.stringify(getBrowserSerial())\n );\n\n this.hasLoggedBrowserSerial = true;\n }\n\n if (\n (defaultClientType && defaultSubClientType) ||\n (options.clientType && options.subClientType)\n ) {\n const origin: Event['origin'] = {\n name: 'endpoint',\n networkType: options?.networkType || 'unknown',\n userAgent: userAgentToString({\n // @ts-ignore\n clientName: this.webex.meetings?.config?.metrics?.clientName,\n // @ts-ignore\n webexVersion: this.webex.version,\n }),\n clientInfo: {\n clientType: options?.clientType || defaultClientType,\n clientVersion: providedClientVersion || defaultSDKClientVersion,\n ...versionMetadata,\n publicNetworkPrefix:\n // @ts-ignore\n anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress) || undefined,\n localNetworkPrefix:\n anonymizeIPAddress(\n // @ts-ignore\n this.webex.meetings.meetingCollection\n .get(meetingId)\n ?.statsAnalyzer?.getLocalIpAddress()\n ) || undefined,\n osVersion: getOSVersion() || 'unknown',\n subClientType: options?.subClientType || defaultSubClientType,\n os: getOSNameInternal(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion(),\n },\n };\n\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n if (meeting?.environment) {\n origin.environment = meeting.environment;\n }\n }\n\n if (options?.environment) {\n origin.environment = options.environment;\n }\n\n if (options?.newEnvironment) {\n origin.newEnvironment = options.newEnvironment;\n }\n\n if (options?.clientLaunchMethod) {\n origin.clientInfo.clientLaunchMethod = options.clientLaunchMethod;\n }\n\n if (options?.browserLaunchMethod) {\n origin.clientInfo.browserLaunchMethod = options.browserLaunchMethod;\n }\n\n if (options?.vendorId) {\n origin.clientInfo.vendorId = options.vendorId;\n }\n\n return origin;\n }\n\n throw new Error(\"ClientType and SubClientType can't be undefined\");\n }\n\n /**\n * Gather identifier details for call diagnostic payload.\n * @throws Error if initialization fails.\n * @param options\n */\n getIdentifiers(options: GetIdentifiersOptions) {\n const {\n meeting,\n mediaConnections,\n correlationId,\n webexConferenceIdStr,\n globalMeetingId,\n preLoginId,\n sessionCorrelationId,\n } = options;\n const identifiers: Event['event']['identifiers'] = {\n correlationId: 'unknown', // concerned with setting this to unknown. This will fail diagnostic events parsing because it's not a uuid pattern\n };\n\n if (meeting) {\n identifiers.correlationId = meeting.correlationId;\n if (meeting.sessionCorrelationId) {\n identifiers.sessionCorrelationId = meeting.sessionCorrelationId;\n }\n }\n\n if (sessionCorrelationId) {\n identifiers.sessionCorrelationId = sessionCorrelationId;\n }\n\n if (sessionCorrelationId) {\n identifiers.sessionCorrelationId = sessionCorrelationId;\n }\n\n if (correlationId) {\n identifiers.correlationId = correlationId;\n }\n\n // TODO: should we use patterns.uuid to validate correlationId and session correlation id? they will fail the diagnostic events validation pipeline if improperly formatted\n\n if (this.device) {\n const {device} = this;\n const {installationId} = device?.config || {};\n\n identifiers.userId = device?.userId || preLoginId;\n identifiers.deviceId = device?.url;\n identifiers.orgId = device?.orgId;\n // @ts-ignore\n identifiers.locusUrl = this.webex.internal.services.get('locus');\n\n if (installationId) {\n identifiers.machineId = installationId;\n }\n }\n\n if (meeting?.locusInfo?.fullState) {\n identifiers.locusUrl = meeting.locusUrl;\n identifiers.locusId = meeting.locusUrl && meeting.locusUrl.split('/').pop();\n identifiers.locusSessionId = meeting.locusInfo.fullState.sessionId;\n identifiers.locusStartTime =\n meeting.locusInfo.fullState && meeting.locusInfo.fullState.lastActive;\n }\n\n if (meeting?.meetingInfo?.confIdStr || meeting?.meetingInfo?.confID) {\n identifiers.webexConferenceIdStr = `${\n meeting.meetingInfo?.confIdStr || meeting.meetingInfo?.confID\n }`;\n }\n\n if (meeting?.meetingInfo?.meetingId) {\n identifiers.globalMeetingId = meeting.meetingInfo?.meetingId;\n }\n\n if (meeting?.meetingInfo?.siteName) {\n identifiers.webexSiteName = meeting.meetingInfo?.siteName;\n }\n\n if (mediaConnections) {\n identifiers.mediaAgentAlias = mediaConnections?.[0]?.mediaAgentAlias;\n identifiers.mediaAgentGroupId = mediaConnections?.[0]?.mediaAgentGroupId;\n }\n\n if (!identifiers?.webexConferenceIdStr && webexConferenceIdStr) {\n identifiers.webexConferenceIdStr = `${webexConferenceIdStr}`;\n }\n\n if (!identifiers?.globalMeetingId && globalMeetingId) {\n identifiers.globalMeetingId = globalMeetingId;\n }\n\n if (identifiers.correlationId === undefined) {\n throw new Error('Identifiers initialization failed.');\n }\n\n return identifiers;\n }\n\n /**\n * Create diagnostic event, which can hold client event, feature event or MQE event data.\n * This just initiates the shared properties that are required for all the 3 event categories.\n * @param eventData\n * @param options\n * @returns\n */\n prepareDiagnosticEvent(eventData: Event['event'], options: any) {\n const {meetingId, triggeredTime} = options;\n const origin = this.getOrigin(options, meetingId);\n\n const event: Event = {\n eventId: uuid.v4(),\n version: 1,\n origin,\n originTime: {\n triggered: triggeredTime || new Date().toISOString(),\n // is overridden in prepareRequest batcher\n sent: 'not_defined_yet',\n },\n // @ts-ignore\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: eventData,\n };\n\n // sanitize (remove empty properties, CA requires it)\n // but we don't want to sanitize MQE as most of the times\n // values will be 0, [] etc, and they are required.\n if (eventData.name !== 'client.mediaquality.event') {\n clearEmptyKeysRecursively(event);\n }\n\n return event;\n }\n\n /**\n * Create feature event\n * @param name\n * @param payload\n * @param options\n * @returns\n */\n private prepareClientFeatureEvent({\n name,\n payload,\n options,\n }: {\n name: FeatureEvent['name'];\n payload?: ClientFeatureEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n const {meetingId, correlationId} = options;\n let featureEventObject: FeatureEvent['payload'];\n\n // events that will most likely happen in join phase\n if (meetingId) {\n featureEventObject = this.createFeatureEventObjectInMeeting({name, options});\n } else {\n throw new Error('Not implemented');\n }\n\n // merge any new properties, or override existing ones\n featureEventObject = merge(featureEventObject, payload);\n\n // append client event data to the call diagnostic event\n const featureEvent = this.prepareDiagnosticEvent(featureEventObject, options);\n\n return featureEvent;\n }\n\n /**\n * Submit Feature Event\n * submit to business_ucf\n * @returns\n */\n public submitFeatureEvent({\n name,\n payload,\n options,\n delaySubmitEvent,\n }: {\n name: FeatureEvent['name'];\n payload?: ClientFeatureEventPayload;\n options?: SubmitClientEventOptions;\n delaySubmitEvent?: boolean;\n }) {\n if (delaySubmitEvent) {\n // Preserve the time when the event was triggered if delaying the submission to Call Features\n const delayedOptions = {\n ...options,\n triggeredTime: new Date().toISOString(),\n };\n\n this.delayedClientFeatureEvents.push({\n name,\n payload,\n options: delayedOptions,\n });\n\n return Promise.resolve();\n }\n\n this.logger.log(\n CALL_FEATURE_LOG_IDENTIFIER,\n 'CallFeatureMetrics: @submitFeatureEvent. Submit Client Feature Event CA event.',\n `name: ${name}`\n );\n const featureEvent = this.prepareClientFeatureEvent({name, payload, options});\n\n this.validator({type: 'ce', event: featureEvent});\n\n return this.submitToCallFeatures(featureEvent);\n }\n\n /**\n * Submit Feature Event\n * type is business\n * @param event\n */\n submitToCallFeatures(event: Event): Promise<any> {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['business'],\n };\n\n return this.callDiagnosticEventsBatcher.request(finalEvent);\n }\n\n /**\n * Submit Media Quality Event\n * @param args - submit params\n * @param arg.name - event key\n * @param arg.payload - additional payload to be merge with the default payload\n * @param arg.options - options\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: SubmitMQEPayload;\n options: SubmitMQEOptions;\n }) {\n const {meetingId, mediaConnections, webexConferenceIdStr, globalMeetingId} = options;\n\n // events that will most likely happen in join phase\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send MQE but no meeting was found...',\n `event: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return;\n }\n\n // merge identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n });\n\n // create media quality event object\n let clientEventObject: MediaQualityEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n intervals: payload.intervals,\n callingServiceType: 'LOCUS',\n meetingJoinInfo: {\n clientSignallingProtocol: 'WebRTC',\n },\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n // @ts-ignore\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || 'unknown',\n startTime: new Date().toISOString(),\n },\n webexSubServiceType: this.getSubServiceType(meeting),\n };\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append media quality event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n this.validator({type: 'mqe', event: diagnosticEvent});\n this.submitToCallDiagnostics(diagnosticEvent);\n } else {\n throw new Error(\n 'Media quality events cant be sent outside the context of a meeting. Meeting id is required.'\n );\n }\n }\n\n /**\n * Return Client Event payload by client error code\n * @param arg - get error arg\n * @param arg.clientErrorCode\n * @param arg.serviceErrorCode\n * @param arg.payloadOverrides\n * @param arg.httpStatusCode\n * @returns\n */\n public getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n serviceErrorName,\n rawErrorMessage,\n payloadOverrides,\n httpStatusCode,\n }: {\n clientErrorCode: number;\n serviceErrorCode: any;\n serviceErrorName?: any;\n rawErrorMessage?: string;\n payloadOverrides?: any;\n httpStatusCode?: number;\n }): ClientEventError {\n let error: ClientEventError;\n\n if (clientErrorCode) {\n const partialParsedError = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n if (partialParsedError) {\n error = merge(\n {fatal: true, shownToUser: false, name: 'other', category: 'other'}, // default values\n {errorCode: clientErrorCode},\n serviceErrorName ? {errorData: {errorName: serviceErrorName}} : {},\n {serviceErrorCode},\n {rawErrorMessage},\n httpStatusCode === undefined ? {} : {httpStatusCode},\n partialParsedError,\n payloadOverrides || {}\n );\n\n return error;\n }\n }\n\n return undefined;\n }\n\n /**\n * Clear the error cache\n */\n clearErrorCache() {\n this.eventErrorCache = new WeakMap();\n }\n\n /**\n * Checks if an event should be limited based on criteria defined in the event dictionary.\n * Returns true if the event should be sent, false if it has reached its limit.\n * @param event - The diagnostic event object\n * @returns boolean indicating whether the event should be sent\n */\n private shouldSendEvent({event}: Event): boolean {\n const eventName = event?.name as string;\n const correlationId = event?.identifiers?.correlationId;\n\n if (!correlationId || correlationId === 'unknown') {\n return true;\n }\n\n const limitKeyPrefix = `${eventName}:${correlationId}`;\n\n switch (eventName) {\n case 'client.media.render.start':\n case 'client.media.render.stop':\n case 'client.media.rx.start':\n case 'client.media.rx.stop':\n case 'client.media.tx.start':\n case 'client.media.tx.stop': {\n // Send only once per mediaType-correlationId pair (or mediaType-correlationId-shareInstanceId for share/share_audio)\n const mediaType = event?.mediaType;\n if (mediaType) {\n if (mediaType === 'share' || mediaType === 'share_audio') {\n const shareInstanceId = event?.shareInstanceId;\n if (shareInstanceId) {\n const limitKey = `${limitKeyPrefix}:${mediaType}:${shareInstanceId}`;\n\n return this.checkAndIncrementEventCount(\n limitKey,\n 1,\n `${eventName} for ${mediaType} instance ${shareInstanceId}`\n );\n }\n } else {\n const limitKey = `${limitKeyPrefix}:${mediaType}`;\n\n return this.checkAndIncrementEventCount(\n limitKey,\n 1,\n `${eventName} for mediaType ${mediaType}`\n );\n }\n }\n break;\n }\n\n case 'client.roap-message.received':\n case 'client.roap-message.sent': {\n // Send only once per correlationId and roap.messageType/roap.type\n const roapMessageType = event?.roap?.messageType || event?.roap?.type;\n if (roapMessageType) {\n const limitKey = `${limitKeyPrefix}:${roapMessageType}`;\n\n return this.checkAndIncrementEventCount(\n limitKey,\n 1,\n `${eventName} for ROAP type ${roapMessageType}`\n );\n }\n break;\n }\n\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n * Checks the current count for a limit key and increments if under limit.\n * @param limitKey - The unique key for this limit combination\n * @param maxCount - Maximum allowed count\n * @param eventDescription - Description for logging\n * @returns true if under limit and incremented, false if at/over limit\n */\n private checkAndIncrementEventCount(\n limitKey: string,\n maxCount: number,\n eventDescription: string\n ): boolean {\n const currentCount = this.eventLimitTracker.get(limitKey) || 0;\n\n if (currentCount >= maxCount) {\n // Log warning only once per limit key\n if (!this.eventLimitWarningsLogged.has(limitKey)) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticMetrics: Event limit reached for ${eventDescription}. ` +\n `Max count ${maxCount} exceeded. Event will not be sent.`,\n `limitKey: ${limitKey}`\n );\n this.eventLimitWarningsLogged.add(limitKey);\n }\n\n return false;\n }\n\n // Increment count and allow event\n this.eventLimitTracker.set(limitKey, currentCount + 1);\n\n return true;\n }\n\n /**\n * Clears event limit tracking\n */\n public clearEventLimits(): void {\n this.eventLimitTracker.clear();\n this.eventLimitWarningsLogged.clear();\n }\n\n /**\n * Clears event limit tracking for a specific correlationId only.\n * Keeps limits for other meetings intact.\n */\n public clearEventLimitsForCorrelationId(correlationId: string): void {\n if (!correlationId) {\n return;\n }\n // Keys are formatted as \"eventName:correlationId:...\" across all limiters.\n const hasCorrIdAtSecondToken = (key: string) => key.split(':')[1] === correlationId;\n for (const key of Array.from(this.eventLimitTracker.keys())) {\n if (hasCorrIdAtSecondToken(key)) {\n this.eventLimitTracker.delete(key);\n }\n }\n for (const key of Array.from(this.eventLimitWarningsLogged.values())) {\n if (hasCorrIdAtSecondToken(key)) {\n this.eventLimitWarningsLogged.delete(key);\n }\n }\n }\n\n /**\n * Generate error payload for Client Event\n * @param rawError\n */\n generateClientEventErrorPayload(rawError: any) {\n const cachedError = this.eventErrorCache.get(rawError);\n\n if (cachedError) {\n return [cachedError, true];\n }\n\n const rawErrorMessage = rawError.message;\n const httpStatusCode = rawError.statusCode;\n let payload;\n\n if (rawError.name) {\n if (isBrowserMediaErrorName(rawError.name)) {\n payload = this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode: BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP[rawError.name],\n serviceErrorName: rawError.name,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isSdpOfferCreationError(rawError) && !payload) {\n // error code is 30005, but that's not specific enough. we also need to check error.cause.type\n const causeType = rawError.cause?.type;\n\n payload = this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode:\n SDP_OFFER_CREATION_ERROR_MAP[causeType] || SDP_OFFER_CREATION_ERROR_MAP.GENERAL,\n serviceErrorName: rawError.name,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n const serviceErrorCode =\n rawError?.error?.body?.errorCode ||\n rawError?.body?.errorCode ||\n rawError?.body?.code ||\n rawError?.body?.reason?.reasonCode;\n\n if (serviceErrorCode) {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n if (clientErrorCode && !payload) {\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // by default, if it is locus error, return new locus err\n if (isLocusServiceErrorCode(serviceErrorCode) && !payload) {\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NEW_LOCUS_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isMeetingInfoServiceError(rawError) && !payload) {\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode: MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isNetworkError(rawError) && !payload) {\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NETWORK_ERROR,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isUnauthorizedError(rawError) && !payload) {\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode: AUTHENTICATION_FAILED_CODE,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (!payload) {\n // otherwise return unkown error but passing serviceErrorCode and serviceErrorName so that we know the issue\n payload = this.getErrorPayloadForClientErrorCode({\n clientErrorCode: UNKNOWN_ERROR,\n serviceErrorCode: serviceErrorCode || UNKNOWN_ERROR,\n serviceErrorName: rawError?.name,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // cache the payload for future use\n this.eventErrorCache.set(rawError, payload);\n\n return [payload, false];\n }\n\n /**\n * Create common object for in meeting events\n * @param name\n * @param options\n * @param eventType - 'client' | 'feature'\n * @returns object\n */\n private createCommonEventObjectInMeeting({\n name,\n options,\n eventType = 'client',\n }: {\n name: string;\n options?: SubmitClientEventOptions;\n eventType?: 'client' | 'feature';\n }) {\n const {\n meetingId,\n mediaConnections,\n globalMeetingId,\n webexConferenceIdStr,\n sessionCorrelationId,\n } = options;\n\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send common event but no meeting was found...',\n `name: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(\n eventType === 'feature'\n ? CALL_FEATURE_EVENT_FAILED_TO_SEND\n : CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND,\n {\n fields: {\n meetingId,\n name,\n },\n }\n );\n\n return undefined;\n }\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting?.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n sessionCorrelationId,\n });\n\n // create common event object structure\n const commonEventObject = {\n name,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n userType: meeting.getCurUserType(),\n loginType:\n 'loginType' in meeting.callStateForMetrics\n ? meeting.callStateForMetrics.loginType\n : this.getCurLoginType(),\n telemetryOptOut: this.getTelemetryOptOut(),\n isConvergedArchitectureEnabled: this.getIsConvergedArchitectureEnabled({\n meetingId,\n }),\n ...(meeting.userNameInput && {userNameInput: meeting.userNameInput}),\n ...(meeting.emailInput && {emailInput: meeting.emailInput}),\n webexSubServiceType: this.getSubServiceType(meeting),\n // @ts-ignore\n webClientPreload: this.webex.meetings?.config?.metrics?.webClientPreload,\n isVipMeeting: meeting?.meetingInfo?.vipmeeting || false,\n isAutomatedUser:\n typeof window !== 'undefined' && typeof navigator !== 'undefined' && !!navigator?.webdriver, // if webdriver is true, it's most likely in a test environment\n userActivation: this.getUserActivation(),\n };\n\n const joinFlowVersion = options.joinFlowVersion ?? meeting.callStateForMetrics?.joinFlowVersion;\n if (joinFlowVersion) {\n // @ts-ignore\n commonEventObject.joinFlowVersion = joinFlowVersion;\n }\n const meetingJoinedTime = meeting.isoLocalClientMeetingJoinTime;\n if (meetingJoinedTime) {\n // @ts-ignore\n commonEventObject.meetingJoinedTime = meetingJoinedTime;\n }\n\n if (options.meetingJoinPhase) {\n // @ts-ignore\n commonEventObject.meetingJoinPhase = options.meetingJoinPhase;\n }\n\n return commonEventObject;\n }\n\n /**\n * Create client event object for in meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - options\n * @returns object\n */\n private createClientEventObjectInMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const commonObject = this.createCommonEventObjectInMeeting({\n name,\n options,\n eventType: 'client',\n });\n if (!commonObject) return undefined;\n\n return {\n ...commonObject,\n errors,\n eventData: {\n ...commonObject.eventData,\n isMercuryConnected: this.isMercuryConnected,\n },\n } as ClientEvent['payload'];\n }\n\n /**\n * Create feature event object for in meeting function event\n * @param name\n * @param options\n * @returns object\n */\n private createFeatureEventObjectInMeeting({\n name,\n options,\n }: {\n name: FeatureEvent['name'];\n options?: SubmitClientEventOptions;\n }) {\n const commonObject = this.createCommonEventObjectInMeeting({\n name,\n options,\n eventType: 'feature',\n });\n if (!commonObject) return undefined;\n\n return {\n ...commonObject,\n key: 'UcfFeatureUsage',\n } as FeatureEvent['payload'];\n }\n\n /**\n * Create client event object for pre meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - payload\n * @returns object\n */\n private createClientEventObjectPreMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {correlationId, globalMeetingId, webexConferenceIdStr, preLoginId, sessionCorrelationId} =\n options;\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n correlationId,\n sessionCorrelationId,\n preLoginId,\n globalMeetingId,\n webexConferenceIdStr,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n errors,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n isMercuryConnected: this.isMercuryConnected,\n },\n loginType: this.getCurLoginType(),\n telemetryOptOut: this.getTelemetryOptOut(),\n // @ts-ignore\n webClientPreload: this.webex.meetings?.config?.metrics?.webClientPreload,\n isAutomatedUser:\n typeof window !== 'undefined' && typeof navigator !== 'undefined' && !!navigator?.webdriver, // if webdriver is true, it's most likely in a test environment\n userActivation: this.getUserActivation(),\n };\n\n if (options.joinFlowVersion) {\n clientEventObject.joinFlowVersion = options.joinFlowVersion;\n }\n\n if (options.meetingJoinPhase) {\n clientEventObject.meetingJoinPhase = options.meetingJoinPhase;\n }\n\n if (options.userNameInput) {\n clientEventObject.userNameInput = options.userNameInput;\n }\n\n if (options.emailInput) {\n clientEventObject.emailInput = options.emailInput;\n }\n\n return clientEventObject;\n }\n\n /**\n * Prepare Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @returns {any} options to be with fetch\n * @throws\n */\n private prepareClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n const {meetingId, correlationId, rawError} = options;\n let clientEventObject: ClientEvent['payload'];\n\n // check if we need to generate errors\n const errors: ClientEventPayloadError = [];\n\n if (rawError) {\n const [generatedError, cached] = this.generateClientEventErrorPayload(rawError);\n if (generatedError) {\n errors.push(generatedError);\n }\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @prepareClientEvent. Generated errors:',\n `generatedError (cached: ${cached}): ${JSON.stringify(generatedError)}`\n );\n }\n\n // events that will most likely happen in join phase\n if (meetingId) {\n clientEventObject = this.createClientEventObjectInMeeting({name, options, errors});\n } else if (correlationId) {\n // any pre join events or events that are outside the meeting.\n clientEventObject = this.createClientEventObjectPreMeeting({name, options, errors});\n } else {\n throw new Error('Not implemented');\n }\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append client event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n\n return diagnosticEvent;\n }\n\n /**\n * Submit Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @param arg.delaySubmitEvent - a boolean value indicating whether to delay the submission of client events.\n * @throws\n */\n public submitClientEvent({\n name,\n payload,\n options,\n delaySubmitEvent,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n delaySubmitEvent?: boolean;\n }) {\n if (delaySubmitEvent) {\n // Preserve the time when the event was triggered if delaying the submission to Call Diagnostics\n const delayedOptions = {\n ...options,\n triggeredTime: new Date().toISOString(),\n };\n\n this.delayedClientEvents.push({\n name,\n payload,\n options: delayedOptions,\n });\n\n return Promise.resolve();\n }\n\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitClientEvent. Submit Client Event CA event.',\n `name: ${name}`\n );\n const diagnosticEvent = this.prepareClientEvent({name, payload, options});\n\n if (!this.shouldSendEvent(diagnosticEvent)) {\n return Promise.resolve();\n }\n\n if (options?.preLoginId) {\n return this.submitToCallDiagnosticsPreLogin(diagnosticEvent, options?.preLoginId);\n }\n\n this.validator({type: 'ce', event: diagnosticEvent});\n\n return this.submitToCallDiagnostics(diagnosticEvent);\n }\n\n /**\n * Submit Delayed Client Event CA events. Clears delayedClientEvents array after submission.\n */\n public submitDelayedClientEvents(overrides?: Partial<DelayedClientEvent['options']>) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitDelayedClientEvents. Submitting delayed client events.'\n );\n\n if (this.delayedClientEvents.length === 0) {\n return Promise.resolve();\n }\n\n const promises = this.delayedClientEvents.map((delayedSubmitClientEventParams) => {\n const {name, payload, options} = delayedSubmitClientEventParams;\n const optionsWithOverrides: DelayedClientEvent['options'] = {...options, ...overrides};\n\n return this.submitClientEvent({name, payload, options: optionsWithOverrides});\n });\n\n this.delayedClientEvents = [];\n\n return Promise.all(promises);\n }\n\n /**\n * Submit Delayed feature Event CA events. Clears submitDelayedClientFeatureEvents array after submission.\n */\n public submitDelayedClientFeatureEvents(overrides?: Partial<DelayedClientEvent['options']>) {\n this.logger.log(\n CALL_FEATURE_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitDelayedClientFeatureEvents. Submitting delayed feature events.'\n );\n\n if (this.delayedClientFeatureEvents.length === 0) {\n return Promise.resolve();\n }\n\n const promises = this.delayedClientFeatureEvents.map((delayedSubmitClientEventParams) => {\n const {name, payload, options} = delayedSubmitClientEventParams;\n const optionsWithOverrides: DelayedClientEvent['options'] = {...options, ...overrides};\n\n return this.submitFeatureEvent({name, payload, options: optionsWithOverrides});\n });\n\n this.delayedClientFeatureEvents = [];\n\n return Promise.all(promises);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service.\n * @param event\n * @returns promise\n */\n submitToCallDiagnostics(event: Event): Promise<any> {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n markTelemetryOptOutOnResponse: true,\n };\n\n return this.callDiagnosticEventsBatcher.request(finalEvent);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service, pre login.\n * @param event\n * @param preLoginId\n * @param markTelemetryOptOutOnResponse\n * @returns\n */\n submitToCallDiagnosticsPreLogin = (event: Event, preLoginId?: string): Promise<any> => {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n markTelemetryOptOutOnResponse: true,\n };\n\n this.preLoginMetricsBatcher.savePreLoginId(preLoginId);\n\n return this.preLoginMetricsBatcher.request(finalEvent);\n };\n\n /**\n * Builds a request options object to later be passed to fetch().\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - client event options\n * @returns {Promise<any>}\n * @throws\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @buildClientEventFetchRequestOptions. Building request options object for fetch()...',\n `name: ${name}`\n );\n\n const clientEvent = this.prepareClientEvent({name, payload, options});\n\n // build metrics-a event type\n // @ts-ignore\n const diagnosticEvent = prepareDiagnosticMetricItem(this.webex, {\n eventPayload: clientEvent,\n type: ['diagnostic-event'],\n });\n\n const request = {\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: [diagnosticEvent],\n },\n headers: {},\n // @ts-ignore\n waitForServiceTimeout: this.webex.internal.metrics.config.waitForServiceTimeout,\n };\n\n if (options.preLoginId) {\n request.headers = {\n authorization: false,\n 'x-prelogin-userid': options.preLoginId,\n };\n request.resource = 'clientmetrics-prelogin';\n }\n\n // @ts-ignore\n return this.webex.prepareFetchOptions(request);\n }\n\n /**\n * Returns true if the specified serviceErrorCode maps to an expected error.\n * @param {number} serviceErrorCode the service error code\n * @returns {boolean}\n */\n public isServiceErrorExpected(serviceErrorCode: number): boolean {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n const clientErrorPayload = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n return clientErrorPayload?.category === 'expected';\n }\n\n /**\n * This method is used to set the device information by internal-plugin-device\n * @param {device} object The webex.internal.device object\n * @returns {undefined}\n */\n public setDeviceInfo(device: any): void {\n // This was created to fix the circular dependency between internal-plugin-device and internal-plugin-metrics\n this.logger.log('CallDiagnosticMetrics: @setDeviceInfo called', {\n userId: device?.userId,\n deviceId: device?.url,\n orgId: device?.orgId,\n });\n this.device = device;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/metrics.js
CHANGED
|
@@ -55,6 +55,14 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
55
55
|
* @returns one of 'login-ci','unverified-guest', null
|
|
56
56
|
*/
|
|
57
57
|
getCurLoginType(): "unverified-guest" | "login-ci";
|
|
58
|
+
/**
|
|
59
|
+
* Returns the user activation state reported from the browser's navigator.userActivation API
|
|
60
|
+
* @returns object with hasBeenActive and isActive booleans, or undefined if unavailable
|
|
61
|
+
*/
|
|
62
|
+
getUserActivation(): {
|
|
63
|
+
hasBeenActive: boolean;
|
|
64
|
+
isActive: boolean;
|
|
65
|
+
} | undefined;
|
|
58
66
|
/**
|
|
59
67
|
* Returns the telemetryOptOut value of the current user
|
|
60
68
|
* @returns one of 'manual', 'automatic', undefined
|
|
@@ -131,9 +139,17 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
131
139
|
clientVersionStatus?: "CURRENT" | "LEGACY" | "UNSUPPORTED";
|
|
132
140
|
localClientVersion?: string;
|
|
133
141
|
launcherVersion?: string;
|
|
142
|
+
installerVersion?: string;
|
|
143
|
+
installerMajorVersion?: number;
|
|
144
|
+
installerMinorVersion?: number;
|
|
145
|
+
installerRevision?: number;
|
|
134
146
|
modelNumber?: string;
|
|
135
147
|
joinFirstUpdateLater?: "ep-enabled" | "sp-enabled" | "not-enabled";
|
|
136
148
|
standbyUsed?: boolean;
|
|
149
|
+
/**
|
|
150
|
+
* Sets the manual telemetry opt-out status for the current user
|
|
151
|
+
* @param value - boolean value indicating manual telemetry opt-out status
|
|
152
|
+
*/
|
|
137
153
|
prefetchDocShowUsed?: boolean;
|
|
138
154
|
fastJoinUsed?: boolean;
|
|
139
155
|
clientDownloadSize?: number;
|
|
@@ -177,6 +193,14 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
177
193
|
preInstalledVersion?: string;
|
|
178
194
|
additionalProperties?: never;
|
|
179
195
|
};
|
|
196
|
+
installerInfo?: {
|
|
197
|
+
packageSuffix?: string;
|
|
198
|
+
packageArch?: string;
|
|
199
|
+
launchId?: string;
|
|
200
|
+
packageCount?: number;
|
|
201
|
+
totalSize?: number;
|
|
202
|
+
additionalProperties?: never;
|
|
203
|
+
};
|
|
180
204
|
emmVendorId?: string;
|
|
181
205
|
isHybridMedia?: boolean;
|
|
182
206
|
originData?: {};
|
|
@@ -194,6 +218,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
194
218
|
participantId?: string;
|
|
195
219
|
breakoutGroupId?: string;
|
|
196
220
|
breakoutMoveId?: string;
|
|
221
|
+
breakoutTrackingId?: string;
|
|
197
222
|
breakoutSessionId?: string;
|
|
198
223
|
browserId?: string;
|
|
199
224
|
ciExchangeTokenUrl?: string;
|
|
@@ -240,6 +265,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
240
265
|
msteamsTenantGuid?: string;
|
|
241
266
|
msteamsConferenceId?: string;
|
|
242
267
|
msteamsMeetingId?: string;
|
|
268
|
+
mtid?: string;
|
|
243
269
|
oauth2ClientId?: string;
|
|
244
270
|
orgId?: string;
|
|
245
271
|
provisionalCorrelationId?: string;
|
|
@@ -285,6 +311,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
285
311
|
participantId?: string;
|
|
286
312
|
breakoutGroupId?: string;
|
|
287
313
|
breakoutMoveId?: string;
|
|
314
|
+
breakoutTrackingId?: string;
|
|
288
315
|
breakoutSessionId?: string;
|
|
289
316
|
browserId?: string;
|
|
290
317
|
ciExchangeTokenUrl?: string;
|
|
@@ -331,6 +358,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
331
358
|
msteamsTenantGuid?: string;
|
|
332
359
|
msteamsConferenceId?: string;
|
|
333
360
|
msteamsMeetingId?: string;
|
|
361
|
+
mtid?: string;
|
|
334
362
|
oauth2ClientId?: string;
|
|
335
363
|
orgId?: string;
|
|
336
364
|
provisionalCorrelationId?: string;
|
|
@@ -376,6 +404,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
376
404
|
participantId?: string;
|
|
377
405
|
breakoutGroupId?: string;
|
|
378
406
|
breakoutMoveId?: string;
|
|
407
|
+
breakoutTrackingId?: string;
|
|
379
408
|
breakoutSessionId?: string;
|
|
380
409
|
browserId?: string;
|
|
381
410
|
ciExchangeTokenUrl?: string;
|
|
@@ -422,6 +451,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
422
451
|
msteamsTenantGuid?: string;
|
|
423
452
|
msteamsConferenceId?: string;
|
|
424
453
|
msteamsMeetingId?: string;
|
|
454
|
+
mtid?: string;
|
|
425
455
|
oauth2ClientId?: string;
|
|
426
456
|
orgId?: string;
|
|
427
457
|
provisionalCorrelationId?: string;
|
package/package.json
CHANGED
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@webex/common": "3.12.0-next.5",
|
|
39
39
|
"@webex/common-timers": "3.12.0-next.5",
|
|
40
|
-
"@webex/event-dictionary-ts": "^1.0.
|
|
40
|
+
"@webex/event-dictionary-ts": "^1.0.2215",
|
|
41
41
|
"@webex/test-helper-chai": "3.12.0-next.5",
|
|
42
42
|
"@webex/test-helper-mock-webex": "3.12.0-next.5",
|
|
43
|
-
"@webex/webex-core": "3.12.0-next.
|
|
43
|
+
"@webex/webex-core": "3.12.0-next.31",
|
|
44
44
|
"ip-anonymize": "^0.1.0",
|
|
45
45
|
"lodash": "^4.17.21",
|
|
46
46
|
"uuid": "^3.3.2"
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"test:style": "eslint ./src/**/*.*",
|
|
54
54
|
"test:unit": "webex-legacy-tools test --unit --runner mocha"
|
|
55
55
|
},
|
|
56
|
-
"version": "3.12.0-next.
|
|
56
|
+
"version": "3.12.0-next.31"
|
|
57
57
|
}
|
|
@@ -147,6 +147,27 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
147
147
|
return null;
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
+
/**
|
|
151
|
+
* Returns the user activation state reported from the browser's navigator.userActivation API
|
|
152
|
+
* @returns object with hasBeenActive and isActive booleans, or undefined if unavailable
|
|
153
|
+
*/
|
|
154
|
+
getUserActivation(): {hasBeenActive: boolean; isActive: boolean} | undefined {
|
|
155
|
+
const userActivation =
|
|
156
|
+
typeof navigator !== 'undefined'
|
|
157
|
+
? (navigator as {userActivation?: {hasBeenActive: boolean; isActive: boolean}})
|
|
158
|
+
.userActivation
|
|
159
|
+
: undefined;
|
|
160
|
+
|
|
161
|
+
if (userActivation) {
|
|
162
|
+
return {
|
|
163
|
+
hasBeenActive: userActivation.hasBeenActive,
|
|
164
|
+
isActive: userActivation.isActive,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
|
|
150
171
|
/**
|
|
151
172
|
* Returns the telemetryOptOut value of the current user
|
|
152
173
|
* @returns one of 'manual', 'automatic', undefined
|
|
@@ -1048,6 +1069,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
1048
1069
|
isVipMeeting: meeting?.meetingInfo?.vipmeeting || false,
|
|
1049
1070
|
isAutomatedUser:
|
|
1050
1071
|
typeof window !== 'undefined' && typeof navigator !== 'undefined' && !!navigator?.webdriver, // if webdriver is true, it's most likely in a test environment
|
|
1072
|
+
userActivation: this.getUserActivation(),
|
|
1051
1073
|
};
|
|
1052
1074
|
|
|
1053
1075
|
const joinFlowVersion = options.joinFlowVersion ?? meeting.callStateForMetrics?.joinFlowVersion;
|
|
@@ -1172,6 +1194,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
1172
1194
|
webClientPreload: this.webex.meetings?.config?.metrics?.webClientPreload,
|
|
1173
1195
|
isAutomatedUser:
|
|
1174
1196
|
typeof window !== 'undefined' && typeof navigator !== 'undefined' && !!navigator?.webdriver, // if webdriver is true, it's most likely in a test environment
|
|
1197
|
+
userActivation: this.getUserActivation(),
|
|
1175
1198
|
};
|
|
1176
1199
|
|
|
1177
1200
|
if (options.joinFlowVersion) {
|
|
@@ -868,6 +868,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
868
868
|
identifiers: {correlationId: 'test-id'},
|
|
869
869
|
name: 'client.alert.displayed',
|
|
870
870
|
isAutomatedUser: false,
|
|
871
|
+
userActivation: undefined,
|
|
871
872
|
},
|
|
872
873
|
options
|
|
873
874
|
);
|
|
@@ -889,6 +890,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
889
890
|
identifiers: {correlationId: 'test-id'},
|
|
890
891
|
name: 'client.alert.displayed',
|
|
891
892
|
isAutomatedUser: false,
|
|
893
|
+
userActivation: undefined,
|
|
892
894
|
},
|
|
893
895
|
options
|
|
894
896
|
);
|
|
@@ -928,6 +930,42 @@ describe('internal-plugin-metrics', () => {
|
|
|
928
930
|
});
|
|
929
931
|
});
|
|
930
932
|
|
|
933
|
+
describe('#getUserActivation', () => {
|
|
934
|
+
let originalDescriptor;
|
|
935
|
+
|
|
936
|
+
beforeEach(() => {
|
|
937
|
+
originalDescriptor = Object.getOwnPropertyDescriptor(global, 'navigator');
|
|
938
|
+
});
|
|
939
|
+
|
|
940
|
+
afterEach(() => {
|
|
941
|
+
if (originalDescriptor) {
|
|
942
|
+
Object.defineProperty(global, 'navigator', originalDescriptor);
|
|
943
|
+
} else {
|
|
944
|
+
delete (global as any).navigator;
|
|
945
|
+
}
|
|
946
|
+
});
|
|
947
|
+
|
|
948
|
+
it('should return the userActivation state when navigator.userActivation is available', () => {
|
|
949
|
+
Object.defineProperty(global, 'navigator', {
|
|
950
|
+
value: {userActivation: {hasBeenActive: true, isActive: false}},
|
|
951
|
+
configurable: true,
|
|
952
|
+
writable: true,
|
|
953
|
+
});
|
|
954
|
+
|
|
955
|
+
assert.deepEqual(cd.getUserActivation(), {hasBeenActive: true, isActive: false});
|
|
956
|
+
});
|
|
957
|
+
|
|
958
|
+
it('should return undefined when navigator.userActivation is not available', () => {
|
|
959
|
+
Object.defineProperty(global, 'navigator', {
|
|
960
|
+
value: {},
|
|
961
|
+
configurable: true,
|
|
962
|
+
writable: true,
|
|
963
|
+
});
|
|
964
|
+
|
|
965
|
+
assert.isUndefined(cd.getUserActivation());
|
|
966
|
+
});
|
|
967
|
+
});
|
|
968
|
+
|
|
931
969
|
describe('#submitClientEvent', () => {
|
|
932
970
|
it('should submit client event successfully with meetingId', () => {
|
|
933
971
|
const prepareDiagnosticEventSpy = sinon.spy(cd, 'prepareDiagnosticEvent');
|
|
@@ -986,6 +1024,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
986
1024
|
webClientPreload: undefined,
|
|
987
1025
|
isVipMeeting: false,
|
|
988
1026
|
isAutomatedUser: false,
|
|
1027
|
+
userActivation: undefined,
|
|
989
1028
|
},
|
|
990
1029
|
options
|
|
991
1030
|
);
|
|
@@ -1017,6 +1056,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1017
1056
|
webClientPreload: undefined,
|
|
1018
1057
|
isVipMeeting: false,
|
|
1019
1058
|
isAutomatedUser: false,
|
|
1059
|
+
userActivation: undefined,
|
|
1020
1060
|
},
|
|
1021
1061
|
eventId: 'my-fake-id',
|
|
1022
1062
|
origin: {
|
|
@@ -1059,6 +1099,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1059
1099
|
webClientPreload: undefined,
|
|
1060
1100
|
isVipMeeting: false,
|
|
1061
1101
|
isAutomatedUser: false,
|
|
1102
|
+
userActivation: undefined,
|
|
1062
1103
|
},
|
|
1063
1104
|
eventId: 'my-fake-id',
|
|
1064
1105
|
origin: {
|
|
@@ -1137,6 +1178,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1137
1178
|
webClientPreload: undefined,
|
|
1138
1179
|
isVipMeeting: false,
|
|
1139
1180
|
isAutomatedUser: false,
|
|
1181
|
+
userActivation: undefined,
|
|
1140
1182
|
},
|
|
1141
1183
|
options
|
|
1142
1184
|
);
|
|
@@ -1168,6 +1210,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1168
1210
|
webClientPreload: undefined,
|
|
1169
1211
|
isVipMeeting: false,
|
|
1170
1212
|
isAutomatedUser: false,
|
|
1213
|
+
userActivation: undefined,
|
|
1171
1214
|
},
|
|
1172
1215
|
eventId: 'my-fake-id',
|
|
1173
1216
|
origin: {
|
|
@@ -1210,6 +1253,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1210
1253
|
webClientPreload: undefined,
|
|
1211
1254
|
isVipMeeting: false,
|
|
1212
1255
|
isAutomatedUser: false,
|
|
1256
|
+
userActivation: undefined,
|
|
1213
1257
|
},
|
|
1214
1258
|
eventId: 'my-fake-id',
|
|
1215
1259
|
origin: {
|
|
@@ -1289,6 +1333,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1289
1333
|
webClientPreload: undefined,
|
|
1290
1334
|
isVipMeeting: false,
|
|
1291
1335
|
isAutomatedUser: false,
|
|
1336
|
+
userActivation: undefined,
|
|
1292
1337
|
},
|
|
1293
1338
|
options
|
|
1294
1339
|
);
|
|
@@ -1321,6 +1366,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1321
1366
|
webClientPreload: undefined,
|
|
1322
1367
|
isVipMeeting: false,
|
|
1323
1368
|
isAutomatedUser: false,
|
|
1369
|
+
userActivation: undefined,
|
|
1324
1370
|
},
|
|
1325
1371
|
eventId: 'my-fake-id',
|
|
1326
1372
|
origin: {
|
|
@@ -1364,6 +1410,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1364
1410
|
webClientPreload: undefined,
|
|
1365
1411
|
isVipMeeting: false,
|
|
1366
1412
|
isAutomatedUser: false,
|
|
1413
|
+
userActivation: undefined,
|
|
1367
1414
|
},
|
|
1368
1415
|
eventId: 'my-fake-id',
|
|
1369
1416
|
origin: {
|
|
@@ -1442,6 +1489,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1442
1489
|
webexSubServiceType: undefined,
|
|
1443
1490
|
isVipMeeting: false,
|
|
1444
1491
|
isAutomatedUser: false,
|
|
1492
|
+
userActivation: undefined,
|
|
1445
1493
|
},
|
|
1446
1494
|
options
|
|
1447
1495
|
);
|
|
@@ -1474,6 +1522,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1474
1522
|
webexSubServiceType: undefined,
|
|
1475
1523
|
isVipMeeting: false,
|
|
1476
1524
|
isAutomatedUser: false,
|
|
1525
|
+
userActivation: undefined,
|
|
1477
1526
|
},
|
|
1478
1527
|
eventId: 'my-fake-id',
|
|
1479
1528
|
origin: {
|
|
@@ -1517,6 +1566,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1517
1566
|
webexSubServiceType: undefined,
|
|
1518
1567
|
isVipMeeting: false,
|
|
1519
1568
|
isAutomatedUser: false,
|
|
1569
|
+
userActivation: undefined,
|
|
1520
1570
|
},
|
|
1521
1571
|
eventId: 'my-fake-id',
|
|
1522
1572
|
origin: {
|
|
@@ -1597,6 +1647,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1597
1647
|
webClientPreload: undefined,
|
|
1598
1648
|
isVipMeeting: false,
|
|
1599
1649
|
isAutomatedUser: false,
|
|
1650
|
+
userActivation: undefined,
|
|
1600
1651
|
},
|
|
1601
1652
|
options
|
|
1602
1653
|
);
|
|
@@ -1631,6 +1682,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1631
1682
|
webClientPreload: undefined,
|
|
1632
1683
|
isVipMeeting: false,
|
|
1633
1684
|
isAutomatedUser: false,
|
|
1685
|
+
userActivation: undefined,
|
|
1634
1686
|
},
|
|
1635
1687
|
eventId: 'my-fake-id',
|
|
1636
1688
|
origin: {
|
|
@@ -1676,6 +1728,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1676
1728
|
webClientPreload: undefined,
|
|
1677
1729
|
isVipMeeting: false,
|
|
1678
1730
|
isAutomatedUser: false,
|
|
1731
|
+
userActivation: undefined,
|
|
1679
1732
|
},
|
|
1680
1733
|
eventId: 'my-fake-id',
|
|
1681
1734
|
origin: {
|
|
@@ -1804,6 +1857,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1804
1857
|
name: 'client.alert.displayed',
|
|
1805
1858
|
webClientPreload: undefined,
|
|
1806
1859
|
isAutomatedUser: false,
|
|
1860
|
+
userActivation: undefined,
|
|
1807
1861
|
},
|
|
1808
1862
|
options
|
|
1809
1863
|
);
|
|
@@ -1829,6 +1883,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1829
1883
|
name: 'client.alert.displayed',
|
|
1830
1884
|
webClientPreload: undefined,
|
|
1831
1885
|
isAutomatedUser: false,
|
|
1886
|
+
userActivation: undefined,
|
|
1832
1887
|
},
|
|
1833
1888
|
eventId: 'my-fake-id',
|
|
1834
1889
|
origin: {
|
|
@@ -1906,6 +1961,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1906
1961
|
name: 'client.alert.displayed',
|
|
1907
1962
|
webClientPreload: undefined,
|
|
1908
1963
|
isAutomatedUser: false,
|
|
1964
|
+
userActivation: undefined,
|
|
1909
1965
|
},
|
|
1910
1966
|
options
|
|
1911
1967
|
);
|
|
@@ -1936,6 +1992,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
1936
1992
|
telemetryOptOut: undefined,
|
|
1937
1993
|
webClientPreload: undefined,
|
|
1938
1994
|
isAutomatedUser: false,
|
|
1995
|
+
userActivation: undefined,
|
|
1939
1996
|
},
|
|
1940
1997
|
},
|
|
1941
1998
|
options.preLoginId
|
|
@@ -2001,6 +2058,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2001
2058
|
name: 'client.alert.displayed',
|
|
2002
2059
|
webClientPreload: undefined,
|
|
2003
2060
|
isAutomatedUser: false,
|
|
2061
|
+
userActivation: undefined,
|
|
2004
2062
|
},
|
|
2005
2063
|
options
|
|
2006
2064
|
);
|
|
@@ -2033,6 +2091,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2033
2091
|
emailInput: 'current',
|
|
2034
2092
|
webClientPreload: undefined,
|
|
2035
2093
|
isAutomatedUser: false,
|
|
2094
|
+
userActivation: undefined,
|
|
2036
2095
|
},
|
|
2037
2096
|
},
|
|
2038
2097
|
options.preLoginId
|
|
@@ -2081,6 +2140,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2081
2140
|
webClientPreload: undefined,
|
|
2082
2141
|
isVipMeeting: false,
|
|
2083
2142
|
isAutomatedUser: false,
|
|
2143
|
+
userActivation: undefined,
|
|
2084
2144
|
},
|
|
2085
2145
|
eventId: 'my-fake-id',
|
|
2086
2146
|
origin: {
|
|
@@ -2139,6 +2199,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2139
2199
|
webClientPreload: undefined,
|
|
2140
2200
|
isVipMeeting: false,
|
|
2141
2201
|
isAutomatedUser: false,
|
|
2202
|
+
userActivation: undefined,
|
|
2142
2203
|
},
|
|
2143
2204
|
eventId: 'my-fake-id',
|
|
2144
2205
|
origin: {
|
|
@@ -2197,6 +2258,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2197
2258
|
name: 'client.alert.displayed',
|
|
2198
2259
|
webClientPreload: true,
|
|
2199
2260
|
isAutomatedUser: false,
|
|
2261
|
+
userActivation: undefined,
|
|
2200
2262
|
},
|
|
2201
2263
|
options
|
|
2202
2264
|
);
|
|
@@ -2222,6 +2284,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2222
2284
|
name: 'client.alert.displayed',
|
|
2223
2285
|
webClientPreload: true,
|
|
2224
2286
|
isAutomatedUser: false,
|
|
2287
|
+
userActivation: undefined,
|
|
2225
2288
|
},
|
|
2226
2289
|
eventId: 'my-fake-id',
|
|
2227
2290
|
origin: {
|
|
@@ -2293,6 +2356,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2293
2356
|
webClientPreload: undefined,
|
|
2294
2357
|
isVipMeeting: false,
|
|
2295
2358
|
isAutomatedUser: false,
|
|
2359
|
+
userActivation: undefined,
|
|
2296
2360
|
},
|
|
2297
2361
|
options
|
|
2298
2362
|
);
|
|
@@ -2325,6 +2389,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2325
2389
|
webClientPreload: undefined,
|
|
2326
2390
|
isVipMeeting: false,
|
|
2327
2391
|
isAutomatedUser: false,
|
|
2392
|
+
userActivation: undefined,
|
|
2328
2393
|
},
|
|
2329
2394
|
eventId: 'my-fake-id',
|
|
2330
2395
|
origin: {
|
|
@@ -2396,6 +2461,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2396
2461
|
webClientPreload: undefined,
|
|
2397
2462
|
isVipMeeting: true,
|
|
2398
2463
|
isAutomatedUser: false,
|
|
2464
|
+
userActivation: undefined,
|
|
2399
2465
|
},
|
|
2400
2466
|
options
|
|
2401
2467
|
);
|
|
@@ -2428,6 +2494,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2428
2494
|
webClientPreload: undefined,
|
|
2429
2495
|
isVipMeeting: true,
|
|
2430
2496
|
isAutomatedUser: false,
|
|
2497
|
+
userActivation: undefined,
|
|
2431
2498
|
},
|
|
2432
2499
|
eventId: 'my-fake-id',
|
|
2433
2500
|
origin: {
|
|
@@ -2505,6 +2572,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2505
2572
|
webClientPreload: undefined,
|
|
2506
2573
|
isVipMeeting: false,
|
|
2507
2574
|
isAutomatedUser: false,
|
|
2575
|
+
userActivation: undefined,
|
|
2508
2576
|
},
|
|
2509
2577
|
eventId: 'my-fake-id',
|
|
2510
2578
|
origin: {
|
|
@@ -2590,6 +2658,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2590
2658
|
webClientPreload: undefined,
|
|
2591
2659
|
isVipMeeting: false,
|
|
2592
2660
|
isAutomatedUser: false,
|
|
2661
|
+
userActivation: undefined,
|
|
2593
2662
|
},
|
|
2594
2663
|
eventId: 'my-fake-id',
|
|
2595
2664
|
origin: {
|
|
@@ -2665,6 +2734,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2665
2734
|
name: 'client.alert.displayed',
|
|
2666
2735
|
webClientPreload: undefined,
|
|
2667
2736
|
isAutomatedUser: false,
|
|
2737
|
+
userActivation: undefined,
|
|
2668
2738
|
},
|
|
2669
2739
|
eventId: 'my-fake-id',
|
|
2670
2740
|
origin: {
|
|
@@ -2742,6 +2812,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2742
2812
|
name: 'client.alert.displayed',
|
|
2743
2813
|
webClientPreload: undefined,
|
|
2744
2814
|
isAutomatedUser: false,
|
|
2815
|
+
userActivation: undefined,
|
|
2745
2816
|
},
|
|
2746
2817
|
eventId: 'my-fake-id',
|
|
2747
2818
|
origin: {
|
|
@@ -2830,6 +2901,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
2830
2901
|
webClientPreload: undefined,
|
|
2831
2902
|
isVipMeeting: false,
|
|
2832
2903
|
isAutomatedUser: false,
|
|
2904
|
+
userActivation: undefined,
|
|
2833
2905
|
},
|
|
2834
2906
|
eventId: 'my-fake-id',
|
|
2835
2907
|
origin: {
|
|
@@ -4252,6 +4324,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
4252
4324
|
webClientPreload: undefined,
|
|
4253
4325
|
isVipMeeting: false,
|
|
4254
4326
|
isAutomatedUser: false,
|
|
4327
|
+
userActivation: undefined,
|
|
4255
4328
|
},
|
|
4256
4329
|
eventId: 'my-fake-id',
|
|
4257
4330
|
origin: {
|
|
@@ -4661,6 +4734,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
4661
4734
|
webClientPreload: undefined,
|
|
4662
4735
|
isVipMeeting: false,
|
|
4663
4736
|
isAutomatedUser: false,
|
|
4737
|
+
userActivation: undefined,
|
|
4664
4738
|
meetingSummaryInfo: {
|
|
4665
4739
|
featureName: 'syncSystemMuteStatus',
|
|
4666
4740
|
featureActions: [
|
|
@@ -4705,6 +4779,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
4705
4779
|
webClientPreload: undefined,
|
|
4706
4780
|
isVipMeeting: false,
|
|
4707
4781
|
isAutomatedUser: false,
|
|
4782
|
+
userActivation: undefined,
|
|
4708
4783
|
meetingSummaryInfo: {
|
|
4709
4784
|
featureName: 'syncSystemMuteStatus',
|
|
4710
4785
|
featureActions: [
|