@webex/internal-plugin-metrics 3.4.0-next.6 → 3.5.0-next.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.
@@ -259,10 +259,12 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
259
259
  preLoginId = options.preLoginId,
260
260
  sessionCorrelationId = options.sessionCorrelationId;
261
261
  var identifiers = {
262
- correlationId: 'unknown'
262
+ correlationId: 'unknown',
263
+ sessionCorrelationId: 'unknown'
263
264
  };
264
265
  if (meeting) {
265
266
  identifiers.correlationId = meeting.correlationId;
267
+ identifiers.sessionCorrelationId = meeting.sessionCorrelationId;
266
268
  }
267
269
  if (sessionCorrelationId) {
268
270
  identifiers.sessionCorrelationId = sessionCorrelationId;
@@ -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","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","meetingCollection","get","meetingInfo","enableConvergedArchitecture","undefined","getSubServiceType","webexScheduled","enableEvent","pmr","WEBEX_SUB_SERVICE_TYPES","PMR","SCHEDULED_MEETING","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","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","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","generateClientEventErrorPayload","rawError","_rawError$error","_rawError$error$body","_rawError$body","_rawError$body2","_rawError$body3","_rawError$body3$reaso","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","createClientEventObjectInMeeting","_ref5","errors","userType","getCurUserType","loginType","callStateForMetrics","isConvergedArchitectureEnabled","webexSubServiceType","createClientEventObjectPreMeeting","_ref6","prepareClientEvent","_ref7","generatedError","submitClientEvent","_ref8","submitToCallDiagnosticsPreLogin","_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} 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\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.meetingCollection.get(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 // if Scheduled, Webinar, 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.meetingCollection.get(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',\n };\n\n if (meeting) {\n identifiers.correlationId = meeting.correlationId;\n }\n\n if (sessionCorrelationId) {\n identifiers.sessionCorrelationId = sessionCorrelationId;\n }\n\n if (correlationId) {\n identifiers.correlationId = correlationId;\n }\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} = 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: 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.meetingCollection.get(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 * Generate error payload for Client Event\n * @param rawError\n */\n generateClientEventErrorPayload(rawError: any) {\n const rawErrorMessage = rawError.message;\n const httpStatusCode = rawError.statusCode;\n if (rawError.name) {\n if (isBrowserMediaErrorName(rawError.name)) {\n return 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)) {\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 return 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) {\n return 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)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NEW_LOCUS_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isMeetingInfoServiceError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isNetworkError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NETWORK_ERROR,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isUnauthorizedError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: AUTHENTICATION_FAILED_CODE,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // otherwise return unkown error\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: UNKNOWN_ERROR,\n serviceErrorCode: UNKNOWN_ERROR,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\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.meetingCollection.get(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 webexSubServiceType: this.getSubServiceType(meeting),\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 };\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 = 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: ${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 * @throws\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\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 * 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","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","meetingCollection","get","meetingInfo","enableConvergedArchitecture","undefined","getSubServiceType","webexScheduled","enableEvent","pmr","WEBEX_SUB_SERVICE_TYPES","PMR","SCHEDULED_MEETING","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","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","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","generateClientEventErrorPayload","rawError","_rawError$error","_rawError$error$body","_rawError$body","_rawError$body2","_rawError$body3","_rawError$body3$reaso","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","createClientEventObjectInMeeting","_ref5","errors","userType","getCurUserType","loginType","callStateForMetrics","isConvergedArchitectureEnabled","webexSubServiceType","createClientEventObjectPreMeeting","_ref6","prepareClientEvent","_ref7","generatedError","submitClientEvent","_ref8","submitToCallDiagnosticsPreLogin","_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} 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\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.meetingCollection.get(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 // if Scheduled, Webinar, 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.meetingCollection.get(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',\n sessionCorrelationId: 'unknown',\n };\n\n if (meeting) {\n identifiers.correlationId = meeting.correlationId;\n identifiers.sessionCorrelationId = meeting.sessionCorrelationId;\n }\n\n if (sessionCorrelationId) {\n identifiers.sessionCorrelationId = sessionCorrelationId;\n }\n\n if (correlationId) {\n identifiers.correlationId = correlationId;\n }\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} = 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: 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.meetingCollection.get(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 * Generate error payload for Client Event\n * @param rawError\n */\n generateClientEventErrorPayload(rawError: any) {\n const rawErrorMessage = rawError.message;\n const httpStatusCode = rawError.statusCode;\n if (rawError.name) {\n if (isBrowserMediaErrorName(rawError.name)) {\n return 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)) {\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 return 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) {\n return 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)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NEW_LOCUS_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isMeetingInfoServiceError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isNetworkError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NETWORK_ERROR,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isUnauthorizedError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: AUTHENTICATION_FAILED_CODE,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // otherwise return unkown error\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: UNKNOWN_ERROR,\n serviceErrorCode: UNKNOWN_ERROR,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\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.meetingCollection.get(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 webexSubServiceType: this.getSubServiceType(meeting),\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 };\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 = 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: ${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 * @throws\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\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 * 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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"}
package/dist/metrics.js CHANGED
@@ -148,7 +148,7 @@ var Metrics = _webexCore.WebexPlugin.extend({
148
148
  }
149
149
  });
