@webex/internal-plugin-metrics 3.8.1-next.2 → 3.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -73,7 +73,6 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
73
73
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "device", void 0);
74
74
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "delayedClientEvents", []);
75
75
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "eventErrorCache", new _weakMap.default());
76
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isMercuryConnected", false);
77
76
  // the default validator before piping an event to the batcher
78
77
  // this function can be overridden by the user
79
78
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "validator", function (options) {
@@ -141,18 +140,6 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
141
140
  return undefined;
142
141
  }
143
142
 
144
- /**
145
- * Sets mercury connected status for event data object in CA events
146
- * @public
147
- * @param status - boolean value indicating mercury connection status
148
- * @return {void}
149
- */
150
- }, {
151
- key: "setMercuryConnectedStatus",
152
- value: function setMercuryConnectedStatus(status) {
153
- this.isMercuryConnected = status;
154
- }
155
-
156
143
  /**
157
144
  * Returns meeting's subServiceType
158
145
  * @param meeting
@@ -688,8 +675,7 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
688
675
  identifiers: identifiers,
689
676
  errors: errors,
690
677
  eventData: {
691
- webClientDomain: window.location.hostname,
692
- isMercuryConnected: this.isMercuryConnected
678
+ webClientDomain: window.location.hostname
693
679
  },
694
680
  userType: meeting.getCurUserType(),
695
681
  loginType: 'loginType' in meeting.callStateForMetrics ? meeting.callStateForMetrics.loginType : this.getCurLoginType(),
@@ -755,8 +741,7 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
755
741
  canProceed: true,
756
742
  identifiers: identifiers,
757
743
  eventData: {
758
- webClientDomain: window.location.hostname,
759
- isMercuryConnected: this.isMercuryConnected
744
+ webClientDomain: window.location.hostname
760
745
  },
761
746
  loginType: this.getCurLoginType(),
762
747
  // @ts-ignore
@@ -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","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","_BrowserDetection","BrowserDetection","getOSVersion","getBrowserName","getBrowserVersion","CallDiagnosticMetrics","exports","_StatelessWebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","args","Array","_key","concat","_assertThisInitialized2","_weakMap","options","_promise","resolve","event","valid","preLoginId","finalEvent","eventPayload","type","preLoginMetricsBatcher","savePreLoginId","request","logger","webex","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","parent","PreLoginMetricsBatcher","_createClass2","key","value","getCurLoginType","canAuthorize","credentials","isUnverifiedGuest","getIsConvergedArchitectureEnabled","_ref","meetingId","_meeting$meetingInfo","meeting","meetings","getBasicMeetingInformation","meetingInfo","enableConvergedArchitecture","undefined","setMercuryConnectedStatus","status","isMercuryConnected","getSubServiceType","webexScheduled","enableEvent","pmr","WEBEX_SUB_SERVICE_TYPES","PMR","SCHEDULED_MEETING","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$10","_this$webex$meetings$11","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","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","locusStartTime","lastActive","confIdStr","confID","_meeting$meetingInfo4","_meeting$meetingInfo5","_meeting$meetingInfo7","siteName","_meeting$meetingInfo9","webexSiteName","_mediaConnections$","_mediaConnections$2","mediaAgentAlias","mediaAgentGroupId","prepareDiagnosticEvent","eventData","_this$webex$meetings$12","triggeredTime","eventId","uuid","v4","originTime","triggered","Date","toISOString","sent","senderCountryCode","countryCode","clearEmptyKeysRecursively","submitFeatureEvent","submitMQE","_ref3","payload","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","merge","diagnosticEvent","validator","submitToCallDiagnostics","getErrorPayloadForClientErrorCode","_ref4","clientErrorCode","serviceErrorCode","serviceErrorName","rawErrorMessage","payloadOverrides","httpStatusCode","error","partialParsedError","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","fatal","shownToUser","category","errorCode","errorData","errorName","clearErrorCache","eventErrorCache","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","set","createClientEventObjectInMeeting","_ref5","_this$webex$meetings2","_this$webex$meetings3","_this$webex$meetings4","_options$joinFlowVers","_meeting$callStateFor","errors","userType","getCurUserType","loginType","callStateForMetrics","isConvergedArchitectureEnabled","userNameInput","emailInput","webexSubServiceType","webClientPreload","joinFlowVersion","meetingJoinedTime","isoLocalClientMeetingJoinTime","meetingJoinPhase","createClientEventObjectPreMeeting","_ref6","_this$webex$meetings5","_this$webex$meetings6","_this$webex$meetings7","prepareClientEvent","_ref7","_this$generateClientE","_this$generateClientE2","_slicedToArray2","generatedError","cached","submitClientEvent","_ref8","delaySubmitEvent","delayedOptions","delayedClientEvents","submitToCallDiagnosticsPreLogin","submitDelayedClientEvents","overrides","_this2","promises","map","delayedSubmitClientEventParams","optionsWithOverrides","all","_buildClientEventFetchRequestOptions","_asyncToGenerator2","_regenerator","mark","_callee","_ref9","clientEvent","wrap","_callee$","_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} 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} 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};\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 eventErrorCache: WeakMap<any, any> = new WeakMap();\n private isMercuryConnected = 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 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 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 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.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 * TODO: NOT IMPLEMENTED\n * Submit Feature Event\n * @returns\n */\n public submitFeatureEvent() {\n throw Error('Not implemented');\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 };\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 * 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 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 {\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 client event but no meeting was found...',\n `name: ${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 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 client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n errors,\n eventData: {\n webClientDomain: window.location.hostname,\n isMercuryConnected: this.isMercuryConnected,\n },\n userType: meeting.getCurUserType(),\n loginType:\n 'loginType' in meeting.callStateForMetrics\n ? meeting.callStateForMetrics.loginType\n : this.getCurLoginType(),\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 };\n\n const joinFlowVersion = options.joinFlowVersion ?? meeting.callStateForMetrics?.joinFlowVersion;\n if (joinFlowVersion) {\n clientEventObject.joinFlowVersion = joinFlowVersion;\n }\n const meetingJoinedTime = meeting.isoLocalClientMeetingJoinTime;\n if (meetingJoinedTime) {\n clientEventObject.meetingJoinedTime = meetingJoinedTime;\n }\n\n if (options.meetingJoinPhase) {\n clientEventObject.meetingJoinPhase = options.meetingJoinPhase;\n }\n\n return clientEventObject;\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 // @ts-ignore\n webClientPreload: this.webex.meetings?.config?.metrics?.webClientPreload,\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 (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 * 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 };\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 * @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 };\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', device);\n\n this.device = device;\n }\n}\n"],"mappings":"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"}
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","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","_BrowserDetection","BrowserDetection","getOSVersion","getBrowserName","getBrowserVersion","CallDiagnosticMetrics","exports","_StatelessWebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","args","Array","_key","concat","_assertThisInitialized2","_weakMap","options","_promise","resolve","event","valid","preLoginId","finalEvent","eventPayload","type","preLoginMetricsBatcher","savePreLoginId","request","logger","webex","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","parent","PreLoginMetricsBatcher","_createClass2","key","value","getCurLoginType","canAuthorize","credentials","isUnverifiedGuest","getIsConvergedArchitectureEnabled","_ref","meetingId","_meeting$meetingInfo","meeting","meetings","getBasicMeetingInformation","meetingInfo","enableConvergedArchitecture","undefined","getSubServiceType","webexScheduled","enableEvent","pmr","WEBEX_SUB_SERVICE_TYPES","PMR","SCHEDULED_MEETING","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$10","_this$webex$meetings$11","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","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","locusStartTime","lastActive","confIdStr","confID","_meeting$meetingInfo4","_meeting$meetingInfo5","_meeting$meetingInfo7","siteName","_meeting$meetingInfo9","webexSiteName","_mediaConnections$","_mediaConnections$2","mediaAgentAlias","mediaAgentGroupId","prepareDiagnosticEvent","eventData","_this$webex$meetings$12","triggeredTime","eventId","uuid","v4","originTime","triggered","Date","toISOString","sent","senderCountryCode","countryCode","clearEmptyKeysRecursively","submitFeatureEvent","submitMQE","_ref3","payload","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","merge","diagnosticEvent","validator","submitToCallDiagnostics","getErrorPayloadForClientErrorCode","_ref4","clientErrorCode","serviceErrorCode","serviceErrorName","rawErrorMessage","payloadOverrides","httpStatusCode","error","partialParsedError","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","fatal","shownToUser","category","errorCode","errorData","errorName","clearErrorCache","eventErrorCache","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","set","createClientEventObjectInMeeting","_ref5","_this$webex$meetings2","_this$webex$meetings3","_this$webex$meetings4","_options$joinFlowVers","_meeting$callStateFor","errors","userType","getCurUserType","loginType","callStateForMetrics","isConvergedArchitectureEnabled","userNameInput","emailInput","webexSubServiceType","webClientPreload","joinFlowVersion","meetingJoinedTime","isoLocalClientMeetingJoinTime","meetingJoinPhase","createClientEventObjectPreMeeting","_ref6","_this$webex$meetings5","_this$webex$meetings6","_this$webex$meetings7","prepareClientEvent","_ref7","_this$generateClientE","_this$generateClientE2","_slicedToArray2","generatedError","cached","submitClientEvent","_ref8","delaySubmitEvent","delayedOptions","delayedClientEvents","submitToCallDiagnosticsPreLogin","submitDelayedClientEvents","overrides","_this2","promises","map","delayedSubmitClientEventParams","optionsWithOverrides","all","_buildClientEventFetchRequestOptions","_asyncToGenerator2","_regenerator","mark","_callee","_ref9","clientEvent","wrap","_callee$","_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} 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} 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};\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 eventErrorCache: WeakMap<any, any> = new WeakMap();\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 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 * 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 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 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.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 * TODO: NOT IMPLEMENTED\n * Submit Feature Event\n * @returns\n */\n public submitFeatureEvent() {\n throw Error('Not implemented');\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 };\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 * 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 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 {\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 client event but no meeting was found...',\n `name: ${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 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 client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n errors,\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 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 };\n\n const joinFlowVersion = options.joinFlowVersion ?? meeting.callStateForMetrics?.joinFlowVersion;\n if (joinFlowVersion) {\n clientEventObject.joinFlowVersion = joinFlowVersion;\n }\n const meetingJoinedTime = meeting.isoLocalClientMeetingJoinTime;\n if (meetingJoinedTime) {\n clientEventObject.meetingJoinedTime = meetingJoinedTime;\n }\n\n if (options.meetingJoinPhase) {\n clientEventObject.meetingJoinPhase = options.meetingJoinPhase;\n }\n\n return clientEventObject;\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 },\n loginType: this.getCurLoginType(),\n // @ts-ignore\n webClientPreload: this.webex.meetings?.config?.metrics?.webClientPreload,\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 (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 * 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 };\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 * @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 };\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', device);\n\n this.device = device;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
10
+ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
11
+ var _batcher = _interopRequireDefault(require("./batcher"));
12
+ /*!
13
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
14
+ */
15
+
16
+ var CallDiagnosticEventsBatcher = _batcher.default.extend({
17
+ namespace: 'Metrics',
18
+ /**
19
+ * @param {string} webClientDomain
20
+ * @returns {string}
21
+ */
22
+ getBuildType: function getBuildType(webClientDomain) {
23
+ if (webClientDomain !== null && webClientDomain !== void 0 && webClientDomain.includes('teams.webex.com') || webClientDomain !== null && webClientDomain !== void 0 && webClientDomain.includes('localhost') || webClientDomain !== null && webClientDomain !== void 0 && webClientDomain.includes('127.0.0.1') || process.env.NODE_ENV !== 'production') {
24
+ return 'test';
25
+ }
26
+ return process.env.NODE_ENV === 'production' ? 'prod' : 'test';
27
+ },
28
+ prepareItem: function prepareItem(item) {
29
+ var _item$event, _item$event$eventData;
30
+ // networkType should be a enum value: `wifi`, `ethernet`, `cellular`, or `unknown`.
31
+ // Browsers cannot provide such information right now. However, it is a required field.
32
+ var origin = {
33
+ buildType: this.getBuildType((_item$event = item.event) === null || _item$event === void 0 ? void 0 : (_item$event$eventData = _item$event.eventData) === null || _item$event$eventData === void 0 ? void 0 : _item$event$eventData.webClientDomain),
34
+ networkType: 'unknown'
35
+ };
36
+ item.eventPayload.origin = (0, _assign.default)(origin, item.eventPayload.origin);
37
+ return _promise.default.resolve(item);
38
+ },
39
+ prepareRequest: function prepareRequest(queue) {
40
+ // Add sent timestamp
41
+ queue.forEach(function (item) {
42
+ item.eventPayload.originTime = item.eventPayload.originTime || {};
43
+ item.eventPayload.originTime.sent = new Date().toISOString();
44
+ });
45
+ return _promise.default.resolve(queue);
46
+ },
47
+ submitHttpRequest: function submitHttpRequest(payload) {
48
+ return this.webex.request({
49
+ method: 'POST',
50
+ service: 'metrics',
51
+ resource: 'clientmetrics',
52
+ body: {
53
+ metrics: payload
54
+ }
55
+ });
56
+ }
57
+ });
58
+ var _default = CallDiagnosticEventsBatcher;
59
+ exports.default = _default;
60
+ //# sourceMappingURL=call-diagnostic-events-batcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_batcher","_interopRequireDefault","require","CallDiagnosticEventsBatcher","Batcher","extend","namespace","getBuildType","webClientDomain","includes","process","env","NODE_ENV","prepareItem","item","_item$event","_item$event$eventData","origin","buildType","event","eventData","networkType","eventPayload","_assign","default","_promise","resolve","prepareRequest","queue","forEach","originTime","sent","Date","toISOString","submitHttpRequest","payload","webex","request","method","service","resource","body","metrics","_default","exports"],"sources":["call-diagnostic-events-batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport Batcher from './batcher';\n\nconst CallDiagnosticEventsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n /**\n * @param {string} webClientDomain\n * @returns {string}\n */\n getBuildType(webClientDomain) {\n if (\n webClientDomain?.includes('teams.webex.com') ||\n webClientDomain?.includes('localhost') ||\n webClientDomain?.includes('127.0.0.1') ||\n process.env.NODE_ENV !== 'production'\n ) {\n return 'test';\n }\n\n return process.env.NODE_ENV === 'production' ? 'prod' : 'test';\n },\n\n prepareItem(item) {\n // networkType should be a enum value: `wifi`, `ethernet`, `cellular`, or `unknown`.\n // Browsers cannot provide such information right now. However, it is a required field.\n const origin = {\n buildType: this.getBuildType(item.event?.eventData?.webClientDomain),\n networkType: 'unknown',\n };\n\n item.eventPayload.origin = Object.assign(origin, item.eventPayload.origin);\n\n return Promise.resolve(item);\n },\n\n prepareRequest(queue) {\n // Add sent timestamp\n queue.forEach((item) => {\n item.eventPayload.originTime = item.eventPayload.originTime || {};\n item.eventPayload.originTime.sent = new Date().toISOString();\n });\n\n return Promise.resolve(queue);\n },\n\n submitHttpRequest(payload) {\n return this.webex.request({\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: payload,\n },\n });\n },\n});\n\nexport default CallDiagnosticEventsBatcher;\n"],"mappings":";;;;;;;;;;AAIA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AAJA;AACA;AACA;;AAIA,IAAMC,2BAA2B,GAAGC,gBAAO,CAACC,MAAM,CAAC;EACjDC,SAAS,EAAE,SAAS;EAEpB;AACF;AACA;AACA;EACEC,YAAY,WAAAA,aAACC,eAAe,EAAE;IAC5B,IACEA,eAAe,aAAfA,eAAe,eAAfA,eAAe,CAAEC,QAAQ,CAAC,iBAAiB,CAAC,IAC5CD,eAAe,aAAfA,eAAe,eAAfA,eAAe,CAAEC,QAAQ,CAAC,WAAW,CAAC,IACtCD,eAAe,aAAfA,eAAe,eAAfA,eAAe,CAAEC,QAAQ,CAAC,WAAW,CAAC,IACtCC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EACrC;MACA,OAAO,MAAM;IACf;IAEA,OAAOF,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM;EAChE,CAAC;EAEDC,WAAW,WAAAA,YAACC,IAAI,EAAE;IAAA,IAAAC,WAAA,EAAAC,qBAAA;IAChB;IACA;IACA,IAAMC,MAAM,GAAG;MACbC,SAAS,EAAE,IAAI,CAACX,YAAY,EAAAQ,WAAA,GAACD,IAAI,CAACK,KAAK,cAAAJ,WAAA,wBAAAC,qBAAA,GAAVD,WAAA,CAAYK,SAAS,cAAAJ,qBAAA,uBAArBA,qBAAA,CAAuBR,eAAe,CAAC;MACpEa,WAAW,EAAE;IACf,CAAC;IAEDP,IAAI,CAACQ,YAAY,CAACL,MAAM,GAAG,IAAAM,OAAA,CAAAC,OAAA,EAAcP,MAAM,EAAEH,IAAI,CAACQ,YAAY,CAACL,MAAM,CAAC;IAE1E,OAAOQ,QAAA,CAAAD,OAAA,CAAQE,OAAO,CAACZ,IAAI,CAAC;EAC9B,CAAC;EAEDa,cAAc,WAAAA,eAACC,KAAK,EAAE;IACpB;IACAA,KAAK,CAACC,OAAO,CAAC,UAACf,IAAI,EAAK;MACtBA,IAAI,CAACQ,YAAY,CAACQ,UAAU,GAAGhB,IAAI,CAACQ,YAAY,CAACQ,UAAU,IAAI,CAAC,CAAC;MACjEhB,IAAI,CAACQ,YAAY,CAACQ,UAAU,CAACC,IAAI,GAAG,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE;IAC9D,CAAC,CAAC;IAEF,OAAOR,QAAA,CAAAD,OAAA,CAAQE,OAAO,CAACE,KAAK,CAAC;EAC/B,CAAC;EAEDM,iBAAiB,WAAAA,kBAACC,OAAO,EAAE;IACzB,OAAO,IAAI,CAACC,KAAK,CAACC,OAAO,CAAC;MACxBC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE,SAAS;MAClBC,QAAQ,EAAE,eAAe;MACzBC,IAAI,EAAE;QACJC,OAAO,EAAEP;MACX;IACF,CAAC,CAAC;EACJ;AACF,CAAC,CAAC;AAAC,IAAAQ,QAAA,GAEYxC,2BAA2B;AAAAyC,OAAA,CAAApB,OAAA,GAAAmB,QAAA"}
package/dist/metrics.js CHANGED
@@ -148,7 +148,7 @@ var Metrics = _webexCore.WebexPlugin.extend({
148
148
  }
149
149
  });
