@webex/internal-plugin-metrics 3.8.1-next.3 → 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.
- package/dist/call-diagnostic/call-diagnostic-metrics.js +2 -17
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
- package/dist/call-diagnostic-events-batcher.js +60 -0
- package/dist/call-diagnostic-events-batcher.js.map +1 -0
- package/dist/metrics.js +1 -1
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +4 -9
- package/package.json +11 -11
- package/src/call-diagnostic/call-diagnostic-metrics.ts +0 -13
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +27 -199
|
@@ -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
|
@@ -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
|
|
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
|
|
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
|
|
39
|
-
"@webex/common-timers": "3.8.1
|
|
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
|
|
42
|
-
"@webex/test-helper-chai": "3.8.1
|
|
43
|
-
"@webex/test-helper-mock-webex": "3.8.1
|
|
44
|
-
"@webex/webex-core": "3.8.1
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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'
|
|
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
|
-
|
|
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'
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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',
|