150
150
  },
151
- version: "3.4.0-next.6"
151
+ version: "3.5.0-next.1"
152
152
  });
153
153
  var _default = exports.default = Metrics;
154
154
  //# sourceMappingURL=metrics.js.map
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.4.0-next.6",
30
- "@webex/test-helper-mocha": "3.4.0-next.6",
31
- "@webex/test-helper-mock-webex": "3.4.0-next.6",
32
- "@webex/test-helper-test-users": "3.4.0-next.6",
29
+ "@webex/test-helper-chai": "3.5.0-next.1",
30
+ "@webex/test-helper-mocha": "3.5.0-next.1",
31
+ "@webex/test-helper-mock-webex": "3.5.0-next.1",
32
+ "@webex/test-helper-test-users": "3.5.0-next.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.4.0-next.6",
39
- "@webex/common-timers": "3.4.0-next.6",
38
+ "@webex/common": "3.5.0-next.1",
39
+ "@webex/common-timers": "3.5.0-next.1",
40
40
  "@webex/event-dictionary-ts": "^1.0.1546",
41
- "@webex/internal-plugin-metrics": "3.4.0-next.6",
42
- "@webex/test-helper-chai": "3.4.0-next.6",
43
- "@webex/test-helper-mock-webex": "3.4.0-next.6",
44
- "@webex/webex-core": "3.4.0-next.6",
41
+ "@webex/internal-plugin-metrics": "3.5.0-next.1",
42
+ "@webex/test-helper-chai": "3.5.0-next.1",
43
+ "@webex/test-helper-mock-webex": "3.5.0-next.1",
44
+ "@webex/webex-core": "3.5.0-next.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.4.0-next.6"
57
+ "version": "3.5.0-next.1"
58
58
  }
@@ -290,10 +290,12 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
290
290
  } = options;
291
291
  const identifiers: Event['event']['identifiers'] = {
292
292
  correlationId: 'unknown',
293
+ sessionCorrelationId: 'unknown',
293
294
  };
294
295
 
295
296
  if (meeting) {
296
297
  identifiers.correlationId = meeting.correlationId;
298
+ identifiers.sessionCorrelationId = meeting.sessionCorrelationId;
297
299
  }
298
300
 