150
150
  },
151
- version: "3.8.1-next.2"
151
+ version: "3.8.1"
152
152
  });
153
153
  var _default = exports.default = Metrics;
154
154
  //# sourceMappingURL=metrics.js.map
@@ -31,7 +31,6 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
31
31
  private device;
32
32
  private delayedClientEvents;
33
33
  private eventErrorCache;
34
- private isMercuryConnected;
35
34
  validator: (options: {
36
35
  type: 'mqe' | 'ce';
37
36
  event: Event;
@@ -56,13 +55,6 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
56
55
  getIsConvergedArchitectureEnabled({ meetingId }: {
57
56
  meetingId?: string;
58
57
  }): boolean;
59
- /**
60
- * Sets mercury connected status for event data object in CA events
61
- * @public
62
- * @param status - boolean value indicating mercury connection status
63
- * @return {void}
64
- */
65
- setMercuryConnectedStatus(status: boolean): void;
66
58
  /**
67
59
  * Returns meeting's subServiceType
68
60
  * @param meeting
@@ -99,7 +91,10 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
99
91
  clientLaunchMethod?: "url-handler" | "universal-link" | "voice-command" | "notification" | "manual" | "teams-cross-launch" | "mc-cross-launch" | "cws" | "launcher" | "cws-launcher";
100
92
  browser?: string;
101
93
  browserVersion?: string;
102
- clientType?: "MEETING_CENTER" | "EVENT_CENTER" | "TRAINING_CENTER" | "TEAMS_CLIENT" | "TEAMS_DEVICE" | "TEAMS_SHARE" | "SIP" | "RECORDING" | "CLOUD_AWARE_SIP" | "TEAMS_WXC_CLIENT" | "WXC_CLIENT" | "WXC_DEVICE" | "WEBEX_JS_SDK" | "VOICEA_CLIENT" | "CISCO_SIP_GW" | "WEBEX_SDK" | "CPAAS_THIRD_PARTY_SDK" | "WXC_THIRD_PARTY" | "WXCC" | "TEAMS_PHONE";
94
+ clientType?: "MEETING_CENTER" | "EVENT_CENTER" | "TRAINING_CENTER" | "TEAMS_CLIENT" | "TEAMS_DEVICE" | "TEAMS_SHARE" | "SIP" | "RECORDING" | "CLOUD_AWARE_SIP" | "TEAMS_WXC_CLIENT" | "WXC_CLIENT" | "WXC_DEVICE" | "WEBEX_JS_SDK" | "VOICEA_CLIENT" | "CISCO_SIP_GW" | "WEBEX_SDK" | "CPAAS_THIRD_PARTY_SDK" | "WXC_THIRD_PARTY" | "WXCC" | "TEAMS_PHONE"; /**
95
+ * Constructor
96
+ * @param args
97
+ */
103
98
  subClientType?: "TEAMS_DEVICE" | "AUTOMOTIVE_APP" | "DESKTOP_APP" | "DESKTOP_APP_VDI" | "DEVICE_CURRENT" | "DEVICE_LEGACY_2020" | "HOLOGRAM_HEADSET_APP" | "HVDI_APP" | "MIXED" | "MOBILE_APP" | "MOBILE_NETWORK" | "PAGE" | "VDI_APP" | "WEB_APP" | "PHONE_NOVUM" | "PHONE_ESPRESSO" | "PHONE_BUMBLEBEE";
104
99
  schedulingClientType?: "TEAMS_CLIENT" | "GOOGLE_ADDON" | "PT" | "PUBLIC_API" | "UNIFIED_PAGE" | "WEBEX_PAGE" | "GOOGLE_NOTIFICATION_CALENDAR" | "MSFT_NOTIFICATION_ADDIN" | "MSFT_NOTIFICATION_CALENDAR" | "OUTLOOK_ADDIN";
105
100
  clientVersion?: string;
package/package.json CHANGED
@@ -26,22 +26,22 @@
26
26
  "@webex/eslint-config-legacy": "0.0.0",
27
27
  "@webex/jest-config-legacy": "0.0.0",
28
28
  "@webex/legacy-tools": "0.0.0",
29
- "@webex/test-helper-chai": "3.8.1-next.2",
30
- "@webex/test-helper-mocha": "3.8.1-next.2",
31
- "@webex/test-helper-mock-webex": "3.8.1-next.2",
32
- "@webex/test-helper-test-users": "3.8.1-next.2",
29
+ "@webex/test-helper-chai": "3.8.1",
30
+ "@webex/test-helper-mocha": "3.8.1",
31
+ "@webex/test-helper-mock-webex": "3.8.1",
32
+ "@webex/test-helper-test-users": "3.8.1",
33
33
  "eslint": "^8.24.0",
34
34
  "prettier": "^2.7.1",
35
35
  "sinon": "^9.2.4"
36
36
  },
37
37
  "dependencies": {
38
- "@webex/common": "3.8.1-next.2",
39
- "@webex/common-timers": "3.8.1-next.2",
38
+ "@webex/common": "3.8.1",
39
+ "@webex/common-timers": "3.8.1",
40
40
  "@webex/event-dictionary-ts": "^1.0.1753",
41
- "@webex/internal-plugin-metrics": "3.8.1-next.2",
42
- "@webex/test-helper-chai": "3.8.1-next.2",
43
- "@webex/test-helper-mock-webex": "3.8.1-next.2",
44
- "@webex/webex-core": "3.8.1-next.2",
41
+ "@webex/internal-plugin-metrics": "3.8.1",
42
+ "@webex/test-helper-chai": "3.8.1",
43
+ "@webex/test-helper-mock-webex": "3.8.1",
44
+ "@webex/webex-core": "3.8.1",
45
45
  "ip-anonymize": "^0.1.0",
46
46
  "lodash": "^4.17.21",
47
47
  "uuid": "^3.3.2"
@@ -54,5 +54,5 @@
54
54
  "test:style": "eslint ./src/**/*.*",
55
55
  "test:unit": "webex-legacy-tools test --unit --runner mocha"
56
56
  },
57
- "version": "3.8.1-next.2"
57
+ "version": "3.8.1"
58
58
  }