299
301
  if (sessionCorrelationId) {
@@ -30,6 +30,7 @@ describe('internal-plugin-metrics', () => {
30
30
  const fakeMeeting = {
31
31
  id: '1',
32
32
  correlationId: 'correlationId',
33
+ sessionCorrelationId: undefined,
33
34
  callStateForMetrics: {},
34
35
  environment: 'meeting_evn',
35
36
  locusUrl: 'locus/url',
@@ -354,6 +355,36 @@ describe('internal-plugin-metrics', () => {
354
355
 
355
356
  assert.deepEqual(res, {
356
357
  correlationId: 'correlationId',
358
+ sessionCorrelationId: undefined,
359
+ deviceId: 'deviceUrl',
360
+ locusId: 'url',
361
+ locusStartTime: 'lastActive',
362
+ locusUrl: 'locus/url',
363
+ machineId: 'installationId',
364
+ mediaAgentAlias: 'mediaAgentAlias',
365
+ mediaAgentGroupId: 'mediaAgentGroupId',
366
+ orgId: 'orgId',
367
+ userId: 'userId',
368
+ });
369
+ });
370
+
371
+ it('should build identifiers correctly', () => {
372
+ cd.device = {
373
+ ...cd.device,
374
+ config: {installationId: 'installationId'},
375
+ };
376
+
377
+ const res = cd.getIdentifiers({
378
+ mediaConnections: [
379
+ {mediaAgentAlias: 'mediaAgentAlias', mediaAgentGroupId: 'mediaAgentGroupId'},
380
+ ],
381
+ meeting: fakeMeeting,
382
+ sessionCorrelationId: 'sessionCorrelationId',
383
+ });
384
+
385
+ assert.deepEqual(res, {
386
+ correlationId: 'correlationId',
387
+ sessionCorrelationId: 'sessionCorrelationId',
357
388
  deviceId: 'deviceUrl',
358
389
  locusId: 'url',
359
390
  locusStartTime: 'lastActive',
@@ -419,6 +450,7 @@ describe('internal-plugin-metrics', () => {
419
450
 
420
451
  assert.deepEqual(res, {
421
452
  correlationId: 'correlationId',
453
+ sessionCorrelationId: undefined,
422
454
  webexConferenceIdStr: 'webexConferenceIdStr1',
423
455
  globalMeetingId: 'globalMeetingId1',
424
456
  deviceId: 'deviceUrl',
@@ -452,6 +484,43 @@ describe('internal-plugin-metrics', () => {
452
484
 
453
485
  assert.deepEqual(res, {
454
486
  correlationId: 'correlationId',
487
+ sessionCorrelationId: undefined,
488
+ webexConferenceIdStr: 'webexConferenceIdStr1',
489
+ globalMeetingId: 'globalMeetingId1',
490
+ deviceId: 'deviceUrl',
491
+ locusId: 'url',
492
+ locusStartTime: 'lastActive',
493
+ locusUrl: 'locus/url',
494
+ mediaAgentAlias: 'mediaAgentAlias',
495
+ mediaAgentGroupId: 'mediaAgentGroupId',
496
+ orgId: 'orgId',
497
+ userId: 'userId',
498
+ webexSiteName: 'siteName1',
499
+ });
500
+ });
501
+
502
+ it('should build identifiers correctly with a meeting that has sessionCorrelationId', () => {
503
+ const res = cd.getIdentifiers({
504
+ mediaConnections: [
505
+ {mediaAgentAlias: 'mediaAgentAlias', mediaAgentGroupId: 'mediaAgentGroupId'},
506
+ ],
507
+ webexConferenceIdStr: 'webexConferenceIdStr',
508
+ globalMeetingId: 'globalMeetingId',
509
+ meeting: {
510
+ ...fakeMeeting,
511
+ sessionCorrelationId: 'sessionCorrelationId1',
512
+ meetingInfo: {
513
+ ...fakeMeeting.meetingInfo,
514
+ confIdStr: 'webexConferenceIdStr1',
515
+ meetingId: 'globalMeetingId1',
516
+ siteName: 'siteName1',
517
+ },
518
+ },
519
+ });
520
+
521
+ assert.deepEqual(res, {
522
+ correlationId: 'correlationId',
523
+ sessionCorrelationId: 'sessionCorrelationId1',
455
524
  webexConferenceIdStr: 'webexConferenceIdStr1',
456
525
  globalMeetingId: 'globalMeetingId1',
457
526
  deviceId: 'deviceUrl',
@@ -474,6 +543,7 @@ describe('internal-plugin-metrics', () => {
474
543
 
475
544
  assert.deepEqual(res, {
476
545
  correlationId: 'correlationId',
546
+ sessionCorrelationId: 'unknown',
477
547
  webexConferenceIdStr: 'webexConferenceIdStr1',
478
548
  deviceId: 'deviceUrl',
479
549
  locusUrl: 'locus-url',
@@ -490,6 +560,7 @@ describe('internal-plugin-metrics', () => {
490
560
 
491
561
  assert.deepEqual(res, {
492
562
  correlationId: 'correlationId',
563
+ sessionCorrelationId: 'unknown',
493
564
  globalMeetingId: 'globalMeetingId1',
494
565
  deviceId: 'deviceUrl',
495
566
  locusUrl: 'locus-url',
@@ -505,6 +576,23 @@ describe('internal-plugin-metrics', () => {
505
576
 
506
577
  assert.deepEqual(res, {
507
578
  correlationId: 'correlationId',
579
+ sessionCorrelationId: 'unknown',
580
+ deviceId: 'deviceUrl',
581
+ locusUrl: 'locus-url',
582
+ orgId: 'orgId',
583
+ userId: 'userId',
584
+ });
585
+ });
586
+
587
+ it('should build identifiers correctly given sessionCorrelationId', () => {
588
+ const res = cd.getIdentifiers({
589
+ correlationId: 'correlationId',
590
+ sessionCorrelationId: 'sessionCorrelationId',
591
+ });
592
+
593
+ assert.deepEqual(res, {
594
+ correlationId: 'correlationId',
595
+ sessionCorrelationId: 'sessionCorrelationId',
508
596
  deviceId: 'deviceUrl',
509
597
  locusUrl: 'locus-url',
510
598
  orgId: 'orgId',
@@ -533,6 +621,7 @@ describe('internal-plugin-metrics', () => {
533
621
 
534
622
  assert.deepEqual(res, {
535
623
  correlationId: 'correlationId',
624
+ sessionCorrelationId: 'unknown',
536
625
  locusUrl: 'locus-url',
537
626
  deviceId: 'deviceUrl',
538
627
  orgId: 'orgId',
@@ -623,6 +712,7 @@ describe('internal-plugin-metrics', () => {
623
712
  },
624
713
  identifiers: {
625
714
  correlationId: 'correlationId',
715
+ sessionCorrelationId: undefined,
626
716
  deviceId: 'deviceUrl',
627
717
  locusId: 'url',
628
718
  locusStartTime: 'lastActive',
@@ -648,6 +738,7 @@ describe('internal-plugin-metrics', () => {
648
738
  },
649
739
  identifiers: {
650
740
  correlationId: 'correlationId',
741
+ sessionCorrelationId: undefined,
651
742
  deviceId: 'deviceUrl',
652
743
  locusId: 'url',
653
744
  locusStartTime: 'lastActive',
@@ -684,6 +775,7 @@ describe('internal-plugin-metrics', () => {
684
775
  },
685
776
  identifiers: {
686
777
  correlationId: 'correlationId',
778
+ sessionCorrelationId: undefined,
687
779
  deviceId: 'deviceUrl',
688
780
  locusId: 'url',
689
781
  locusStartTime: 'lastActive',
@@ -960,6 +1052,58 @@ describe('internal-plugin-metrics', () => {
960
1052
  },
961
1053
  identifiers: {
962
1054
  correlationId: 'correlationId2',
1055
+ sessionCorrelationId: undefined,
1056
+ deviceId: 'deviceUrl',
1057
+ locusId: 'url',
1058
+ locusStartTime: 'lastActive',
1059
+ locusUrl: 'locus/url',
1060
+ mediaAgentAlias: 'alias',
1061
+ mediaAgentGroupId: '1',
1062
+ orgId: 'orgId',
1063
+ userId: 'userId',
1064
+ },
1065
+ loginType: 'fakeLoginType',
1066
+ name: 'client.alert.displayed',
1067
+ userType: 'host',
1068
+ isConvergedArchitectureEnabled: undefined,
1069
+ webexSubServiceType: undefined,
1070
+ },
1071
+ eventId: 'my-fake-id',
1072
+ origin: {
1073
+ origin: 'fake-origin',
1074
+ },
1075
+ originTime: {
1076
+ sent: 'not_defined_yet',
1077
+ triggered: now.toISOString(),
1078
+ },
1079
+ senderCountryCode: 'UK',
1080
+ version: 1,
1081
+ });
1082
+ });
1083
+
1084
+ it('should use meeting loginType if present and meetingId provided, with sessionCorrelationId', () => {
1085
+ const submitToCallDiagnosticsSpy = sinon.spy(cd, 'submitToCallDiagnostics');
1086
+ sinon.stub(cd, 'getOrigin').returns({origin: 'fake-origin'});
1087
+ const options = {
1088
+ meetingId: fakeMeeting2.id,
1089
+ mediaConnections: [{mediaAgentAlias: 'alias', mediaAgentGroupId: '1'}],
1090
+ sessionCorrelationId: 'sessionCorrelationId1'
1091
+ };
1092
+
1093
+ cd.submitClientEvent({
1094
+ name: 'client.alert.displayed',
1095
+ options,
1096
+ });
1097
+
1098
+ assert.calledWith(submitToCallDiagnosticsSpy, {
1099
+ event: {
1100
+ canProceed: true,
1101
+ eventData: {
1102
+ webClientDomain: 'whatever',
1103
+ },
1104
+ identifiers: {
1105
+ correlationId: 'correlationId2',
1106
+ sessionCorrelationId: 'sessionCorrelationId1',
963
1107
  deviceId: 'deviceUrl',
964
1108
  locusId: 'url',
965
1109
  locusStartTime: 'lastActive',
@@ -1017,6 +1161,7 @@ describe('internal-plugin-metrics', () => {
1017
1161
  },
1018
1162
  identifiers: {
1019
1163
  correlationId: 'correlationId',
1164
+ sessionCorrelationId: undefined,
1020
1165
  webexConferenceIdStr: 'webexConferenceIdStr1',
1021
1166
  globalMeetingId: 'globalMeetingId1',
1022
1167
  deviceId: 'deviceUrl',
@@ -1095,6 +1240,7 @@ describe('internal-plugin-metrics', () => {
1095
1240
  },
1096
1241
  identifiers: {
1097
1242
  correlationId: 'correlationId',
1243
+ sessionCorrelationId: undefined,
1098
1244
  deviceId: 'deviceUrl',
1099
1245
  locusId: 'url',
1100
1246
  locusStartTime: 'lastActive',
@@ -1170,6 +1316,7 @@ describe('internal-plugin-metrics', () => {
1170
1316
  },
1171
1317
  identifiers: {
1172
1318
  correlationId: 'correlationId',
1319
+ sessionCorrelationId: 'unknown',
1173
1320
  deviceId: 'deviceUrl',
1174
1321
  locusUrl: 'locus-url',
1175
1322
  orgId: 'orgId',
@@ -1243,6 +1390,7 @@ describe('internal-plugin-metrics', () => {
1243
1390
  },
1244
1391
  identifiers: {
1245
1392
  correlationId: 'correlationId',
1393
+ sessionCorrelationId: 'unknown',
1246
1394
  deviceId: 'deviceUrl',
1247
1395
  locusUrl: 'locus-url',
1248
1396
  orgId: 'orgId',
@@ -1322,6 +1470,7 @@ describe('internal-plugin-metrics', () => {
1322
1470
  },
1323
1471
  identifiers: {
1324
1472
  correlationId: 'correlationId',
1473
+ sessionCorrelationId: undefined,
1325
1474
  deviceId: 'deviceUrl',
1326
1475
  locusId: 'url',
1327
1476
  locusStartTime: 'lastActive',
@@ -1454,6 +1603,7 @@ describe('internal-plugin-metrics', () => {
1454
1603
  canProceed: true,
1455
1604
  identifiers: {
1456
1605
  correlationId: 'correlationId',
1606
+ sessionCorrelationId: undefined,
1457
1607
  webexConferenceIdStr: 'webexConferenceIdStr1',
1458
1608
  globalMeetingId: 'globalMeetingId1',
1459
1609
  userId: 'userId',
@@ -1493,6 +1643,7 @@ describe('internal-plugin-metrics', () => {
1493
1643
  canProceed: true,
1494
1644
  identifiers: {
1495
1645
  correlationId: 'correlationId',
1646
+ sessionCorrelationId: undefined,
1496
1647
  webexConferenceIdStr: 'webexConferenceIdStr1',
1497
1648
  globalMeetingId: 'globalMeetingId1',
1498
1649
  userId: 'userId',
@@ -1538,6 +1689,7 @@ describe('internal-plugin-metrics', () => {
1538
1689
  locusUrl: 'locus/url',
1539
1690
  locusId: 'url',
1540
1691
  locusStartTime: 'lastActive',
1692
+ sessionCorrelationId: undefined,
1541
1693
  },
1542
1694
  eventData: {webClientDomain: 'whatever'},
1543
1695
  intervals: [{}],
@@ -2291,6 +2443,7 @@ describe('internal-plugin-metrics', () => {
2291
2443
  locusUrl: 'locus/url',
2292
2444
  orgId: 'orgId',
2293
2445
  userId: 'userId',
2446
+ sessionCorrelationId: undefined,
2294
2447
  },
2295
2448
  loginType: 'login-ci',
2296
2449
  name: 'client.exit.app',