@@ -98,7 +98,6 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
98
98
  private device: any;
99
99
  private delayedClientEvents: DelayedClientEvent[] = [];
100
100
  private eventErrorCache: WeakMap<any, any> = new WeakMap();
101
- private isMercuryConnected = false;
102
101
 
103
102
  // the default validator before piping an event to the batcher
104
103
  // this function can be overridden by the user
@@ -151,16 +150,6 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
151
150
  return undefined;
152
151
  }
153
152
 
154
- /**
155
- * Sets mercury connected status for event data object in CA events
156
- * @public
157
- * @param status - boolean value indicating mercury connection status
158
- * @return {void}
159
- */
160
- public setMercuryConnectedStatus(status: boolean): void {
161
- this.isMercuryConnected = status;
162
- }
163
-
164
153
  /**
165
154
  * Returns meeting's subServiceType
166
155
  * @param meeting
@@ -750,7 +739,6 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
750
739
  errors,
751
740
  eventData: {
752
741
  webClientDomain: window.location.hostname,
753
- isMercuryConnected: this.isMercuryConnected,
754
742
  },
755
743
  userType: meeting.getCurUserType(),
756
744
  loginType:
@@ -819,7 +807,6 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
819
807
  identifiers,
820
808
  eventData: {
821
809
  webClientDomain: window.location.hostname,
822
- isMercuryConnected: this.isMercuryConnected,
823
810
  },
824
811
  loginType: this.getCurLoginType(),
825
812
  // @ts-ignore
@@ -13,12 +13,9 @@ import {
13
13
  } from '@webex/internal-plugin-metrics';
14
14
  import uuid from 'uuid';
15
15
  import {omit} from 'lodash';
16
- import {glob} from 'glob';
17
- import {expect} from 'chai';
18
- import {
19
- ClientEmailInput,
20
- ClientUserNameInput,
21
- } from '@webex/internal-plugin-metrics/src/metrics.types';
16
+ import { glob } from 'glob';
17
+ import { expect } from 'chai';
18
+ import { ClientEmailInput, ClientUserNameInput } from '@webex/internal-plugin-metrics/src/metrics.types';
22
19
 
23
20
  //@ts-ignore
24
21
  global.window = {location: {hostname: 'whatever'}};
@@ -68,14 +65,14 @@ describe('internal-plugin-metrics', () => {
68
65
  ...fakeMeeting,
69
66
  id: '4',
70
67
  isoLocalClientMeetingJoinTime: 'testTimeString',
71
- };
68
+ }
72
69
  const fakeMeeting5 = {
73
70
  ...fakeMeeting,
74
71
  id: '5',
75
72
  correlationId: 'correlationId5',
76
73
  sessionCorrelationId: 'sessionCorrelationId5',
77
74
  userNameInput: 'test',
78
- emailInput: 'test@test.com',
75
+ emailInput: 'test@test.com'
79
76
  };
80
77
 
81
78
  const fakeMeetings = {
@@ -826,147 +823,7 @@ describe('internal-plugin-metrics', () => {
826
823
  meetingId: fakeMeeting.id,
827
824
  mediaConnections: [{mediaAgentAlias: 'alias', mediaAgentGroupId: '1'}],
828
825
  };
829
- cd.setMercuryConnectedStatus(true);
830
-
831
- cd.submitClientEvent({
832
- name: 'client.alert.displayed',
833
- options,
834
- });
835
-
836
- assert.called(getIdentifiersSpy);
837
- assert.calledWith(getIdentifiersSpy, {
838
- meeting: fakeMeeting,
839
- mediaConnections: [{mediaAgentAlias: 'alias', mediaAgentGroupId: '1'}],
840
- webexConferenceIdStr: undefined,
841
- sessionCorrelationId: undefined,
842
- globalMeetingId: undefined,
843
- });
844
- assert.notCalled(generateClientEventErrorPayloadSpy);
845
- assert.calledWith(
846
- prepareDiagnosticEventSpy,
847
- {
848
- canProceed: true,
849
- eventData: {
850
- webClientDomain: 'whatever',
851
- isMercuryConnected: true,
852
- },
853
- identifiers: {
854
- correlationId: 'correlationId',
855
- deviceId: 'deviceUrl',
856
- locusId: 'url',
857
- locusStartTime: 'lastActive',
858
- locusUrl: 'locus/url',
859
- mediaAgentAlias: 'alias',
860
- mediaAgentGroupId: '1',
861
- orgId: 'orgId',
862
- userId: 'userId',
863
- },
864
- loginType: 'login-ci',
865
- name: 'client.alert.displayed',
866
- userType: 'host',
867
- isConvergedArchitectureEnabled: undefined,
868
- webexSubServiceType: undefined,
869
- webClientPreload: undefined,
870
- },
871
- options
872
- );
873
- assert.calledWith(submitToCallDiagnosticsSpy, {
874
- event: {
875
- canProceed: true,
876
- eventData: {
877
- webClientDomain: 'whatever',
878
- isMercuryConnected: true,
879
- },
880
- identifiers: {
881
- correlationId: 'correlationId',
882
- deviceId: 'deviceUrl',
883
- locusId: 'url',
884
- locusStartTime: 'lastActive',
885
- locusUrl: 'locus/url',
886
- mediaAgentAlias: 'alias',
887
- mediaAgentGroupId: '1',
888
- orgId: 'orgId',
889
- userId: 'userId',
890
- },
891
- loginType: 'login-ci',
892
- name: 'client.alert.displayed',
893
- userType: 'host',
894
- isConvergedArchitectureEnabled: undefined,
895
- webexSubServiceType: undefined,
896
- webClientPreload: undefined,
897
- },
898
- eventId: 'my-fake-id',
899
- origin: {
900
- origin: 'fake-origin',
901
- },
902
- originTime: {
903
- sent: 'not_defined_yet',
904
- triggered: now.toISOString(),
905
- },
906
- senderCountryCode: 'UK',
907
- version: 1,
908
- });
909
- assert.calledWith(validatorSpy, {
910
- type: 'ce',
911
- event: {
912
- event: {
913
- canProceed: true,
914
- eventData: {
915
- webClientDomain: 'whatever',
916
- isMercuryConnected: true,
917
- },
918
- identifiers: {
919
- correlationId: 'correlationId',
920
- deviceId: 'deviceUrl',
921
- locusId: 'url',
922
- locusStartTime: 'lastActive',
923
- locusUrl: 'locus/url',
924
- mediaAgentAlias: 'alias',
925
- mediaAgentGroupId: '1',
926
- orgId: 'orgId',
927
- userId: 'userId',
928
- },
929
- loginType: 'login-ci',
930
- name: 'client.alert.displayed',
931
- userType: 'host',
932
- isConvergedArchitectureEnabled: undefined,
933
- webexSubServiceType: undefined,
934
- webClientPreload: undefined,
935
- },
936
- eventId: 'my-fake-id',
937
- origin: {
938
- origin: 'fake-origin',
939
- },
940
- originTime: {
941
- sent: 'not_defined_yet',
942
- triggered: now.toISOString(),
943
- },
944
- senderCountryCode: 'UK',
945
- version: 1,
946
- },
947
- });
948
826
 
949
- const webexLoggerLogCalls = webex.logger.log.getCalls();
950
- assert.deepEqual(webexLoggerLogCalls[1].args, [
951
- 'call-diagnostic-events -> ',
952
- 'CallDiagnosticMetrics: @submitClientEvent. Submit Client Event CA event.',
953
- `name: client.alert.displayed`,
954
- ]);
955
- });
956
-
957
- it('should submit client event correctly when mercury is not connected', () => {
958
- const prepareDiagnosticEventSpy = sinon.spy(cd, 'prepareDiagnosticEvent');
959
- const submitToCallDiagnosticsSpy = sinon.spy(cd, 'submitToCallDiagnostics');
960
- const generateClientEventErrorPayloadSpy = sinon.spy(cd, 'generateClientEventErrorPayload');
961
- const getIdentifiersSpy = sinon.spy(cd, 'getIdentifiers');
962
- const getSubServiceTypeSpy = sinon.spy(cd, 'getSubServiceType');
963
- sinon.stub(cd, 'getOrigin').returns({origin: 'fake-origin'});
964
- const validatorSpy = sinon.spy(cd, 'validator');
965
- const options = {
966
- meetingId: fakeMeeting.id,
967
- mediaConnections: [{mediaAgentAlias: 'alias', mediaAgentGroupId: '1'}],
968
- };
969
- cd.setMercuryConnectedStatus(false);
970
827
  cd.submitClientEvent({
971
828
  name: 'client.alert.displayed',
972
829
  options,
@@ -987,7 +844,6 @@ describe('internal-plugin-metrics', () => {
987
844
  canProceed: true,
988
845
  eventData: {
989
846
  webClientDomain: 'whatever',
990
- isMercuryConnected: false,
991
847
  },
992
848
  identifiers: {
993
849
  correlationId: 'correlationId',
@@ -1014,7 +870,6 @@ describe('internal-plugin-metrics', () => {
1014
870
  canProceed: true,
1015
871
  eventData: {
1016
872
  webClientDomain: 'whatever',
1017
- isMercuryConnected: false,
1018
873
  },
1019
874
  identifiers: {
1020
875
  correlationId: 'correlationId',
@@ -1052,7 +907,6 @@ describe('internal-plugin-metrics', () => {
1052
907
  canProceed: true,
1053
908
  eventData: {
1054
909
  webClientDomain: 'whatever',
1055
- isMercuryConnected: false,
1056
910
  },
1057
911
  identifiers: {
1058
912
  correlationId: 'correlationId',
@@ -1105,7 +959,7 @@ describe('internal-plugin-metrics', () => {
1105
959
  meetingId: fakeMeeting3.id,
1106
960
  mediaConnections: [{mediaAgentAlias: 'alias', mediaAgentGroupId: '1'}],
1107
961
  };
1108
- cd.setMercuryConnectedStatus(true);
962
+
1109
963
  cd.submitClientEvent({
1110
964
  name: 'client.alert.displayed',
1111
965
  options,
@@ -1126,7 +980,6 @@ describe('internal-plugin-metrics', () => {
1126
980
  canProceed: true,
1127
981
  eventData: {
1128
982
  webClientDomain: 'whatever',
1129
- isMercuryConnected: true,
1130
983
  },
1131
984
  identifiers: {
1132
985
  correlationId: 'correlationId3',
@@ -1154,7 +1007,6 @@ describe('internal-plugin-metrics', () => {
1154
1007
  canProceed: true,
1155
1008
  eventData: {
1156
1009
  webClientDomain: 'whatever',
1157
- isMercuryConnected: true,
1158
1010
  },
1159
1011
  identifiers: {
1160
1012
  correlationId: 'correlationId3',
@@ -1193,7 +1045,6 @@ describe('internal-plugin-metrics', () => {
1193
1045
  canProceed: true,
1194
1046
  eventData: {
1195
1047
  webClientDomain: 'whatever',
1196
- isMercuryConnected: true,
1197
1048
  },
1198
1049
  identifiers: {
1199
1050
  correlationId: 'correlationId3',
@@ -1246,7 +1097,7 @@ describe('internal-plugin-metrics', () => {
1246
1097
  meetingId: fakeMeeting4.id,
1247
1098
  mediaConnections: [{mediaAgentAlias: 'alias', mediaAgentGroupId: '1'}],
1248
1099
  };
1249
- cd.setMercuryConnectedStatus(true);
1100
+
1250
1101
  cd.submitClientEvent({
1251
1102
  name: 'client.alert.displayed',
1252
1103
  options,
@@ -1268,7 +1119,6 @@ describe('internal-plugin-metrics', () => {
1268
1119
  canProceed: true,
1269
1120
  eventData: {
1270
1121
  webClientDomain: 'whatever',
1271
- isMercuryConnected: true,
1272
1122
  },
1273
1123
  identifiers: {
1274
1124
  correlationId: 'correlationId',
@@ -1296,7 +1146,6 @@ describe('internal-plugin-metrics', () => {
1296
1146
  canProceed: true,
1297
1147
  eventData: {
1298
1148
  webClientDomain: 'whatever',
1299
- isMercuryConnected: true,
1300
1149
  },
1301
1150
  identifiers: {
1302
1151
  correlationId: 'correlationId',
@@ -1335,7 +1184,6 @@ describe('internal-plugin-metrics', () => {
1335
1184
  canProceed: true,
1336
1185
  eventData: {
1337
1186
  webClientDomain: 'whatever',
1338
- isMercuryConnected: true,
1339
1187
  },
1340
1188
  identifiers: {
1341
1189
  correlationId: 'correlationId',
@@ -1387,7 +1235,7 @@ describe('internal-plugin-metrics', () => {
1387
1235
  meetingId: fakeMeeting5.id,
1388
1236
  mediaConnections: [{mediaAgentAlias: 'alias', mediaAgentGroupId: '1'}],
1389
1237
  };
1390
- cd.setMercuryConnectedStatus(true);
1238
+
1391
1239
  cd.submitClientEvent({
1392
1240
  name: 'client.alert.displayed',
1393
1241
  options,
@@ -1408,7 +1256,6 @@ describe('internal-plugin-metrics', () => {
1408
1256
  canProceed: true,
1409
1257
  eventData: {
1410
1258
  webClientDomain: 'whatever',
1411
- isMercuryConnected: true,
1412
1259
  },
1413
1260
  identifiers: {
1414
1261
  correlationId: 'correlationId5',
@@ -1438,7 +1285,6 @@ describe('internal-plugin-metrics', () => {
1438
1285
  canProceed: true,
1439
1286
  eventData: {
1440
1287
  webClientDomain: 'whatever',
1441
- isMercuryConnected: true,
1442
1288
  },
1443
1289
  identifiers: {
1444
1290
  correlationId: 'correlationId5',
@@ -1479,7 +1325,6 @@ describe('internal-plugin-metrics', () => {
1479
1325
  canProceed: true,
1480
1326
  eventData: {
1481
1327
  webClientDomain: 'whatever',
1482
- isMercuryConnected: true,
1483
1328
  },
1484
1329
  identifiers: {
1485
1330
  correlationId: 'correlationId5',
@@ -1591,7 +1436,7 @@ describe('internal-plugin-metrics', () => {
1591
1436
  globalMeetingId: 'globalMeetingId1',
1592
1437
  sessionCorrelationId: 'sessionCorrelationId1',
1593
1438
  };
1594
- cd.setMercuryConnectedStatus(true);
1439
+
1595
1440
  cd.submitClientEvent({
1596
1441
  name: 'client.alert.displayed',
1597
1442
  options,
@@ -1612,7 +1457,6 @@ describe('internal-plugin-metrics', () => {
1612
1457
  canProceed: true,
1613
1458
  eventData: {
1614
1459
  webClientDomain: 'whatever',
1615
- isMercuryConnected: true,
1616
1460
  },
1617
1461
  identifiers: {
1618
1462
  correlationId: 'correlationId',
@@ -1626,7 +1470,7 @@ describe('internal-plugin-metrics', () => {
1626
1470
  },
1627
1471
  loginType: 'login-ci',
1628
1472
  name: 'client.alert.displayed',
1629
- webClientPreload: undefined,
1473
+ webClientPreload: undefined
1630
1474
  },
1631
1475
  options
1632
1476
  );
@@ -1635,7 +1479,6 @@ describe('internal-plugin-metrics', () => {
1635
1479
  canProceed: true,
1636
1480
  eventData: {
1637
1481
  webClientDomain: 'whatever',
1638
- isMercuryConnected: true,
1639
1482
  },
1640
1483
  identifiers: {
1641
1484
  correlationId: 'correlationId',
@@ -1649,7 +1492,7 @@ describe('internal-plugin-metrics', () => {
1649
1492
  },
1650
1493
  loginType: 'login-ci',
1651
1494
  name: 'client.alert.displayed',
1652
- webClientPreload: undefined,
1495
+ webClientPreload: undefined
1653
1496
  },
1654
1497
  eventId: 'my-fake-id',
1655
1498
  origin: {
@@ -1681,7 +1524,7 @@ describe('internal-plugin-metrics', () => {
1681
1524
  const generateClientEventErrorPayloadSpy = sinon.spy(cd, 'generateClientEventErrorPayload');
1682
1525
  const getIdentifiersSpy = sinon.spy(cd, 'getIdentifiers');
1683
1526
  sinon.stub(cd, 'getOrigin').returns({origin: 'fake-origin'});
1684
- cd.setMercuryConnectedStatus(true);
1527
+
1685
1528
  const options = {
1686
1529
  correlationId: 'correlationId',
1687
1530
  webexConferenceIdStr: 'webexConferenceIdStr1',
@@ -1710,7 +1553,6 @@ describe('internal-plugin-metrics', () => {
1710
1553
  canProceed: true,
1711
1554
  eventData: {
1712
1555
  webClientDomain: 'whatever',
1713
- isMercuryConnected: true,
1714
1556
  },
1715
1557
  identifiers: {
1716
1558
  correlationId: 'correlationId',
@@ -1750,7 +1592,7 @@ describe('internal-plugin-metrics', () => {
1750
1592
  webexConferenceIdStr: 'webexConferenceIdStr1',
1751
1593
  globalMeetingId: 'globalMeetingId1',
1752
1594
  },
1753
- eventData: {webClientDomain: 'whatever', isMercuryConnected: true},
1595
+ eventData: {webClientDomain: 'whatever'},
1754
1596
  loginType: 'login-ci',
1755
1597
  webClientPreload: undefined,
1756
1598
  },
@@ -1768,7 +1610,7 @@ describe('internal-plugin-metrics', () => {
1768
1610
  const generateClientEventErrorPayloadSpy = sinon.spy(cd, 'generateClientEventErrorPayload');
1769
1611
  const getIdentifiersSpy = sinon.spy(cd, 'getIdentifiers');
1770
1612
  sinon.stub(cd, 'getOrigin').returns({origin: 'fake-origin'});
1771
- cd.setMercuryConnectedStatus(true);
1613
+
1772
1614
  const options = {
1773
1615
  correlationId: 'correlationId',
1774
1616
  webexConferenceIdStr: 'webexConferenceIdStr1',
@@ -1799,7 +1641,6 @@ describe('internal-plugin-metrics', () => {
1799
1641
  canProceed: true,
1800
1642
  eventData: {
1801
1643
  webClientDomain: 'whatever',
1802
- isMercuryConnected: true,
1803
1644
  },
1804
1645
  identifiers: {
1805
1646
  correlationId: 'correlationId',
@@ -1841,7 +1682,7 @@ describe('internal-plugin-metrics', () => {
1841
1682
  webexConferenceIdStr: 'webexConferenceIdStr1',
1842
1683
  globalMeetingId: 'globalMeetingId1',
1843
1684
  },
1844
- eventData: {webClientDomain: 'whatever', isMercuryConnected: true},
1685
+ eventData: {webClientDomain: 'whatever'},
1845
1686
  loginType: 'login-ci',
1846
1687
  userNameInput: 'current',
1847
1688
  emailInput: 'current',
@@ -1859,7 +1700,7 @@ describe('internal-plugin-metrics', () => {
1859
1700
  meetingId: fakeMeeting2.id,
1860
1701
  mediaConnections: [{mediaAgentAlias: 'alias', mediaAgentGroupId: '1'}],
1861
1702
  };
1862
- cd.setMercuryConnectedStatus(true);
1703
+
1863
1704
  cd.submitClientEvent({
1864
1705
  name: 'client.alert.displayed',
1865
1706
  options,
@@ -1870,7 +1711,6 @@ describe('internal-plugin-metrics', () => {
1870
1711
  canProceed: true,
1871
1712
  eventData: {
1872
1713
  webClientDomain: 'whatever',
1873
- isMercuryConnected: true,
1874
1714
  },
1875
1715
  identifiers: {
1876
1716
  correlationId: 'correlationId2',
@@ -1912,7 +1752,7 @@ describe('internal-plugin-metrics', () => {
1912
1752
  mediaConnections: [{mediaAgentAlias: 'alias', mediaAgentGroupId: '1'}],
1913
1753
  sessionCorrelationId: 'sessionCorrelationId1',
1914
1754
  };
1915
- cd.setMercuryConnectedStatus(true);
1755
+
1916
1756
  cd.submitClientEvent({
1917
1757
  name: 'client.alert.displayed',
1918
1758
  options,
@@ -1923,7 +1763,6 @@ describe('internal-plugin-metrics', () => {
1923
1763
  canProceed: true,
1924
1764
  eventData: {
1925
1765
  webClientDomain: 'whatever',
1926
- isMercuryConnected: true,
1927
1766
  },
1928
1767
  identifiers: {
1929
1768
  correlationId: 'correlationId2',
@@ -1972,7 +1811,7 @@ describe('internal-plugin-metrics', () => {
1972
1811
  globalMeetingId: 'globalMeetingId1',
1973
1812
  sessionCorrelationId: 'sessionCorrelationId1',
1974
1813
  };
1975
- cd.setMercuryConnectedStatus(true);
1814
+
1976
1815
  cd.submitClientEvent({
1977
1816
  name: 'client.alert.displayed',
1978
1817
  options,
@@ -1985,7 +1824,6 @@ describe('internal-plugin-metrics', () => {
1985
1824
  canProceed: true,
1986
1825
  eventData: {
1987
1826
  webClientDomain: 'whatever',
1988
- isMercuryConnected: true,
1989
1827
  },
1990
1828
  identifiers: {
1991
1829
  correlationId: 'correlationId',
@@ -2008,7 +1846,6 @@ describe('internal-plugin-metrics', () => {
2008
1846
  canProceed: true,
2009
1847
  eventData: {
2010
1848
  webClientDomain: 'whatever',
2011
- isMercuryConnected: true,
2012
1849
  },
2013
1850
  identifiers: {
2014
1851
  correlationId: 'correlationId',
@@ -2052,7 +1889,7 @@ describe('internal-plugin-metrics', () => {
2052
1889
  },
2053
1890
  },
2054
1891
  };
2055
- cd.setMercuryConnectedStatus(true);
1892
+
2056
1893
  cd.submitClientEvent({
2057
1894
  name: 'client.alert.displayed',
2058
1895
  options,
@@ -2063,7 +1900,6 @@ describe('internal-plugin-metrics', () => {
2063
1900
  canProceed: true,
2064
1901
  eventData: {
2065
1902
  webClientDomain: 'whatever',
2066
- isMercuryConnected: true,
2067
1903
  },
2068
1904
  identifiers: {
2069
1905
  correlationId: 'correlationId',
@@ -2132,7 +1968,7 @@ describe('internal-plugin-metrics', () => {
2132
1968
  mediaConnections: [{mediaAgentAlias: 'alias', mediaAgentGroupId: '1'}],
2133
1969
  rawError: new Error('bad times'),
2134
1970
  };
2135
- cd.setMercuryConnectedStatus(true);
1971
+
2136
1972
  cd.submitClientEvent({
2137
1973
  name: 'client.alert.displayed',
2138
1974
  options,
@@ -2143,7 +1979,6 @@ describe('internal-plugin-metrics', () => {
2143
1979
  canProceed: true,
2144
1980
  eventData: {
2145
1981
  webClientDomain: 'whatever',
2146
- isMercuryConnected: true,
2147
1982
  },
2148
1983
  identifiers: {
2149
1984
  correlationId: 'correlationId',
@@ -2212,7 +2047,7 @@ describe('internal-plugin-metrics', () => {
2212
2047
  correlationId: 'correlationId',
2213
2048
  rawError: new Error('bad times'),
2214
2049
  };
2215
- cd.setMercuryConnectedStatus(true);
2050
+
2216
2051
  cd.submitClientEvent({
2217
2052
  name: 'client.alert.displayed',
2218
2053
  options,
@@ -2223,7 +2058,6 @@ describe('internal-plugin-metrics', () => {
2223
2058
  canProceed: true,
2224
2059
  eventData: {
2225
2060
  webClientDomain: 'whatever',
2226
- isMercuryConnected: true,
2227
2061
  },
2228
2062
  identifiers: {
2229
2063
  correlationId: 'correlationId',
@@ -2290,7 +2124,7 @@ describe('internal-plugin-metrics', () => {
2290
2124
  },
2291
2125
  },
2292
2126
  };
2293
- cd.setMercuryConnectedStatus(true);
2127
+
2294
2128
  cd.submitClientEvent({
2295
2129
  name: 'client.alert.displayed',
2296
2130
  options,
@@ -2301,7 +2135,6 @@ describe('internal-plugin-metrics', () => {
2301
2135
  canProceed: true,
2302
2136
  eventData: {
2303
2137
  webClientDomain: 'whatever',
2304
- isMercuryConnected: true,
2305
2138
  },
2306
2139
  identifiers: {
2307
2140
  correlationId: 'correlationId',
@@ -2361,7 +2194,7 @@ describe('internal-plugin-metrics', () => {
2361
2194
  meetingId: fakeMeeting.id,
2362
2195
  mediaConnections: [{mediaAgentAlias: 'alias', mediaAgentGroupId: '1'}],
2363
2196
  };
2364
- cd.setMercuryConnectedStatus(true);
2197
+
2365
2198
  cd.submitClientEvent({
2366
2199
  name: 'client.alert.displayed',
2367
2200
  payload: {
@@ -2382,7 +2215,6 @@ describe('internal-plugin-metrics', () => {
2382
2215
  canProceed: true,
2383
2216
  eventData: {
2384
2217
  webClientDomain: 'whatever',
2385
- isMercuryConnected: true,
2386
2218
  },
2387
2219
  identifiers: {
2388
2220
  correlationId: 'correlationId',
@@ -2742,7 +2574,7 @@ describe('internal-plugin-metrics', () => {
2742
2574
  name: 'other',
2743
2575
  rawErrorMessage: 'bad times',
2744
2576
  errorDescription: 'UnknownError',
2745
- };
2577
+ }
2746
2578
 
2747
2579
  const [res, cached] = cd.generateClientEventErrorPayload(error);
2748
2580
  assert.isFalse(cached);
@@ -3071,10 +2903,7 @@ describe('internal-plugin-metrics', () => {
3071
2903
  });
3072
2904
 
3073
2905
  it('should return unknown error otherwise', () => {
3074
- const [res, cached] = cd.generateClientEventErrorPayload({
3075
- something: 'new',
3076
- message: 'bad times',
3077
- });
2906
+ const [res, cached] = cd.generateClientEventErrorPayload({something: 'new', message: 'bad times'});
3078
2907
  assert.deepEqual(res, {
3079
2908
  category: 'other',
3080
2909
  errorDescription: 'UnknownError',
@@ -3422,7 +3251,7 @@ describe('internal-plugin-metrics', () => {
3422
3251
  meetingId: fakeMeeting.id,
3423
3252
  preLoginId,
3424
3253
  };
3425
- cd.setMercuryConnectedStatus(true);
3254
+
3426
3255
  const triggered = new Date();
3427
3256
  const fetchOptions = await cd.buildClientEventFetchRequestOptions({
3428
3257
  name: 'client.exit.app',
@@ -3438,7 +3267,6 @@ describe('internal-plugin-metrics', () => {
3438
3267
  canProceed: false,
3439
3268
  eventData: {
3440
3269
  webClientDomain: 'whatever',
3441
- isMercuryConnected: true,
3442
3270
  },
3443
3271
  identifiers: {
3444
3272
  correlationId: 'correlationId',
@@ -3745,7 +3573,7 @@ describe('internal-plugin-metrics', () => {
3745
3573
 
3746
3574
  const overrides = {
3747
3575
  correlationId: 'newCorrelationId',
3748
- };
3576
+ }
3749
3577
 
3750
3578
  cd.submitClientEvent({
3751
3579
  name: 'client.alert.displayed',