@webex/internal-plugin-metrics 3.0.0-beta.244 → 3.0.0-beta.246
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-batcher.js +2 -3
- package/dist/call-diagnostic/call-diagnostic-metrics-batcher.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.js +12 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
- package/dist/call-diagnostic/config.js +11 -1
- package/dist/call-diagnostic/config.js.map +1 -1
- package/dist/metrics.js +1 -1
- package/dist/new-metrics.js +13 -3
- package/dist/new-metrics.js.map +1 -1
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +6 -0
- package/dist/types/call-diagnostic/config.d.ts +1 -0
- package/dist/types/new-metrics.d.ts +6 -0
- package/package.json +8 -8
- package/src/call-diagnostic/call-diagnostic-metrics-batcher.ts +4 -2
- package/src/call-diagnostic/call-diagnostic-metrics.ts +12 -0
- package/src/call-diagnostic/config.ts +10 -0
- package/src/new-metrics.ts +11 -8
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +1 -5
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +27 -0
- package/test/unit/spec/new-metrics.ts +2 -2
|
@@ -7,7 +7,6 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
10
|
-
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
11
10
|
var _uniqueId2 = _interopRequireDefault(require("lodash/uniqueId"));
|
|
12
11
|
var _batcher = _interopRequireDefault(require("../batcher"));
|
|
13
12
|
var _callDiagnosticMetrics = require("./call-diagnostic-metrics.util");
|
|
@@ -44,7 +43,7 @@ var CallDiagnosticEventsBatcher = _batcher.default.extend({
|
|
|
44
43
|
submitHttpRequest: function submitHttpRequest(payload) {
|
|
45
44
|
var _this = this;
|
|
46
45
|
var batchId = (0, _uniqueId2.default)('call-diagnostic-metrics-batch-');
|
|
47
|
-
this.webex.logger.log(_config.CALL_DIAGNOSTIC_LOG_IDENTIFIER, "CallDiagnosticEventsBatcher: @submitHttpRequest#".concat(batchId, ". Sending the request:"),
|
|
46
|
+
this.webex.logger.log(_config.CALL_DIAGNOSTIC_LOG_IDENTIFIER, "CallDiagnosticEventsBatcher: @submitHttpRequest#".concat(batchId, ". Sending the request:"), 'payload:', payload);
|
|
48
47
|
return this.webex.request({
|
|
49
48
|
method: 'POST',
|
|
50
49
|
service: 'metrics',
|
|
@@ -53,7 +52,7 @@ var CallDiagnosticEventsBatcher = _batcher.default.extend({
|
|
|
53
52
|
metrics: payload
|
|
54
53
|
}
|
|
55
54
|
}).then(function (res) {
|
|
56
|
-
_this.webex.logger.log(_config.CALL_DIAGNOSTIC_LOG_IDENTIFIER, "CallDiagnosticEventsBatcher: @submitHttpRequest#".concat(batchId, ". Request successful:"), "response:
|
|
55
|
+
_this.webex.logger.log(_config.CALL_DIAGNOSTIC_LOG_IDENTIFIER, "CallDiagnosticEventsBatcher: @submitHttpRequest#".concat(batchId, ". Request successful:"), "response:", res);
|
|
57
56
|
return res;
|
|
58
57
|
}).catch(function (err) {
|
|
59
58
|
_this.webex.logger.error(_config.CALL_DIAGNOSTIC_LOG_IDENTIFIER, "CallDiagnosticEventsBatcher: @submitHttpRequest#".concat(batchId, ". Request failed:"), "error: ".concat((0, _utils.generateCommonErrorMetadata)(err)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CallDiagnosticEventsBatcher","Batcher","extend","namespace","prepareItem","item","resolve","prepareDiagnosticMetricItem","webex","prepareRequest","queue","forEach","eventPayload","originTime","sent","Date","toISOString","submitHttpRequest","payload","batchId","logger","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","request","method","service","resource","body","metrics","then","res","catch","err","error","generateCommonErrorMetadata","reject"],"sources":["call-diagnostic-metrics-batcher.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\nimport {uniqueId} from 'lodash';\nimport Batcher from '../batcher';\nimport {prepareDiagnosticMetricItem} from './call-diagnostic-metrics.util';\nimport {CALL_DIAGNOSTIC_LOG_IDENTIFIER} from './config';\nimport {generateCommonErrorMetadata} from '../utils';\n\nconst CallDiagnosticEventsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n /**\n * Prepare item\n * @param item\n * @returns\n */\n prepareItem(item) {\n return Promise.resolve(prepareDiagnosticMetricItem(this.webex, item));\n },\n\n /**\n * Prepare request, add time sensitive date etc.\n * @param queue\n * @returns\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 /**\n *\n * @param payload\n * @returns\n */\n submitHttpRequest(payload) {\n const batchId = uniqueId('call-diagnostic-metrics-batch-');\n this.webex.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Sending the request:`,\n
|
|
1
|
+
{"version":3,"names":["CallDiagnosticEventsBatcher","Batcher","extend","namespace","prepareItem","item","resolve","prepareDiagnosticMetricItem","webex","prepareRequest","queue","forEach","eventPayload","originTime","sent","Date","toISOString","submitHttpRequest","payload","batchId","logger","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","request","method","service","resource","body","metrics","then","res","catch","err","error","generateCommonErrorMetadata","reject"],"sources":["call-diagnostic-metrics-batcher.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\nimport {uniqueId} from 'lodash';\nimport Batcher from '../batcher';\nimport {prepareDiagnosticMetricItem} from './call-diagnostic-metrics.util';\nimport {CALL_DIAGNOSTIC_LOG_IDENTIFIER} from './config';\nimport {generateCommonErrorMetadata} from '../utils';\n\nconst CallDiagnosticEventsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n /**\n * Prepare item\n * @param item\n * @returns\n */\n prepareItem(item) {\n return Promise.resolve(prepareDiagnosticMetricItem(this.webex, item));\n },\n\n /**\n * Prepare request, add time sensitive date etc.\n * @param queue\n * @returns\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 /**\n *\n * @param payload\n * @returns\n */\n submitHttpRequest(payload) {\n const batchId = uniqueId('call-diagnostic-metrics-batch-');\n this.webex.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Sending the request:`,\n 'payload:',\n payload\n );\n\n return this.webex\n .request({\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: payload,\n },\n })\n .then((res) => {\n this.webex.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request successful:`,\n `response:`,\n res\n );\n\n return res;\n })\n .catch((err) => {\n this.webex.logger.error(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request failed:`,\n `error: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n },\n});\n\nexport default CallDiagnosticEventsBatcher;\n"],"mappings":";;;;;;;;;;AAIA;AACA;AACA;AACA;AAEA,IAAMA,2BAA2B,GAAGC,gBAAO,CAACC,MAAM,CAAC;EACjDC,SAAS,EAAE,SAAS;EAEpB;AACF;AACA;AACA;AACA;EACEC,WAAW,uBAACC,IAAI,EAAE;IAChB,OAAO,iBAAQC,OAAO,CAAC,IAAAC,kDAA2B,EAAC,IAAI,CAACC,KAAK,EAAEH,IAAI,CAAC,CAAC;EACvE,CAAC;EAED;AACF;AACA;AACA;AACA;EACEI,cAAc,0BAACC,KAAK,EAAE;IACpB;IACAA,KAAK,CAACC,OAAO,CAAC,UAACN,IAAI,EAAK;MACtBA,IAAI,CAACO,YAAY,CAACC,UAAU,GAAGR,IAAI,CAACO,YAAY,CAACC,UAAU,IAAI,CAAC,CAAC;MACjER,IAAI,CAACO,YAAY,CAACC,UAAU,CAACC,IAAI,GAAG,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE;IAC9D,CAAC,CAAC;IAEF,OAAO,iBAAQV,OAAO,CAACI,KAAK,CAAC;EAC/B,CAAC;EAED;AACF;AACA;AACA;AACA;EACEO,iBAAiB,6BAACC,OAAO,EAAE;IAAA;IACzB,IAAMC,OAAO,GAAG,wBAAS,gCAAgC,CAAC;IAC1D,IAAI,CAACX,KAAK,CAACY,MAAM,CAACC,GAAG,CACnBC,sCAA8B,4DACqBH,OAAO,6BAC1D,UAAU,EACVD,OAAO,CACR;IAED,OAAO,IAAI,CAACV,KAAK,CACde,OAAO,CAAC;MACPC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE,SAAS;MAClBC,QAAQ,EAAE,eAAe;MACzBC,IAAI,EAAE;QACJC,OAAO,EAAEV;MACX;IACF,CAAC,CAAC,CACDW,IAAI,CAAC,UAACC,GAAG,EAAK;MACb,KAAI,CAACtB,KAAK,CAACY,MAAM,CAACC,GAAG,CACnBC,sCAA8B,4DACqBH,OAAO,yCAE1DW,GAAG,CACJ;MAED,OAAOA,GAAG;IACZ,CAAC,CAAC,CACDC,KAAK,CAAC,UAACC,GAAG,EAAK;MACd,KAAI,CAACxB,KAAK,CAACY,MAAM,CAACa,KAAK,CACrBX,sCAA8B,4DACqBH,OAAO,yCAChD,IAAAe,kCAA2B,EAACF,GAAG,CAAC,EAC3C;MAED,OAAO,iBAAQG,MAAM,CAACH,GAAG,CAAC;IAC5B,CAAC,CAAC;EACN;AACF,CAAC,CAAC;AAAC,eAEYhC,2BAA2B;AAAA"}
|
|
@@ -697,6 +697,18 @@ var CallDiagnosticMetrics = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
697
697
|
}
|
|
698
698
|
return buildClientEventFetchRequestOptions;
|
|
699
699
|
}()
|
|
700
|
+
/**
|
|
701
|
+
* Returns true if the specified serviceErrorCode maps to an expected error.
|
|
702
|
+
* @param {number} serviceErrorCode the service error code
|
|
703
|
+
* @returns {boolean}
|
|
704
|
+
*/
|
|
705
|
+
}, {
|
|
706
|
+
key: "isServiceErrorExpected",
|
|
707
|
+
value: function isServiceErrorExpected(serviceErrorCode) {
|
|
708
|
+
var clientErrorCode = _config2.SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];
|
|
709
|
+
var clientErrorPayload = _config2.CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];
|
|
710
|
+
return (clientErrorPayload === null || clientErrorPayload === void 0 ? void 0 : clientErrorPayload.category) === 'expected';
|
|
711
|
+
}
|
|
700
712
|
}]);
|
|
701
713
|
return CallDiagnosticMetrics;
|
|
702
714
|
}(_webexCore.StatelessWebexPlugin);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BrowserDetection","getOSVersion","getBrowserName","getBrowserVersion","CallDiagnosticMetrics","args","event","preLoginId","diagnosticEvent","prepareDiagnosticMetricItem","webex","eventPayload","type","originTime","sent","Date","toISOString","logger","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","internal","newMetrics","postPreLoginMetric","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","parent","canAuthorize","credentials","isUnverifiedGuest","meetingId","meeting","meetings","meetingCollection","get","meetingInfo","enableConvergedArchitecture","undefined","options","defaultClientType","config","metrics","clientType","defaultSubClientType","subClientType","providedClientVersion","clientVersion","defaultSDKClientVersion","CLIENT_NAME","version","versionMetadata","extractVersionMetadata","origin","name","networkType","userAgent","userAgentToString","clientName","webexVersion","clientInfo","localNetworkPrefix","anonymizeIPAddress","geoHintInfo","clientAddress","osVersion","os","getOSNameInternal","browser","browserVersion","environment","newEnvironment","clientLaunchMethod","Error","mediaConnections","correlationId","identifiers","device","userId","deviceId","url","orgId","locusUrl","services","locusInfo","fullState","locusId","split","pop","locusStartTime","lastActive","mediaAgentAlias","mediaAgentGroupId","eventData","getOrigin","eventId","uuid","v4","triggered","senderCountryCode","countryCode","clearEmptyKeysRecursively","payload","console","warn","submitClientMetrics","CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND","fields","getIdentifiers","clientEventObject","canProceed","webClientDomain","window","location","hostname","intervals","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","prepareDiagnosticEvent","submitToCallDiagnostics","clientErrorCode","serviceErrorCode","serviceErrorName","error","partialParsedError","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","fatal","shownToUser","category","errorCode","errorData","errorName","rawError","isBrowserMediaErrorName","getErrorPayloadForClientErrorCode","BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP","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","UNKNOWN_ERROR","errors","userType","getCurUserType","loginType","getCurLoginType","isConvergedArchitectureEnabled","getIsConvergedArchitectureEnabled","generateCommonErrorMetadata","generatedError","generateClientEventErrorPayload","push","createClientEventObjectInMeeting","createClientEventObjectPreMeeting","prepareClientEvent","submitToCallDiagnosticsPreLogin","finalEvent","request","clientEvent","method","service","resource","headers","authorization","prepareFetchOptions","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 {getOSNameInternal} from '@webex/internal-plugin-metrics';\nimport {BrowserDetection} from '@webex/common';\nimport uuid from 'uuid';\nimport {merge} from 'lodash';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {\n anonymizeIPAddress,\n clearEmptyKeysRecursively,\n isLocusServiceErrorCode,\n prepareDiagnosticMetricItem,\n userAgentToString,\n extractVersionMetadata,\n isMeetingInfoServiceError,\n isBrowserMediaErrorName,\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} from '../metrics.types';\nimport CallDiagnosticEventsBatcher from './call-diagnostic-metrics-batcher';\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} from './config';\nimport {generateCommonErrorMetadata} from '../utils';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\ntype GetOriginOptions = {\n clientType: ClientType;\n subClientType: SubClientType;\n networkType?: NetworkType;\n clientLaunchMethod?: ClientLaunchMethodType;\n environment?: EnvironmentType;\n newEnvironment?: NewEnvironmentType;\n};\n\ntype GetIdentifiersOptions = {\n meeting?: any;\n mediaConnections?: any[];\n correlationId?: 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 private logger: any; // to avoid adding @ts-ignore everywhere\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 }\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 * 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 (\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 localNetworkPrefix:\n // @ts-ignore\n anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress) || 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 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 {meeting, mediaConnections, correlationId} = options;\n const identifiers: Event['event']['identifiers'] = {correlationId: 'unknown'};\n\n if (meeting) {\n identifiers.correlationId = meeting.correlationId;\n }\n\n if (correlationId) {\n identifiers.correlationId = correlationId;\n }\n // @ts-ignore\n if (this.webex.internal) {\n // @ts-ignore\n const {device} = this.webex.internal;\n identifiers.userId = device.userId;\n identifiers.deviceId = device.url;\n identifiers.orgId = device.orgId;\n // @ts-ignore\n identifiers.locusUrl = this.webex.internal.services.get('locus');\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 (mediaConnections) {\n identifiers.mediaAgentAlias = mediaConnections?.[0]?.mediaAgentAlias;\n identifiers.mediaAgentGroupId = mediaConnections?.[0]?.mediaAgentGroupId;\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} = 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 });\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 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.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 * @returns\n */\n public getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n serviceErrorName,\n }: {\n clientErrorCode: number;\n serviceErrorCode: any;\n serviceErrorName?: any;\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 partialParsedError\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 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 });\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({clientErrorCode, serviceErrorCode});\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 });\n }\n }\n\n if (isMeetingInfoServiceError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n serviceErrorCode,\n });\n }\n\n // otherwise return unkown error\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: UNKNOWN_ERROR,\n serviceErrorCode: UNKNOWN_ERROR,\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 this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @createClientEventObjectInMeeting. Creating in meeting event object.',\n `name: ${name}`\n );\n const {meetingId, mediaConnections} = 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 });\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: this.getCurLoginType(),\n isConvergedArchitectureEnabled: this.getIsConvergedArchitectureEnabled({\n meetingId,\n }),\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 this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @createClientEventObjectPreMeeting. Creating pre meeting event object.',\n `name: ${name}`\n );\n const {correlationId} = options;\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n correlationId,\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 this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @prepareClientEvent. Error detected, attempting to map and attach it to the event...',\n `name: ${name}`,\n `rawError: ${generateCommonErrorMetadata(rawError)}`\n );\n\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 `payload: ${JSON.stringify(payload)}`,\n `options: ${JSON.stringify(options)}`\n );\n const diagnosticEvent = this.prepareClientEvent({name, payload, options});\n\n if (options?.preLoginId) {\n return this.submitToCallDiagnosticsPreLogin(diagnosticEvent, options?.preLoginId);\n }\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 this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitToCallDiagnostics. Preparing to send the request',\n `finalEvent: ${JSON.stringify(finalEvent)}`\n );\n\n return this.callDiagnosticEventsBatcher.request(finalEvent);\n }\n\n /**\n * Pre login events are not batched. We make the request directly.\n * @param event\n * @param preLoginId\n * @returns\n */\n public submitToCallDiagnosticsPreLogin = (event: Event, preLoginId?: string): Promise<any> => {\n // build metrics-a event type\n // @ts-ignore\n const diagnosticEvent = prepareDiagnosticMetricItem(this.webex, {\n eventPayload: event,\n type: ['diagnostic-event'],\n });\n\n // append sent timestamp\n diagnosticEvent.eventPayload.originTime.sent = new Date().toISOString();\n\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticMetrics: @submitToCallDiagnosticsPreLogin. Sending the request:`,\n `diagnosticEvent: ${JSON.stringify(diagnosticEvent)}`\n );\n\n // @ts-ignore\n return this.webex.internal.newMetrics.postPreLoginMetric(diagnosticEvent, preLoginId);\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 `payload: ${JSON.stringify(payload)}`,\n `options: ${JSON.stringify(options)}`\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 };\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["BrowserDetection","getOSVersion","getBrowserName","getBrowserVersion","CallDiagnosticMetrics","args","event","preLoginId","diagnosticEvent","prepareDiagnosticMetricItem","webex","eventPayload","type","originTime","sent","Date","toISOString","logger","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","internal","newMetrics","postPreLoginMetric","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","parent","canAuthorize","credentials","isUnverifiedGuest","meetingId","meeting","meetings","meetingCollection","get","meetingInfo","enableConvergedArchitecture","undefined","options","defaultClientType","config","metrics","clientType","defaultSubClientType","subClientType","providedClientVersion","clientVersion","defaultSDKClientVersion","CLIENT_NAME","version","versionMetadata","extractVersionMetadata","origin","name","networkType","userAgent","userAgentToString","clientName","webexVersion","clientInfo","localNetworkPrefix","anonymizeIPAddress","geoHintInfo","clientAddress","osVersion","os","getOSNameInternal","browser","browserVersion","environment","newEnvironment","clientLaunchMethod","Error","mediaConnections","correlationId","identifiers","device","userId","deviceId","url","orgId","locusUrl","services","locusInfo","fullState","locusId","split","pop","locusStartTime","lastActive","mediaAgentAlias","mediaAgentGroupId","eventData","getOrigin","eventId","uuid","v4","triggered","senderCountryCode","countryCode","clearEmptyKeysRecursively","payload","console","warn","submitClientMetrics","CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND","fields","getIdentifiers","clientEventObject","canProceed","webClientDomain","window","location","hostname","intervals","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","prepareDiagnosticEvent","submitToCallDiagnostics","clientErrorCode","serviceErrorCode","serviceErrorName","error","partialParsedError","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","fatal","shownToUser","category","errorCode","errorData","errorName","rawError","isBrowserMediaErrorName","getErrorPayloadForClientErrorCode","BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP","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","UNKNOWN_ERROR","errors","userType","getCurUserType","loginType","getCurLoginType","isConvergedArchitectureEnabled","getIsConvergedArchitectureEnabled","generateCommonErrorMetadata","generatedError","generateClientEventErrorPayload","push","createClientEventObjectInMeeting","createClientEventObjectPreMeeting","prepareClientEvent","submitToCallDiagnosticsPreLogin","finalEvent","request","clientEvent","method","service","resource","headers","authorization","prepareFetchOptions","clientErrorPayload","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 {getOSNameInternal} from '@webex/internal-plugin-metrics';\nimport {BrowserDetection} from '@webex/common';\nimport uuid from 'uuid';\nimport {merge} from 'lodash';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {\n anonymizeIPAddress,\n clearEmptyKeysRecursively,\n isLocusServiceErrorCode,\n prepareDiagnosticMetricItem,\n userAgentToString,\n extractVersionMetadata,\n isMeetingInfoServiceError,\n isBrowserMediaErrorName,\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} from '../metrics.types';\nimport CallDiagnosticEventsBatcher from './call-diagnostic-metrics-batcher';\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} from './config';\nimport {generateCommonErrorMetadata} from '../utils';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\ntype GetOriginOptions = {\n clientType: ClientType;\n subClientType: SubClientType;\n networkType?: NetworkType;\n clientLaunchMethod?: ClientLaunchMethodType;\n environment?: EnvironmentType;\n newEnvironment?: NewEnvironmentType;\n};\n\ntype GetIdentifiersOptions = {\n meeting?: any;\n mediaConnections?: any[];\n correlationId?: 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 private logger: any; // to avoid adding @ts-ignore everywhere\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 }\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 * 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 (\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 localNetworkPrefix:\n // @ts-ignore\n anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress) || 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 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 {meeting, mediaConnections, correlationId} = options;\n const identifiers: Event['event']['identifiers'] = {correlationId: 'unknown'};\n\n if (meeting) {\n identifiers.correlationId = meeting.correlationId;\n }\n\n if (correlationId) {\n identifiers.correlationId = correlationId;\n }\n // @ts-ignore\n if (this.webex.internal) {\n // @ts-ignore\n const {device} = this.webex.internal;\n identifiers.userId = device.userId;\n identifiers.deviceId = device.url;\n identifiers.orgId = device.orgId;\n // @ts-ignore\n identifiers.locusUrl = this.webex.internal.services.get('locus');\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 (mediaConnections) {\n identifiers.mediaAgentAlias = mediaConnections?.[0]?.mediaAgentAlias;\n identifiers.mediaAgentGroupId = mediaConnections?.[0]?.mediaAgentGroupId;\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} = 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 });\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 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.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 * @returns\n */\n public getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n serviceErrorName,\n }: {\n clientErrorCode: number;\n serviceErrorCode: any;\n serviceErrorName?: any;\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 partialParsedError\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 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 });\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({clientErrorCode, serviceErrorCode});\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 });\n }\n }\n\n if (isMeetingInfoServiceError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n serviceErrorCode,\n });\n }\n\n // otherwise return unkown error\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: UNKNOWN_ERROR,\n serviceErrorCode: UNKNOWN_ERROR,\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 this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @createClientEventObjectInMeeting. Creating in meeting event object.',\n `name: ${name}`\n );\n const {meetingId, mediaConnections} = 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 });\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: this.getCurLoginType(),\n isConvergedArchitectureEnabled: this.getIsConvergedArchitectureEnabled({\n meetingId,\n }),\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 this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @createClientEventObjectPreMeeting. Creating pre meeting event object.',\n `name: ${name}`\n );\n const {correlationId} = options;\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n correlationId,\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 this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @prepareClientEvent. Error detected, attempting to map and attach it to the event...',\n `name: ${name}`,\n `rawError: ${generateCommonErrorMetadata(rawError)}`\n );\n\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 `payload: ${JSON.stringify(payload)}`,\n `options: ${JSON.stringify(options)}`\n );\n const diagnosticEvent = this.prepareClientEvent({name, payload, options});\n\n if (options?.preLoginId) {\n return this.submitToCallDiagnosticsPreLogin(diagnosticEvent, options?.preLoginId);\n }\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 this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitToCallDiagnostics. Preparing to send the request',\n `finalEvent: ${JSON.stringify(finalEvent)}`\n );\n\n return this.callDiagnosticEventsBatcher.request(finalEvent);\n }\n\n /**\n * Pre login events are not batched. We make the request directly.\n * @param event\n * @param preLoginId\n * @returns\n */\n public submitToCallDiagnosticsPreLogin = (event: Event, preLoginId?: string): Promise<any> => {\n // build metrics-a event type\n // @ts-ignore\n const diagnosticEvent = prepareDiagnosticMetricItem(this.webex, {\n eventPayload: event,\n type: ['diagnostic-event'],\n });\n\n // append sent timestamp\n diagnosticEvent.eventPayload.originTime.sent = new Date().toISOString();\n\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticMetrics: @submitToCallDiagnosticsPreLogin. Sending the request:`,\n `diagnosticEvent: ${JSON.stringify(diagnosticEvent)}`\n );\n\n // @ts-ignore\n return this.webex.internal.newMetrics.postPreLoginMetric(diagnosticEvent, preLoginId);\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 `payload: ${JSON.stringify(payload)}`,\n `options: ${JSON.stringify(options)}`\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 };\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"],"mappings":"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"}
|
|
@@ -100,7 +100,8 @@ var ERROR_DESCRIPTIONS = {
|
|
|
100
100
|
UNKNOWN_ERROR: 'UnknownError',
|
|
101
101
|
NO_MEDIA_FOUND: 'NoMediaFound',
|
|
102
102
|
STREAM_ERROR_NO_MEDIA: 'StreamErrorNoMedia',
|
|
103
|
-
CAMERA_PERMISSION_DENIED: 'CameraPermissionDenied'
|
|
103
|
+
CAMERA_PERMISSION_DENIED: 'CameraPermissionDenied',
|
|
104
|
+
FRAUD_DETECTION: 'FraudDetection'
|
|
104
105
|
};
|
|
105
106
|
var SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP = {
|
|
106
107
|
// ---- Webex API ----
|
|
@@ -192,6 +193,8 @@ var SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP = {
|
|
|
192
193
|
2423016: 4005,
|
|
193
194
|
2423017: 4005,
|
|
194
195
|
2423018: 4005,
|
|
196
|
+
// LOCUS_OWNER_CONCURRENT_ACTIVE_MEETING_LIMIT_EXCEEDED
|
|
197
|
+
2423012: 12000,
|
|
195
198
|
// LOCUS_REQUIRES_MODERATOR_ROLE
|
|
196
199
|
2423007: 4006,
|
|
197
200
|
// LOCUS_JOIN_RESTRICTED_USER_NOT_IN_ROOM
|
|
@@ -574,6 +577,13 @@ var CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD = {
|
|
|
574
577
|
errorDescription: ERROR_DESCRIPTIONS.UNKNOWN_ERROR,
|
|
575
578
|
category: 'other',
|
|
576
579
|
fatal: true
|
|
580
|
+
},
|
|
581
|
+
12000: {
|
|
582
|
+
errorDescription: ERROR_DESCRIPTIONS.FRAUD_DETECTION,
|
|
583
|
+
category: 'expected',
|
|
584
|
+
fatal: true,
|
|
585
|
+
name: 'locus.response',
|
|
586
|
+
shownToUser: true
|
|
577
587
|
}
|
|
578
588
|
};
|
|
579
589
|
exports.CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CALL_DIAGNOSTIC_LOG_IDENTIFIER","NEW_LOCUS_ERROR_CLIENT_CODE","MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE","UNKNOWN_ERROR","ICE_FAILURE_CLIENT_CODE","WBX_APP_API_URL","BROWSER_MEDIA_ERROR_NAMES","PERMISSION_DENIED_ERROR","NOT_ALLOWED_ERROR","NOT_READABLE_ERROR","ABORT_ERROR","NOT_FOUND_ERROR","OVERCONSTRAINED_ERROR","SECURITY_ERROR","TYPE_ERROR","BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP","ERROR_DESCRIPTIONS","UNKNOWN_CALL_FAILURE","LOCUS_RATE_LIMITED_INCOMING","LOCUS_RATE_LIMITED_OUTGOING","LOCUS_UNAVAILABLE","LOCUS_CONFLICT","TIMEOUT","LOCUS_INVALID_SEQUENCE_HASH","UPDATE_MEDIA_FAILED","FAILED_TO_CONNECT_MEDIA","MEDIA_ENGINE_LOST","MEDIA_CONNECTION_LOST","ICE_FAILURE","MEDIA_ENGINE_HANG","ICE_SERVER_REJECTED","CALL_FULL","ROOM_TOO_LARGE","GUEST_ALREADY_ADDED","LOCUS_USER_NOT_AUTHORISED","CLOUDBERRY_UNAVAILABLE","ROOM_TOO_LARGE_FREE_ACCOUNT","MEETING_INACTIVE","MEETING_LOCKED","MEETING_TERMINATING","MODERATOR_PIN_OR_GUEST_REQUIRED","MODERATOR_PIN_OR_GUEST_PIN_REQUIRED","MODERATOR_REQUIRED","USER_NOT_MEMBER_OF_ROOM","NEW_LOCUS_ERROR","NETWORK_UNAVAILABLE","MEETING_UNAVAILABLE","MEETING_ID_INVALID","MEETING_SITE_INVALID","LOCUS_INVALID_JOINTIME","LOBBY_EXPIRED","MEDIA_CONNECTION_LOST_PAIRED","PHONE_NUMBER_NOT_A_NUMBER","PHONE_NUMBER_TOO_LONG","INVALID_DIALABLE_KEY","ONE_ON_ONE_TO_SELF_NOT_ALLOWED","REMOVED_PARTICIPANT","MEETING_LINK_NOT_FOUND","PHONE_NUMBER_TOO_SHORT_AFTER_IDD","INVALID_INVITEE_ADDRESS","PMR_USER_ACCOUNT_LOCKED_OUT","GUEST_FORBIDDEN","PMR_ACCOUNT_SUSPENDED","EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE","CONVERSATION_NOT_FOUND","SIP_CALLEE_BUSY","SIP_CALLEE_NOT_FOUND","START_RECORDING_FAILED","RECORDING_IN_PROGRESS_FAILED","MEETING_INFO_LOOKUP_ERROR","CALL_FULL_ADD_GUEST","REQUIRE_WEBEX_LOGIN","USER_NOT_ALLOWED_ACCESS_MEETING","USER_NEEDS_ACTIVATION","SIGN_UP_INVALID_EMAIL","NO_MEDIA_FOUND","STREAM_ERROR_NO_MEDIA","CAMERA_PERMISSION_DENIED","SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","errorDescription","category","fatal","name","CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND"],"sources":["config.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\n// Most client error codes are mapped based on\n// https://sqbu-github.cisco.com/WebExSquared/event-dictionary/wiki/Error-codes-for-metric-events\n\nimport {ClientEventError} from '../metrics.types';\n\nexport const CALL_DIAGNOSTIC_LOG_IDENTIFIER = 'call-diagnostic-events -> ';\n\nexport const NEW_LOCUS_ERROR_CLIENT_CODE = 4008;\nexport const MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE = 4100;\nexport const UNKNOWN_ERROR = 9999; // Unexpected error that is not a meetingInfo error, locus error or browser media error.\nexport const ICE_FAILURE_CLIENT_CODE = 2004;\nexport const WBX_APP_API_URL = 'wbxappapi'; // MeetingInfo WebexAppApi response object normally contains a body.url that includes the string 'wbxappapi'\n\n// Found in https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\nconst BROWSER_MEDIA_ERROR_NAMES = {\n PERMISSION_DENIED_ERROR: 'PermissionDeniedError',\n NOT_ALLOWED_ERROR: 'NotAllowedError',\n NOT_READABLE_ERROR: 'NotReadableError',\n ABORT_ERROR: 'AbortError',\n NOT_FOUND_ERROR: 'NotFoundError',\n OVERCONSTRAINED_ERROR: 'OverconstrainedError',\n SECURITY_ERROR: 'SecurityError',\n TYPE_ERROR: 'TypeError',\n};\n\nexport const BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP = {\n [BROWSER_MEDIA_ERROR_NAMES.PERMISSION_DENIED_ERROR]: 4032, // User did not grant permission\n [BROWSER_MEDIA_ERROR_NAMES.NOT_ALLOWED_ERROR]: 4032, // User did not grant permission\n [BROWSER_MEDIA_ERROR_NAMES.NOT_READABLE_ERROR]: 2729, // Although the user granted permission to use the matching devices, a hardware error occurred at the operating system, browser, or Web page level which prevented access to the device.\n [BROWSER_MEDIA_ERROR_NAMES.ABORT_ERROR]: 2729, // Although the user and operating system both granted access to the hardware device, and no hardware issues occurred that would cause a NotReadableError DOMException, throw if some problem occurred which prevented the device from being used.\n [BROWSER_MEDIA_ERROR_NAMES.NOT_FOUND_ERROR]: 2729, // User did not grant permission\n [BROWSER_MEDIA_ERROR_NAMES.OVERCONSTRAINED_ERROR]: 2729, // Thrown if the specified constraints resulted in no candidate devices which met the criteria requested.\n [BROWSER_MEDIA_ERROR_NAMES.SECURITY_ERROR]: 2729, // Thrown if user media support is disabled on the Document on which getUserMedia() was called. The mechanism by which user media support is enabled and disabled is left up to the individual user agent.\n [BROWSER_MEDIA_ERROR_NAMES.TYPE_ERROR]: 2729, // Thrown if the list of constraints specified is empty, or has all constraints set to false. This can also happen if you try to call getUserMedia() in an insecure context, since navigator.mediaDevices is undefined in an insecure context.\n};\n\nconst ERROR_DESCRIPTIONS = {\n UNKNOWN_CALL_FAILURE: 'UnknownCallFailure',\n LOCUS_RATE_LIMITED_INCOMING: 'LocusRateLimitedIncoming',\n LOCUS_RATE_LIMITED_OUTGOING: 'LocusRateLimitedOutgoing',\n LOCUS_UNAVAILABLE: 'LocusUnavailable',\n LOCUS_CONFLICT: 'LocusConflict',\n TIMEOUT: 'Timeout',\n LOCUS_INVALID_SEQUENCE_HASH: 'LocusInvalidSequenceHash',\n UPDATE_MEDIA_FAILED: 'UpdateMediaFailed',\n FAILED_TO_CONNECT_MEDIA: 'FailedToConnectMedia',\n MEDIA_ENGINE_LOST: 'MediaEngineLost',\n MEDIA_CONNECTION_LOST: 'MediaConnectionLost',\n ICE_FAILURE: 'IceFailure',\n MEDIA_ENGINE_HANG: 'MediaEngineHang',\n ICE_SERVER_REJECTED: 'IceServerRejected',\n CALL_FULL: 'CallFull',\n ROOM_TOO_LARGE: 'RoomTooLarge',\n GUEST_ALREADY_ADDED: 'GuestAlreadyAdded',\n LOCUS_USER_NOT_AUTHORISED: 'LocusUserNotAuthorised',\n CLOUDBERRY_UNAVAILABLE: 'CloudberryUnavailable',\n ROOM_TOO_LARGE_FREE_ACCOUNT: 'RoomTooLarge_FreeAccount',\n MEETING_INACTIVE: 'MeetingInactive',\n MEETING_LOCKED: 'MeetingLocked',\n MEETING_TERMINATING: 'MeetingTerminating',\n MODERATOR_PIN_OR_GUEST_REQUIRED: 'Moderator_Pin_Or_Guest_Required',\n MODERATOR_PIN_OR_GUEST_PIN_REQUIRED: 'Moderator_Pin_Or_Guest_PIN_Required',\n MODERATOR_REQUIRED: 'Moderator_Required',\n USER_NOT_MEMBER_OF_ROOM: 'UserNotMemberOfRoom',\n NEW_LOCUS_ERROR: 'NewLocusError',\n NETWORK_UNAVAILABLE: 'NetworkUnavailable',\n MEETING_UNAVAILABLE: 'MeetingUnavailable',\n MEETING_ID_INVALID: 'MeetingIDInvalid',\n MEETING_SITE_INVALID: 'MeetingSiteInvalid',\n LOCUS_INVALID_JOINTIME: 'LocusInvalidJoinTime',\n LOBBY_EXPIRED: 'LobbyExpired',\n MEDIA_CONNECTION_LOST_PAIRED: 'MediaConnectionLostPaired',\n PHONE_NUMBER_NOT_A_NUMBER: 'PhoneNumberNotANumber',\n PHONE_NUMBER_TOO_LONG: 'PhoneNumberTooLong',\n INVALID_DIALABLE_KEY: 'InvalidDialableKey',\n ONE_ON_ONE_TO_SELF_NOT_ALLOWED: 'OneOnOneToSelfNotAllowed',\n REMOVED_PARTICIPANT: 'RemovedParticipant',\n MEETING_LINK_NOT_FOUND: 'MeetingLinkNotFound',\n PHONE_NUMBER_TOO_SHORT_AFTER_IDD: 'PhoneNumberTooShortAfterIdd',\n INVALID_INVITEE_ADDRESS: 'InvalidInviteeAddress',\n PMR_USER_ACCOUNT_LOCKED_OUT: 'PMRUserAccountLockedOut',\n GUEST_FORBIDDEN: 'GuestForbidden',\n PMR_ACCOUNT_SUSPENDED: 'PMRAccountSuspended',\n EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE: 'EmptyPhoneNumberOrCountryCode',\n CONVERSATION_NOT_FOUND: 'ConversationNotFound',\n SIP_CALLEE_BUSY: 'SIPCalleeBusy',\n SIP_CALLEE_NOT_FOUND: 'SIPCalleeNotFound',\n START_RECORDING_FAILED: 'StartRecordingFailed',\n RECORDING_IN_PROGRESS_FAILED: 'RecordingInProgressFailed',\n MEETING_INFO_LOOKUP_ERROR: 'MeetingInfoLookupError',\n CALL_FULL_ADD_GUEST: 'CallFullAddGuest',\n REQUIRE_WEBEX_LOGIN: 'RequireWebexLogin',\n USER_NOT_ALLOWED_ACCESS_MEETING: 'UserNotAllowedAccessMeeting',\n USER_NEEDS_ACTIVATION: 'UserNeedsActivation',\n SIGN_UP_INVALID_EMAIL: 'SignUpInvalidEmail',\n UNKNOWN_ERROR: 'UnknownError',\n NO_MEDIA_FOUND: 'NoMediaFound',\n STREAM_ERROR_NO_MEDIA: 'StreamErrorNoMedia',\n CAMERA_PERMISSION_DENIED: 'CameraPermissionDenied',\n};\n\nexport const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP = {\n // ---- Webex API ----\n // Taken from https://wiki.cisco.com/display/HFWEB/MeetingInfo+API and https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Services/WebexMeetingService/WebexMeetingModel.h\n // Site not support the URL's domain\n 58400: 4100,\n 99002: 4100,\n // Cannot find the data. Unkown meeting.\n 99009: 4100,\n // Meeting is not allow to cross env\n 58500: 4100,\n // Input parameters contain invalit item\n 400001: 4100,\n // Empty password or token. Meeting is not allow to access since require password\n 403004: 4005,\n // Wrong password. Meeting is not allow to access since password error\n 403028: 4005,\n // Wrong or expired permission. Meeting is not allow to access since permissionToken error or expire\n 403032: 4005,\n // Meeting is required login for current user\n 403034: 4036,\n // Meeting is not allow to access since require password or hostKey\n // Empty password or host key\n 403036: 4005,\n // Meeting is not allow to access since password or hostKey error\n // Wrong password or host key\n 403038: 4005,\n // CMR Meeting Not Supported (meeting exists, but not CMR meeting)\n 403040: 4100,\n // Requires Moderator Pin or Guest Pin\n 403041: 4005,\n // Email blocked\n 403047: 4101,\n // Device not authenticated for your organization\n 403408: 4101,\n // Invalid panelist Pin\n 403043: 4005,\n // Device not registered in org. Device not authenticated.\n 403048: 4101,\n // Not allowed to join external meetings. Violate meeting join policy. Your organization settings don't allow you to join this meeting.\n 403049: 4101,\n // Invalid email. Requires sign in meeting's current site.\n 403100: 4101,\n // Enforce sign in: need login before access when policy enforce sign in. GuestForceUserSignInPolicy\n 403101: 4036,\n // Enforce sign in: sign in with your email address that is approved by your organization\n 403102: 4036,\n // Join internal Meeting: need login before access when policy enforce sign in. Guest force user sign in internal meeting policy.\n 403103: 4036,\n // Join internal Meeting: The host's organization policy doesn't allow your account to join this meeting. Try switching to another account\n 403104: 4101,\n 404001: 4101,\n // Site data not found. Unkonwn meeting. Site data not found(or null).\n 404006: 4100,\n // Invalid input with too many requests. Too many requests access, please input captcha code\n 423001: 4005,\n // Wrong password with too many requests. PasswordError too many time, please input captcha code\n 423005: 4005,\n // Wrong password or host key with too many requests\n 423006: 4005,\n // PasswordError with right captcha, please input captcha code\n 423010: 4005,\n // PasswordOrHostKeyError with right captcha, please input captcha code\n 423012: 4005,\n // Unverified or invalid input. Force show captcha. Please input captcha code\"\n 423013: 4005,\n // Too many requests access\n 429005: 4100,\n\n // ---- Locus ------\n // FREE_USER_MAX_PARTICIPANTS_EXCEEDED\n 2403001: 3007,\n // PAID_USER_MAX_PARTICIPANTS_EXCEEDED\n 2403002: 3002,\n // SERVICE_MAX_PARTICIPANTS_EXCEEDED\n 2403003: 3002,\n // LOCUS_INACTIVE\n 2403004: 4001,\n // LOCUS_FREE_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED\n 2403018: 3001,\n // LOCUS_PAID_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED\n 2403019: 3001,\n // LOCUS_LOCKED\n 2423003: 4002,\n // LOCUS_TERMINATING\n 2423004: 4003,\n // LOCUS_REQUIRES_MODERATOR_PIN_OR_GUEST\n 2423005: 4005,\n 2423006: 4005,\n 2423016: 4005,\n 2423017: 4005,\n 2423018: 4005,\n // LOCUS_REQUIRES_MODERATOR_ROLE\n 2423007: 4006,\n // LOCUS_JOIN_RESTRICTED_USER_NOT_IN_ROOM\n 2403010: 4007,\n // LOCUS_MEETING_NOT_FOUND\n 2403014: 4011,\n // LOCUS_NOT_WEBEX_SITE\n 2403015: 4012,\n // LOCUS_INVALID_JOIN_TIME\n 2423010: 4013,\n // LOCUS_PHONE_NUMBER_NOT_A_NUMBER\n 2400008: 4016,\n // LOCUS_PHONE_NUMBER_TOO_LONG\n 2400011: 4017,\n // LOCUS_INVALID_DIALABLE_KEY\n 2400012: 4018,\n // LOCUS_ONE_ON_ONE_TO_SELF_NOT_ALLOWED\n 2403007: 4019,\n // LOCUS_REMOVED_PARTICIPANT\n 2401002: 4020,\n // LOCUS_MEETING_LINK_NOT_FOUND\n 2404002: 4021,\n // LOCUS_PHONE_NUMBER_TOO_SHORT_AFTER_IDD\n 2400009: 4022,\n // LOCUS_INVALID_INVITEE_ADDRESS\n 2400025: 4023,\n // LOCUS_PMR_USER_ACCOUNT_LOCKEDOUT\n 2423009: 4024,\n // LOCUS_RESOURCE_GUEST_FORBIDDEN\n 2403022: 4025,\n // LOCUS_PMR_SUSPENDED\n 2423008: 4026,\n // LOCUS_EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE\n 2400006: 4027,\n // LOCUS_INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST\n 2400014: 1006,\n // LOCUS_CONVERSATION_NOT_FOUND\n 2404001: 4028,\n // LOCUS_RECORDING_CONTROL_NOT_SUPPORTED\n 2403025: 4029,\n // LOCUS_RECORDING_NOT_STARTED\n 2405001: 4029,\n // LOCUS_RECORDING_NOT_ENABLED\n 2409005: 4029,\n\n // ---- U2C Sign in catalog ------\n // The user exists, but hasn't completed activation. Needs to visit Atlas for more processing.\n 100002: 4102,\n // The user exists, had completed activation earlier, but requires re-activation because of change in login strategy.\n // Common example is: user signed up using an OAuth provider, but that OAuth provider was removed by org's admin. Now the user needs to re-activate using alternate login strategies: password-pin, new OAuth provider, SSO, etc.\n 100007: 4102,\n // The user does not exist\n 100001: 4103,\n // The user wasn't found, and the organization used for search is a domain-claimed organization.\n 100006: 4103,\n 100005: 4103, // Depracated because of an issue in the UCF Clients\n // If both email-hash and domain-hash are null or undefined.\n 100004: 4103,\n};\n\nexport const CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD: Record<number, Partial<ClientEventError>> = {\n 1000: {\n errorDescription: ERROR_DESCRIPTIONS.UNKNOWN_CALL_FAILURE,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1001: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_RATE_LIMITED_INCOMING,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1002: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_RATE_LIMITED_OUTGOING,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1003: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_UNAVAILABLE,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1004: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_CONFLICT,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1005: {\n errorDescription: ERROR_DESCRIPTIONS.TIMEOUT,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1006: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_INVALID_SEQUENCE_HASH,\n category: 'signaling',\n fatal: true,\n },\n 1007: {\n errorDescription: ERROR_DESCRIPTIONS.UPDATE_MEDIA_FAILED,\n category: 'signaling',\n fatal: true,\n },\n 2001: {\n errorDescription: ERROR_DESCRIPTIONS.FAILED_TO_CONNECT_MEDIA,\n category: 'signaling',\n fatal: true,\n },\n 2002: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_ENGINE_LOST,\n category: 'signaling',\n fatal: true,\n },\n 2003: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_CONNECTION_LOST,\n category: 'signaling',\n fatal: true,\n },\n 2004: {\n errorDescription: ERROR_DESCRIPTIONS.ICE_FAILURE,\n category: 'signaling',\n fatal: true,\n },\n 2005: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_ENGINE_HANG,\n category: 'signaling',\n fatal: true,\n },\n 2006: {\n errorDescription: ERROR_DESCRIPTIONS.ICE_SERVER_REJECTED,\n category: 'signaling',\n fatal: true,\n },\n 3001: {\n errorDescription: ERROR_DESCRIPTIONS.CALL_FULL,\n category: 'expected',\n fatal: true,\n },\n 3002: {\n errorDescription: ERROR_DESCRIPTIONS.ROOM_TOO_LARGE,\n category: 'expected',\n fatal: true,\n },\n 3004: {\n errorDescription: ERROR_DESCRIPTIONS.GUEST_ALREADY_ADDED,\n category: 'expected',\n fatal: false,\n },\n 3005: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_USER_NOT_AUTHORISED,\n category: 'expected',\n fatal: true,\n },\n 3006: {\n errorDescription: ERROR_DESCRIPTIONS.CLOUDBERRY_UNAVAILABLE,\n category: 'expected',\n fatal: true,\n },\n 3007: {\n errorDescription: ERROR_DESCRIPTIONS.STREAM_ERROR_NO_MEDIA,\n category: 'expected',\n fatal: true,\n },\n 3013: {\n errorDescription: ERROR_DESCRIPTIONS.ROOM_TOO_LARGE_FREE_ACCOUNT,\n category: 'expected',\n fatal: false,\n },\n 4001: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_INACTIVE,\n category: 'expected',\n fatal: true,\n },\n 4002: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_LOCKED,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4003: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_TERMINATING,\n category: 'expected',\n fatal: true,\n name: 'locus.leave',\n },\n 4004: {\n errorDescription: ERROR_DESCRIPTIONS.MODERATOR_PIN_OR_GUEST_REQUIRED,\n category: 'expected',\n fatal: false,\n },\n 4005: {\n errorDescription: ERROR_DESCRIPTIONS.MODERATOR_PIN_OR_GUEST_PIN_REQUIRED,\n category: 'expected',\n fatal: false,\n },\n 4006: {\n errorDescription: ERROR_DESCRIPTIONS.MODERATOR_REQUIRED,\n category: 'expected',\n fatal: false,\n },\n 4007: {\n errorDescription: ERROR_DESCRIPTIONS.USER_NOT_MEMBER_OF_ROOM,\n category: 'expected',\n fatal: true,\n },\n 4008: {\n errorDescription: ERROR_DESCRIPTIONS.NEW_LOCUS_ERROR,\n category: 'signaling',\n fatal: true,\n },\n 4009: {\n errorDescription: ERROR_DESCRIPTIONS.NETWORK_UNAVAILABLE,\n category: 'expected',\n fatal: true,\n },\n 4010: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_UNAVAILABLE,\n category: 'expected',\n fatal: true,\n },\n 4011: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_ID_INVALID,\n category: 'expected',\n fatal: true,\n },\n 4012: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_SITE_INVALID,\n category: 'expected',\n fatal: true,\n },\n 4013: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_INVALID_JOINTIME,\n category: 'expected',\n fatal: true,\n },\n 4014: {\n errorDescription: ERROR_DESCRIPTIONS.LOBBY_EXPIRED,\n category: 'expected',\n fatal: true,\n },\n 4015: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_CONNECTION_LOST_PAIRED,\n category: 'expected',\n fatal: false,\n },\n 4016: {\n errorDescription: ERROR_DESCRIPTIONS.PHONE_NUMBER_NOT_A_NUMBER,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4017: {\n errorDescription: ERROR_DESCRIPTIONS.PHONE_NUMBER_TOO_LONG,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4018: {\n errorDescription: ERROR_DESCRIPTIONS.INVALID_DIALABLE_KEY,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4019: {\n errorDescription: ERROR_DESCRIPTIONS.ONE_ON_ONE_TO_SELF_NOT_ALLOWED,\n category: 'expected',\n fatal: true,\n },\n 4020: {\n errorDescription: ERROR_DESCRIPTIONS.REMOVED_PARTICIPANT,\n category: 'expected',\n fatal: true,\n },\n 4021: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_LINK_NOT_FOUND,\n category: 'expected',\n fatal: true,\n },\n 4022: {\n errorDescription: ERROR_DESCRIPTIONS.PHONE_NUMBER_TOO_SHORT_AFTER_IDD,\n category: 'expected',\n fatal: true,\n },\n 4023: {\n errorDescription: ERROR_DESCRIPTIONS.INVALID_INVITEE_ADDRESS,\n category: 'expected',\n fatal: true,\n },\n 4024: {\n errorDescription: ERROR_DESCRIPTIONS.PMR_USER_ACCOUNT_LOCKED_OUT,\n category: 'expected',\n fatal: true,\n },\n 4025: {\n errorDescription: ERROR_DESCRIPTIONS.GUEST_FORBIDDEN,\n category: 'expected',\n fatal: true,\n },\n 4026: {\n errorDescription: ERROR_DESCRIPTIONS.PMR_ACCOUNT_SUSPENDED,\n category: 'expected',\n fatal: true,\n },\n 4027: {\n errorDescription: ERROR_DESCRIPTIONS.EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE,\n category: 'expected',\n fatal: true,\n },\n 4028: {\n errorDescription: ERROR_DESCRIPTIONS.CONVERSATION_NOT_FOUND,\n category: 'expected',\n fatal: true,\n },\n 4029: {\n errorDescription: ERROR_DESCRIPTIONS.START_RECORDING_FAILED,\n category: 'expected',\n fatal: true,\n },\n 4030: {\n errorDescription: ERROR_DESCRIPTIONS.RECORDING_IN_PROGRESS_FAILED,\n category: 'expected',\n fatal: true,\n },\n 4032: {\n errorDescription: ERROR_DESCRIPTIONS.CAMERA_PERMISSION_DENIED,\n category: 'expected',\n fatal: true,\n },\n 4036: {\n errorDescription: ERROR_DESCRIPTIONS.REQUIRE_WEBEX_LOGIN,\n category: 'expected',\n fatal: true,\n },\n 5000: {\n errorDescription: ERROR_DESCRIPTIONS.SIP_CALLEE_BUSY,\n category: 'expected',\n fatal: true,\n },\n 5001: {\n errorDescription: ERROR_DESCRIPTIONS.SIP_CALLEE_NOT_FOUND,\n category: 'expected',\n fatal: true,\n },\n\n // Webex App API Error Codes\n 4100: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_INFO_LOOKUP_ERROR,\n category: 'signaling',\n fatal: true,\n },\n 3003: {\n errorDescription: ERROR_DESCRIPTIONS.CALL_FULL_ADD_GUEST,\n category: 'expected',\n fatal: false,\n },\n 4101: {\n errorDescription: ERROR_DESCRIPTIONS.USER_NOT_ALLOWED_ACCESS_MEETING,\n category: 'expected',\n fatal: true,\n },\n 4102: {\n errorDescription: ERROR_DESCRIPTIONS.USER_NEEDS_ACTIVATION,\n category: 'expected',\n fatal: true,\n },\n 4103: {\n errorDescription: ERROR_DESCRIPTIONS.SIGN_UP_INVALID_EMAIL,\n category: 'expected',\n fatal: true,\n },\n 2729: {\n errorDescription: ERROR_DESCRIPTIONS.NO_MEDIA_FOUND,\n category: 'expected',\n fatal: false,\n },\n 9999: {\n errorDescription: ERROR_DESCRIPTIONS.UNKNOWN_ERROR,\n category: 'other',\n fatal: true,\n },\n};\n\nexport const CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND = 'js_sdk_call_diagnostic_event_failed_to_send';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["CALL_DIAGNOSTIC_LOG_IDENTIFIER","NEW_LOCUS_ERROR_CLIENT_CODE","MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE","UNKNOWN_ERROR","ICE_FAILURE_CLIENT_CODE","WBX_APP_API_URL","BROWSER_MEDIA_ERROR_NAMES","PERMISSION_DENIED_ERROR","NOT_ALLOWED_ERROR","NOT_READABLE_ERROR","ABORT_ERROR","NOT_FOUND_ERROR","OVERCONSTRAINED_ERROR","SECURITY_ERROR","TYPE_ERROR","BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP","ERROR_DESCRIPTIONS","UNKNOWN_CALL_FAILURE","LOCUS_RATE_LIMITED_INCOMING","LOCUS_RATE_LIMITED_OUTGOING","LOCUS_UNAVAILABLE","LOCUS_CONFLICT","TIMEOUT","LOCUS_INVALID_SEQUENCE_HASH","UPDATE_MEDIA_FAILED","FAILED_TO_CONNECT_MEDIA","MEDIA_ENGINE_LOST","MEDIA_CONNECTION_LOST","ICE_FAILURE","MEDIA_ENGINE_HANG","ICE_SERVER_REJECTED","CALL_FULL","ROOM_TOO_LARGE","GUEST_ALREADY_ADDED","LOCUS_USER_NOT_AUTHORISED","CLOUDBERRY_UNAVAILABLE","ROOM_TOO_LARGE_FREE_ACCOUNT","MEETING_INACTIVE","MEETING_LOCKED","MEETING_TERMINATING","MODERATOR_PIN_OR_GUEST_REQUIRED","MODERATOR_PIN_OR_GUEST_PIN_REQUIRED","MODERATOR_REQUIRED","USER_NOT_MEMBER_OF_ROOM","NEW_LOCUS_ERROR","NETWORK_UNAVAILABLE","MEETING_UNAVAILABLE","MEETING_ID_INVALID","MEETING_SITE_INVALID","LOCUS_INVALID_JOINTIME","LOBBY_EXPIRED","MEDIA_CONNECTION_LOST_PAIRED","PHONE_NUMBER_NOT_A_NUMBER","PHONE_NUMBER_TOO_LONG","INVALID_DIALABLE_KEY","ONE_ON_ONE_TO_SELF_NOT_ALLOWED","REMOVED_PARTICIPANT","MEETING_LINK_NOT_FOUND","PHONE_NUMBER_TOO_SHORT_AFTER_IDD","INVALID_INVITEE_ADDRESS","PMR_USER_ACCOUNT_LOCKED_OUT","GUEST_FORBIDDEN","PMR_ACCOUNT_SUSPENDED","EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE","CONVERSATION_NOT_FOUND","SIP_CALLEE_BUSY","SIP_CALLEE_NOT_FOUND","START_RECORDING_FAILED","RECORDING_IN_PROGRESS_FAILED","MEETING_INFO_LOOKUP_ERROR","CALL_FULL_ADD_GUEST","REQUIRE_WEBEX_LOGIN","USER_NOT_ALLOWED_ACCESS_MEETING","USER_NEEDS_ACTIVATION","SIGN_UP_INVALID_EMAIL","NO_MEDIA_FOUND","STREAM_ERROR_NO_MEDIA","CAMERA_PERMISSION_DENIED","FRAUD_DETECTION","SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","errorDescription","category","fatal","name","shownToUser","CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND"],"sources":["config.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\n// Most client error codes are mapped based on\n// https://sqbu-github.cisco.com/WebExSquared/event-dictionary/wiki/Error-codes-for-metric-events\n\nimport {ClientEventError} from '../metrics.types';\n\nexport const CALL_DIAGNOSTIC_LOG_IDENTIFIER = 'call-diagnostic-events -> ';\n\nexport const NEW_LOCUS_ERROR_CLIENT_CODE = 4008;\nexport const MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE = 4100;\nexport const UNKNOWN_ERROR = 9999; // Unexpected error that is not a meetingInfo error, locus error or browser media error.\nexport const ICE_FAILURE_CLIENT_CODE = 2004;\nexport const WBX_APP_API_URL = 'wbxappapi'; // MeetingInfo WebexAppApi response object normally contains a body.url that includes the string 'wbxappapi'\n\n// Found in https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\nconst BROWSER_MEDIA_ERROR_NAMES = {\n PERMISSION_DENIED_ERROR: 'PermissionDeniedError',\n NOT_ALLOWED_ERROR: 'NotAllowedError',\n NOT_READABLE_ERROR: 'NotReadableError',\n ABORT_ERROR: 'AbortError',\n NOT_FOUND_ERROR: 'NotFoundError',\n OVERCONSTRAINED_ERROR: 'OverconstrainedError',\n SECURITY_ERROR: 'SecurityError',\n TYPE_ERROR: 'TypeError',\n};\n\nexport const BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP = {\n [BROWSER_MEDIA_ERROR_NAMES.PERMISSION_DENIED_ERROR]: 4032, // User did not grant permission\n [BROWSER_MEDIA_ERROR_NAMES.NOT_ALLOWED_ERROR]: 4032, // User did not grant permission\n [BROWSER_MEDIA_ERROR_NAMES.NOT_READABLE_ERROR]: 2729, // Although the user granted permission to use the matching devices, a hardware error occurred at the operating system, browser, or Web page level which prevented access to the device.\n [BROWSER_MEDIA_ERROR_NAMES.ABORT_ERROR]: 2729, // Although the user and operating system both granted access to the hardware device, and no hardware issues occurred that would cause a NotReadableError DOMException, throw if some problem occurred which prevented the device from being used.\n [BROWSER_MEDIA_ERROR_NAMES.NOT_FOUND_ERROR]: 2729, // User did not grant permission\n [BROWSER_MEDIA_ERROR_NAMES.OVERCONSTRAINED_ERROR]: 2729, // Thrown if the specified constraints resulted in no candidate devices which met the criteria requested.\n [BROWSER_MEDIA_ERROR_NAMES.SECURITY_ERROR]: 2729, // Thrown if user media support is disabled on the Document on which getUserMedia() was called. The mechanism by which user media support is enabled and disabled is left up to the individual user agent.\n [BROWSER_MEDIA_ERROR_NAMES.TYPE_ERROR]: 2729, // Thrown if the list of constraints specified is empty, or has all constraints set to false. This can also happen if you try to call getUserMedia() in an insecure context, since navigator.mediaDevices is undefined in an insecure context.\n};\n\nconst ERROR_DESCRIPTIONS = {\n UNKNOWN_CALL_FAILURE: 'UnknownCallFailure',\n LOCUS_RATE_LIMITED_INCOMING: 'LocusRateLimitedIncoming',\n LOCUS_RATE_LIMITED_OUTGOING: 'LocusRateLimitedOutgoing',\n LOCUS_UNAVAILABLE: 'LocusUnavailable',\n LOCUS_CONFLICT: 'LocusConflict',\n TIMEOUT: 'Timeout',\n LOCUS_INVALID_SEQUENCE_HASH: 'LocusInvalidSequenceHash',\n UPDATE_MEDIA_FAILED: 'UpdateMediaFailed',\n FAILED_TO_CONNECT_MEDIA: 'FailedToConnectMedia',\n MEDIA_ENGINE_LOST: 'MediaEngineLost',\n MEDIA_CONNECTION_LOST: 'MediaConnectionLost',\n ICE_FAILURE: 'IceFailure',\n MEDIA_ENGINE_HANG: 'MediaEngineHang',\n ICE_SERVER_REJECTED: 'IceServerRejected',\n CALL_FULL: 'CallFull',\n ROOM_TOO_LARGE: 'RoomTooLarge',\n GUEST_ALREADY_ADDED: 'GuestAlreadyAdded',\n LOCUS_USER_NOT_AUTHORISED: 'LocusUserNotAuthorised',\n CLOUDBERRY_UNAVAILABLE: 'CloudberryUnavailable',\n ROOM_TOO_LARGE_FREE_ACCOUNT: 'RoomTooLarge_FreeAccount',\n MEETING_INACTIVE: 'MeetingInactive',\n MEETING_LOCKED: 'MeetingLocked',\n MEETING_TERMINATING: 'MeetingTerminating',\n MODERATOR_PIN_OR_GUEST_REQUIRED: 'Moderator_Pin_Or_Guest_Required',\n MODERATOR_PIN_OR_GUEST_PIN_REQUIRED: 'Moderator_Pin_Or_Guest_PIN_Required',\n MODERATOR_REQUIRED: 'Moderator_Required',\n USER_NOT_MEMBER_OF_ROOM: 'UserNotMemberOfRoom',\n NEW_LOCUS_ERROR: 'NewLocusError',\n NETWORK_UNAVAILABLE: 'NetworkUnavailable',\n MEETING_UNAVAILABLE: 'MeetingUnavailable',\n MEETING_ID_INVALID: 'MeetingIDInvalid',\n MEETING_SITE_INVALID: 'MeetingSiteInvalid',\n LOCUS_INVALID_JOINTIME: 'LocusInvalidJoinTime',\n LOBBY_EXPIRED: 'LobbyExpired',\n MEDIA_CONNECTION_LOST_PAIRED: 'MediaConnectionLostPaired',\n PHONE_NUMBER_NOT_A_NUMBER: 'PhoneNumberNotANumber',\n PHONE_NUMBER_TOO_LONG: 'PhoneNumberTooLong',\n INVALID_DIALABLE_KEY: 'InvalidDialableKey',\n ONE_ON_ONE_TO_SELF_NOT_ALLOWED: 'OneOnOneToSelfNotAllowed',\n REMOVED_PARTICIPANT: 'RemovedParticipant',\n MEETING_LINK_NOT_FOUND: 'MeetingLinkNotFound',\n PHONE_NUMBER_TOO_SHORT_AFTER_IDD: 'PhoneNumberTooShortAfterIdd',\n INVALID_INVITEE_ADDRESS: 'InvalidInviteeAddress',\n PMR_USER_ACCOUNT_LOCKED_OUT: 'PMRUserAccountLockedOut',\n GUEST_FORBIDDEN: 'GuestForbidden',\n PMR_ACCOUNT_SUSPENDED: 'PMRAccountSuspended',\n EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE: 'EmptyPhoneNumberOrCountryCode',\n CONVERSATION_NOT_FOUND: 'ConversationNotFound',\n SIP_CALLEE_BUSY: 'SIPCalleeBusy',\n SIP_CALLEE_NOT_FOUND: 'SIPCalleeNotFound',\n START_RECORDING_FAILED: 'StartRecordingFailed',\n RECORDING_IN_PROGRESS_FAILED: 'RecordingInProgressFailed',\n MEETING_INFO_LOOKUP_ERROR: 'MeetingInfoLookupError',\n CALL_FULL_ADD_GUEST: 'CallFullAddGuest',\n REQUIRE_WEBEX_LOGIN: 'RequireWebexLogin',\n USER_NOT_ALLOWED_ACCESS_MEETING: 'UserNotAllowedAccessMeeting',\n USER_NEEDS_ACTIVATION: 'UserNeedsActivation',\n SIGN_UP_INVALID_EMAIL: 'SignUpInvalidEmail',\n UNKNOWN_ERROR: 'UnknownError',\n NO_MEDIA_FOUND: 'NoMediaFound',\n STREAM_ERROR_NO_MEDIA: 'StreamErrorNoMedia',\n CAMERA_PERMISSION_DENIED: 'CameraPermissionDenied',\n FRAUD_DETECTION: 'FraudDetection',\n};\n\nexport const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP = {\n // ---- Webex API ----\n // Taken from https://wiki.cisco.com/display/HFWEB/MeetingInfo+API and https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Services/WebexMeetingService/WebexMeetingModel.h\n // Site not support the URL's domain\n 58400: 4100,\n 99002: 4100,\n // Cannot find the data. Unkown meeting.\n 99009: 4100,\n // Meeting is not allow to cross env\n 58500: 4100,\n // Input parameters contain invalit item\n 400001: 4100,\n // Empty password or token. Meeting is not allow to access since require password\n 403004: 4005,\n // Wrong password. Meeting is not allow to access since password error\n 403028: 4005,\n // Wrong or expired permission. Meeting is not allow to access since permissionToken error or expire\n 403032: 4005,\n // Meeting is required login for current user\n 403034: 4036,\n // Meeting is not allow to access since require password or hostKey\n // Empty password or host key\n 403036: 4005,\n // Meeting is not allow to access since password or hostKey error\n // Wrong password or host key\n 403038: 4005,\n // CMR Meeting Not Supported (meeting exists, but not CMR meeting)\n 403040: 4100,\n // Requires Moderator Pin or Guest Pin\n 403041: 4005,\n // Email blocked\n 403047: 4101,\n // Device not authenticated for your organization\n 403408: 4101,\n // Invalid panelist Pin\n 403043: 4005,\n // Device not registered in org. Device not authenticated.\n 403048: 4101,\n // Not allowed to join external meetings. Violate meeting join policy. Your organization settings don't allow you to join this meeting.\n 403049: 4101,\n // Invalid email. Requires sign in meeting's current site.\n 403100: 4101,\n // Enforce sign in: need login before access when policy enforce sign in. GuestForceUserSignInPolicy\n 403101: 4036,\n // Enforce sign in: sign in with your email address that is approved by your organization\n 403102: 4036,\n // Join internal Meeting: need login before access when policy enforce sign in. Guest force user sign in internal meeting policy.\n 403103: 4036,\n // Join internal Meeting: The host's organization policy doesn't allow your account to join this meeting. Try switching to another account\n 403104: 4101,\n 404001: 4101,\n // Site data not found. Unkonwn meeting. Site data not found(or null).\n 404006: 4100,\n // Invalid input with too many requests. Too many requests access, please input captcha code\n 423001: 4005,\n // Wrong password with too many requests. PasswordError too many time, please input captcha code\n 423005: 4005,\n // Wrong password or host key with too many requests\n 423006: 4005,\n // PasswordError with right captcha, please input captcha code\n 423010: 4005,\n // PasswordOrHostKeyError with right captcha, please input captcha code\n 423012: 4005,\n // Unverified or invalid input. Force show captcha. Please input captcha code\"\n 423013: 4005,\n // Too many requests access\n 429005: 4100,\n\n // ---- Locus ------\n // FREE_USER_MAX_PARTICIPANTS_EXCEEDED\n 2403001: 3007,\n // PAID_USER_MAX_PARTICIPANTS_EXCEEDED\n 2403002: 3002,\n // SERVICE_MAX_PARTICIPANTS_EXCEEDED\n 2403003: 3002,\n // LOCUS_INACTIVE\n 2403004: 4001,\n // LOCUS_FREE_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED\n 2403018: 3001,\n // LOCUS_PAID_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED\n 2403019: 3001,\n // LOCUS_LOCKED\n 2423003: 4002,\n // LOCUS_TERMINATING\n 2423004: 4003,\n // LOCUS_REQUIRES_MODERATOR_PIN_OR_GUEST\n 2423005: 4005,\n 2423006: 4005,\n 2423016: 4005,\n 2423017: 4005,\n 2423018: 4005,\n // LOCUS_OWNER_CONCURRENT_ACTIVE_MEETING_LIMIT_EXCEEDED\n 2423012: 12000,\n // LOCUS_REQUIRES_MODERATOR_ROLE\n 2423007: 4006,\n // LOCUS_JOIN_RESTRICTED_USER_NOT_IN_ROOM\n 2403010: 4007,\n // LOCUS_MEETING_NOT_FOUND\n 2403014: 4011,\n // LOCUS_NOT_WEBEX_SITE\n 2403015: 4012,\n // LOCUS_INVALID_JOIN_TIME\n 2423010: 4013,\n // LOCUS_PHONE_NUMBER_NOT_A_NUMBER\n 2400008: 4016,\n // LOCUS_PHONE_NUMBER_TOO_LONG\n 2400011: 4017,\n // LOCUS_INVALID_DIALABLE_KEY\n 2400012: 4018,\n // LOCUS_ONE_ON_ONE_TO_SELF_NOT_ALLOWED\n 2403007: 4019,\n // LOCUS_REMOVED_PARTICIPANT\n 2401002: 4020,\n // LOCUS_MEETING_LINK_NOT_FOUND\n 2404002: 4021,\n // LOCUS_PHONE_NUMBER_TOO_SHORT_AFTER_IDD\n 2400009: 4022,\n // LOCUS_INVALID_INVITEE_ADDRESS\n 2400025: 4023,\n // LOCUS_PMR_USER_ACCOUNT_LOCKEDOUT\n 2423009: 4024,\n // LOCUS_RESOURCE_GUEST_FORBIDDEN\n 2403022: 4025,\n // LOCUS_PMR_SUSPENDED\n 2423008: 4026,\n // LOCUS_EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE\n 2400006: 4027,\n // LOCUS_INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST\n 2400014: 1006,\n // LOCUS_CONVERSATION_NOT_FOUND\n 2404001: 4028,\n // LOCUS_RECORDING_CONTROL_NOT_SUPPORTED\n 2403025: 4029,\n // LOCUS_RECORDING_NOT_STARTED\n 2405001: 4029,\n // LOCUS_RECORDING_NOT_ENABLED\n 2409005: 4029,\n\n // ---- U2C Sign in catalog ------\n // The user exists, but hasn't completed activation. Needs to visit Atlas for more processing.\n 100002: 4102,\n // The user exists, had completed activation earlier, but requires re-activation because of change in login strategy.\n // Common example is: user signed up using an OAuth provider, but that OAuth provider was removed by org's admin. Now the user needs to re-activate using alternate login strategies: password-pin, new OAuth provider, SSO, etc.\n 100007: 4102,\n // The user does not exist\n 100001: 4103,\n // The user wasn't found, and the organization used for search is a domain-claimed organization.\n 100006: 4103,\n 100005: 4103, // Depracated because of an issue in the UCF Clients\n // If both email-hash and domain-hash are null or undefined.\n 100004: 4103,\n};\n\nexport const CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD: Record<number, Partial<ClientEventError>> = {\n 1000: {\n errorDescription: ERROR_DESCRIPTIONS.UNKNOWN_CALL_FAILURE,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1001: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_RATE_LIMITED_INCOMING,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1002: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_RATE_LIMITED_OUTGOING,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1003: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_UNAVAILABLE,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1004: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_CONFLICT,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1005: {\n errorDescription: ERROR_DESCRIPTIONS.TIMEOUT,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1006: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_INVALID_SEQUENCE_HASH,\n category: 'signaling',\n fatal: true,\n },\n 1007: {\n errorDescription: ERROR_DESCRIPTIONS.UPDATE_MEDIA_FAILED,\n category: 'signaling',\n fatal: true,\n },\n 2001: {\n errorDescription: ERROR_DESCRIPTIONS.FAILED_TO_CONNECT_MEDIA,\n category: 'signaling',\n fatal: true,\n },\n 2002: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_ENGINE_LOST,\n category: 'signaling',\n fatal: true,\n },\n 2003: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_CONNECTION_LOST,\n category: 'signaling',\n fatal: true,\n },\n 2004: {\n errorDescription: ERROR_DESCRIPTIONS.ICE_FAILURE,\n category: 'signaling',\n fatal: true,\n },\n 2005: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_ENGINE_HANG,\n category: 'signaling',\n fatal: true,\n },\n 2006: {\n errorDescription: ERROR_DESCRIPTIONS.ICE_SERVER_REJECTED,\n category: 'signaling',\n fatal: true,\n },\n 3001: {\n errorDescription: ERROR_DESCRIPTIONS.CALL_FULL,\n category: 'expected',\n fatal: true,\n },\n 3002: {\n errorDescription: ERROR_DESCRIPTIONS.ROOM_TOO_LARGE,\n category: 'expected',\n fatal: true,\n },\n 3004: {\n errorDescription: ERROR_DESCRIPTIONS.GUEST_ALREADY_ADDED,\n category: 'expected',\n fatal: false,\n },\n 3005: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_USER_NOT_AUTHORISED,\n category: 'expected',\n fatal: true,\n },\n 3006: {\n errorDescription: ERROR_DESCRIPTIONS.CLOUDBERRY_UNAVAILABLE,\n category: 'expected',\n fatal: true,\n },\n 3007: {\n errorDescription: ERROR_DESCRIPTIONS.STREAM_ERROR_NO_MEDIA,\n category: 'expected',\n fatal: true,\n },\n 3013: {\n errorDescription: ERROR_DESCRIPTIONS.ROOM_TOO_LARGE_FREE_ACCOUNT,\n category: 'expected',\n fatal: false,\n },\n 4001: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_INACTIVE,\n category: 'expected',\n fatal: true,\n },\n 4002: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_LOCKED,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4003: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_TERMINATING,\n category: 'expected',\n fatal: true,\n name: 'locus.leave',\n },\n 4004: {\n errorDescription: ERROR_DESCRIPTIONS.MODERATOR_PIN_OR_GUEST_REQUIRED,\n category: 'expected',\n fatal: false,\n },\n 4005: {\n errorDescription: ERROR_DESCRIPTIONS.MODERATOR_PIN_OR_GUEST_PIN_REQUIRED,\n category: 'expected',\n fatal: false,\n },\n 4006: {\n errorDescription: ERROR_DESCRIPTIONS.MODERATOR_REQUIRED,\n category: 'expected',\n fatal: false,\n },\n 4007: {\n errorDescription: ERROR_DESCRIPTIONS.USER_NOT_MEMBER_OF_ROOM,\n category: 'expected',\n fatal: true,\n },\n 4008: {\n errorDescription: ERROR_DESCRIPTIONS.NEW_LOCUS_ERROR,\n category: 'signaling',\n fatal: true,\n },\n 4009: {\n errorDescription: ERROR_DESCRIPTIONS.NETWORK_UNAVAILABLE,\n category: 'expected',\n fatal: true,\n },\n 4010: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_UNAVAILABLE,\n category: 'expected',\n fatal: true,\n },\n 4011: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_ID_INVALID,\n category: 'expected',\n fatal: true,\n },\n 4012: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_SITE_INVALID,\n category: 'expected',\n fatal: true,\n },\n 4013: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_INVALID_JOINTIME,\n category: 'expected',\n fatal: true,\n },\n 4014: {\n errorDescription: ERROR_DESCRIPTIONS.LOBBY_EXPIRED,\n category: 'expected',\n fatal: true,\n },\n 4015: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_CONNECTION_LOST_PAIRED,\n category: 'expected',\n fatal: false,\n },\n 4016: {\n errorDescription: ERROR_DESCRIPTIONS.PHONE_NUMBER_NOT_A_NUMBER,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4017: {\n errorDescription: ERROR_DESCRIPTIONS.PHONE_NUMBER_TOO_LONG,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4018: {\n errorDescription: ERROR_DESCRIPTIONS.INVALID_DIALABLE_KEY,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4019: {\n errorDescription: ERROR_DESCRIPTIONS.ONE_ON_ONE_TO_SELF_NOT_ALLOWED,\n category: 'expected',\n fatal: true,\n },\n 4020: {\n errorDescription: ERROR_DESCRIPTIONS.REMOVED_PARTICIPANT,\n category: 'expected',\n fatal: true,\n },\n 4021: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_LINK_NOT_FOUND,\n category: 'expected',\n fatal: true,\n },\n 4022: {\n errorDescription: ERROR_DESCRIPTIONS.PHONE_NUMBER_TOO_SHORT_AFTER_IDD,\n category: 'expected',\n fatal: true,\n },\n 4023: {\n errorDescription: ERROR_DESCRIPTIONS.INVALID_INVITEE_ADDRESS,\n category: 'expected',\n fatal: true,\n },\n 4024: {\n errorDescription: ERROR_DESCRIPTIONS.PMR_USER_ACCOUNT_LOCKED_OUT,\n category: 'expected',\n fatal: true,\n },\n 4025: {\n errorDescription: ERROR_DESCRIPTIONS.GUEST_FORBIDDEN,\n category: 'expected',\n fatal: true,\n },\n 4026: {\n errorDescription: ERROR_DESCRIPTIONS.PMR_ACCOUNT_SUSPENDED,\n category: 'expected',\n fatal: true,\n },\n 4027: {\n errorDescription: ERROR_DESCRIPTIONS.EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE,\n category: 'expected',\n fatal: true,\n },\n 4028: {\n errorDescription: ERROR_DESCRIPTIONS.CONVERSATION_NOT_FOUND,\n category: 'expected',\n fatal: true,\n },\n 4029: {\n errorDescription: ERROR_DESCRIPTIONS.START_RECORDING_FAILED,\n category: 'expected',\n fatal: true,\n },\n 4030: {\n errorDescription: ERROR_DESCRIPTIONS.RECORDING_IN_PROGRESS_FAILED,\n category: 'expected',\n fatal: true,\n },\n 4032: {\n errorDescription: ERROR_DESCRIPTIONS.CAMERA_PERMISSION_DENIED,\n category: 'expected',\n fatal: true,\n },\n 4036: {\n errorDescription: ERROR_DESCRIPTIONS.REQUIRE_WEBEX_LOGIN,\n category: 'expected',\n fatal: true,\n },\n 5000: {\n errorDescription: ERROR_DESCRIPTIONS.SIP_CALLEE_BUSY,\n category: 'expected',\n fatal: true,\n },\n 5001: {\n errorDescription: ERROR_DESCRIPTIONS.SIP_CALLEE_NOT_FOUND,\n category: 'expected',\n fatal: true,\n },\n\n // Webex App API Error Codes\n 4100: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_INFO_LOOKUP_ERROR,\n category: 'signaling',\n fatal: true,\n },\n 3003: {\n errorDescription: ERROR_DESCRIPTIONS.CALL_FULL_ADD_GUEST,\n category: 'expected',\n fatal: false,\n },\n 4101: {\n errorDescription: ERROR_DESCRIPTIONS.USER_NOT_ALLOWED_ACCESS_MEETING,\n category: 'expected',\n fatal: true,\n },\n 4102: {\n errorDescription: ERROR_DESCRIPTIONS.USER_NEEDS_ACTIVATION,\n category: 'expected',\n fatal: true,\n },\n 4103: {\n errorDescription: ERROR_DESCRIPTIONS.SIGN_UP_INVALID_EMAIL,\n category: 'expected',\n fatal: true,\n },\n 2729: {\n errorDescription: ERROR_DESCRIPTIONS.NO_MEDIA_FOUND,\n category: 'expected',\n fatal: false,\n },\n 9999: {\n errorDescription: ERROR_DESCRIPTIONS.UNKNOWN_ERROR,\n category: 'other',\n fatal: true,\n },\n 12000: {\n errorDescription: ERROR_DESCRIPTIONS.FRAUD_DETECTION,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n shownToUser: true,\n },\n};\n\nexport const CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND = 'js_sdk_call_diagnostic_event_failed_to_send';\n"],"mappings":"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"}
|
package/dist/metrics.js
CHANGED
package/dist/new-metrics.js
CHANGED
|
@@ -9,7 +9,6 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
9
9
|
exports.default = void 0;
|
|
10
10
|
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
11
11
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
12
|
-
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
13
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
14
13
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
15
14
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
@@ -213,7 +212,7 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
213
212
|
}
|
|
214
213
|
}).then(function (res) {
|
|
215
214
|
// @ts-ignore
|
|
216
|
-
_this3.webex.logger.log("NewMetrics: @postPreLoginMetric. Request successful:",
|
|
215
|
+
_this3.webex.logger.log("NewMetrics: @postPreLoginMetric. Request successful:", res);
|
|
217
216
|
return res;
|
|
218
217
|
}).catch(function (err) {
|
|
219
218
|
// @ts-ignore
|
|
@@ -245,7 +244,7 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
245
244
|
}
|
|
246
245
|
}).then(function (res) {
|
|
247
246
|
// @ts-ignore
|
|
248
|
-
_this4.webex.logger.log("NewMetrics: @clientMetricsAliasUser. Request successful:",
|
|
247
|
+
_this4.webex.logger.log("NewMetrics: @clientMetricsAliasUser. Request successful:", res);
|
|
249
248
|
return res;
|
|
250
249
|
}).catch(function (err) {
|
|
251
250
|
// @ts-ignore
|
|
@@ -314,6 +313,17 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
|
|
|
314
313
|
// @ts-ignore
|
|
315
314
|
return this.webex.setTimingsAndFetch((0, _callDiagnosticMetrics2.setMetricTimings)(options));
|
|
316
315
|
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Returns true if the specified serviceErrorCode maps to an expected error.
|
|
319
|
+
* @param {number} serviceErrorCode the service error code
|
|
320
|
+
* @returns {boolean}
|
|
321
|
+
*/
|
|
322
|
+
}, {
|
|
323
|
+
key: "isServiceErrorExpected",
|
|
324
|
+
value: function isServiceErrorExpected(serviceErrorCode) {
|
|
325
|
+
return this.callDiagnosticMetrics.isServiceErrorExpected(serviceErrorCode);
|
|
326
|
+
}
|
|
317
327
|
}]);
|
|
318
328
|
return Metrics;
|
|
319
329
|
}(_webexCore.WebexPlugin);
|
package/dist/new-metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Metrics","args","onReady","webex","once","callDiagnosticMetrics","CallDiagnosticMetrics","parent","callDiagnosticLatencies","CallDiagnosticLatencies","name","payload","options","clearTimestamps","saveTimestamp","key","Error","submitMQE","logger","log","resolve","meetingId","submitClientEvent","preLoginId","request","method","api","resource","headers","authorization","body","metrics","then","res","catch","err","error","generateCommonErrorMetadata","reject","qs","alias","buildClientEventFetchRequestOptions","setTimingsAndFetch","setMetricTimings","WebexPlugin"],"sources":["new-metrics.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';\nimport {\n RecursivePartial,\n ClientEvent,\n FeatureEvent,\n BehavioralEvent,\n OperationalEvent,\n MediaQualityEvent,\n InternalEvent,\n SubmitClientEventOptions,\n} from './metrics.types';\nimport CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';\nimport {setMetricTimings} from './call-diagnostic/call-diagnostic-metrics.util';\nimport {generateCommonErrorMetadata} from './utils';\n\n/**\n * Metrics plugin to centralize all types of metrics.\n * @class\n */\nclass Metrics extends WebexPlugin {\n // eslint-disable-next-line no-use-before-define\n static instance: Metrics;\n\n // Call Diagnostic latencies\n callDiagnosticLatencies: CallDiagnosticLatencies;\n // Helper classes to handle the different types of metrics\n callDiagnosticMetrics: CallDiagnosticMetrics;\n\n /**\n * Constructor\n * @param args\n * @constructor\n * @private\n * @returns\n */\n constructor(...args) {\n super(...args);\n\n this.onReady();\n }\n\n /**\n * On Ready\n */\n private onReady() {\n // @ts-ignore\n this.webex.once('ready', () => {\n // @ts-ignore\n this.callDiagnosticMetrics = new CallDiagnosticMetrics({}, {parent: this.webex});\n // @ts-ignore\n this.callDiagnosticLatencies = new CallDiagnosticLatencies({}, {parent: this.webex});\n });\n }\n\n /**\n * Used for internal purposes only\n * @param args\n */\n submitInternalEvent({\n name,\n payload,\n options,\n }: {\n name: InternalEvent['name'];\n payload?: RecursivePartial<InternalEvent['payload']>;\n options?: any;\n }) {\n if (name === 'internal.reset.join.latencies') {\n this.callDiagnosticLatencies.clearTimestamps();\n } else {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n }\n }\n\n /**\n * Behavioral event\n * @param args\n */\n submitBehavioralEvent({\n name,\n payload,\n options,\n }: {\n name: BehavioralEvent['name'];\n payload?: RecursivePartial<BehavioralEvent['payload']>;\n options?: any;\n }) {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n throw new Error('Not implemented.');\n }\n\n /**\n * Operational event\n * @param args\n */\n submitOperationalEvent({\n name,\n payload,\n options,\n }: {\n name: OperationalEvent['name'];\n payload?: RecursivePartial<OperationalEvent['payload']>;\n options?: any;\n }) {\n throw new Error('Not implemented.');\n }\n\n /**\n * Call Analyzer: Media Quality Event\n * @param args\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: RecursivePartial<MediaQualityEvent['payload']> & {\n intervals: MediaQualityEvent['payload']['intervals'];\n };\n options: any;\n }) {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n this.callDiagnosticMetrics.submitMQE({name, payload, options});\n }\n\n /**\n * Call Analyzer: Feature Usage Event\n * @param args\n */\n submitFeatureEvent({\n name,\n payload,\n options,\n }: {\n name: FeatureEvent['name'];\n payload?: RecursivePartial<FeatureEvent['payload']>;\n options: any;\n }) {\n throw new Error('Not implemented.');\n }\n\n /**\n * Call Analyzer: Client Event\n * @public\n * @param args\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n if (!this.callDiagnosticLatencies || !this.callDiagnosticMetrics) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitClientEvent. Attempted to submit before webex.ready. Event name: ${name}`\n );\n\n return Promise.resolve();\n }\n this.callDiagnosticLatencies.saveTimestamp({\n key: name,\n options: {meetingId: options?.meetingId},\n });\n\n return this.callDiagnosticMetrics.submitClientEvent({name, payload, options});\n }\n\n /**\n * Submit a pre-login metric to clientmetrics\n * @public\n * @param payload\n * @param preLoginId - pre-login ID of user\n * @returns\n */\n public postPreLoginMetric(payload: any, preLoginId: string): Promise<any> {\n // @ts-ignore\n return this.webex\n .request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics-prelogin',\n headers: {\n authorization: false,\n 'x-prelogin-userid': preLoginId,\n },\n body: {\n metrics: [payload],\n },\n })\n .then((res) => {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @postPreLoginMetric. Request successful:`,\n `res: ${JSON.stringify(res)}`\n );\n\n return res;\n })\n .catch((err) => {\n // @ts-ignore\n this.logger.error(\n `NewMetrics: @postPreLoginMetric. Request failed:`,\n `err: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n }\n\n /**\n * Issue request to alias a user's pre-login ID with their CI UUID\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n public clientMetricsAliasUser(preLoginId: string) {\n // @ts-ignore\n return this.webex\n .request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics',\n headers: {\n 'x-prelogin-userid': preLoginId,\n },\n body: {},\n qs: {\n alias: true,\n },\n })\n .then((res) => {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @clientMetricsAliasUser. Request successful:`,\n `res: ${JSON.stringify(res)}`\n );\n\n return res;\n })\n .catch((err) => {\n // @ts-ignore\n this.logger.error(\n `NewMetrics: @clientMetricsAliasUser. Request failed:`,\n `err: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n }\n\n /**\n * Returns a promise that will resolve to fetch options for submitting a metric.\n *\n * This is to support quickly submitting metrics when the browser/tab is closing.\n * Calling submitClientEvent will not work because there some async steps that will\n * not complete before the browser is closed. Instead, we pre-gather all the\n * information/options needed for the request(s), and then simply and quickly\n * fire the fetch(es) when beforeUnload is triggered.\n *\n * We must use fetch instead of request because fetch has a keepalive option that\n * allows the request it to outlive the page.\n *\n * Note: the timings values will be wrong, but setMetricTimingsAndFetch() will\n * properly adjust them before submitting.\n *\n * @public\n * @param {Object} arg\n * @param {String} arg.name - event name\n * @param {Object} arg.payload - event payload\n * @param {Object} arg.options - other options\n * @returns {Promise} promise that resolves to options to be used with fetch\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n return this.callDiagnosticMetrics.buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n });\n }\n\n /**\n * Submits a metric from pre-built request options via the fetch API. Updates\n * the \"$timings\" and \"originTime\" values to Date.now() since the existing times\n * were set when the options were built (not submitted).\n\n * @param {any} options - the pre-built request options for submitting a metric\n * @returns {Promise} promise that resolves to the response object\n */\n public setMetricTimingsAndFetch(options: any): Promise<any> {\n // @ts-ignore\n return this.webex.setTimingsAndFetch(setMetricTimings(options));\n }\n}\n\nexport default Metrics;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Metrics","args","onReady","webex","once","callDiagnosticMetrics","CallDiagnosticMetrics","parent","callDiagnosticLatencies","CallDiagnosticLatencies","name","payload","options","clearTimestamps","saveTimestamp","key","Error","submitMQE","logger","log","resolve","meetingId","submitClientEvent","preLoginId","request","method","api","resource","headers","authorization","body","metrics","then","res","catch","err","error","generateCommonErrorMetadata","reject","qs","alias","buildClientEventFetchRequestOptions","setTimingsAndFetch","setMetricTimings","serviceErrorCode","isServiceErrorExpected","WebexPlugin"],"sources":["new-metrics.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';\nimport {\n RecursivePartial,\n ClientEvent,\n FeatureEvent,\n BehavioralEvent,\n OperationalEvent,\n MediaQualityEvent,\n InternalEvent,\n SubmitClientEventOptions,\n} from './metrics.types';\nimport CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';\nimport {setMetricTimings} from './call-diagnostic/call-diagnostic-metrics.util';\nimport {generateCommonErrorMetadata} from './utils';\n\n/**\n * Metrics plugin to centralize all types of metrics.\n * @class\n */\nclass Metrics extends WebexPlugin {\n // eslint-disable-next-line no-use-before-define\n static instance: Metrics;\n\n // Call Diagnostic latencies\n callDiagnosticLatencies: CallDiagnosticLatencies;\n // Helper classes to handle the different types of metrics\n callDiagnosticMetrics: CallDiagnosticMetrics;\n\n /**\n * Constructor\n * @param args\n * @constructor\n * @private\n * @returns\n */\n constructor(...args) {\n super(...args);\n\n this.onReady();\n }\n\n /**\n * On Ready\n */\n private onReady() {\n // @ts-ignore\n this.webex.once('ready', () => {\n // @ts-ignore\n this.callDiagnosticMetrics = new CallDiagnosticMetrics({}, {parent: this.webex});\n // @ts-ignore\n this.callDiagnosticLatencies = new CallDiagnosticLatencies({}, {parent: this.webex});\n });\n }\n\n /**\n * Used for internal purposes only\n * @param args\n */\n submitInternalEvent({\n name,\n payload,\n options,\n }: {\n name: InternalEvent['name'];\n payload?: RecursivePartial<InternalEvent['payload']>;\n options?: any;\n }) {\n if (name === 'internal.reset.join.latencies') {\n this.callDiagnosticLatencies.clearTimestamps();\n } else {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n }\n }\n\n /**\n * Behavioral event\n * @param args\n */\n submitBehavioralEvent({\n name,\n payload,\n options,\n }: {\n name: BehavioralEvent['name'];\n payload?: RecursivePartial<BehavioralEvent['payload']>;\n options?: any;\n }) {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n throw new Error('Not implemented.');\n }\n\n /**\n * Operational event\n * @param args\n */\n submitOperationalEvent({\n name,\n payload,\n options,\n }: {\n name: OperationalEvent['name'];\n payload?: RecursivePartial<OperationalEvent['payload']>;\n options?: any;\n }) {\n throw new Error('Not implemented.');\n }\n\n /**\n * Call Analyzer: Media Quality Event\n * @param args\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: RecursivePartial<MediaQualityEvent['payload']> & {\n intervals: MediaQualityEvent['payload']['intervals'];\n };\n options: any;\n }) {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n this.callDiagnosticMetrics.submitMQE({name, payload, options});\n }\n\n /**\n * Call Analyzer: Feature Usage Event\n * @param args\n */\n submitFeatureEvent({\n name,\n payload,\n options,\n }: {\n name: FeatureEvent['name'];\n payload?: RecursivePartial<FeatureEvent['payload']>;\n options: any;\n }) {\n throw new Error('Not implemented.');\n }\n\n /**\n * Call Analyzer: Client Event\n * @public\n * @param args\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n if (!this.callDiagnosticLatencies || !this.callDiagnosticMetrics) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitClientEvent. Attempted to submit before webex.ready. Event name: ${name}`\n );\n\n return Promise.resolve();\n }\n this.callDiagnosticLatencies.saveTimestamp({\n key: name,\n options: {meetingId: options?.meetingId},\n });\n\n return this.callDiagnosticMetrics.submitClientEvent({name, payload, options});\n }\n\n /**\n * Submit a pre-login metric to clientmetrics\n * @public\n * @param payload\n * @param preLoginId - pre-login ID of user\n * @returns\n */\n public postPreLoginMetric(payload: any, preLoginId: string): Promise<any> {\n // @ts-ignore\n return this.webex\n .request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics-prelogin',\n headers: {\n authorization: false,\n 'x-prelogin-userid': preLoginId,\n },\n body: {\n metrics: [payload],\n },\n })\n .then((res) => {\n // @ts-ignore\n this.webex.logger.log(`NewMetrics: @postPreLoginMetric. Request successful:`, res);\n\n return res;\n })\n .catch((err) => {\n // @ts-ignore\n this.logger.error(\n `NewMetrics: @postPreLoginMetric. Request failed:`,\n `err: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n }\n\n /**\n * Issue request to alias a user's pre-login ID with their CI UUID\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n public clientMetricsAliasUser(preLoginId: string) {\n // @ts-ignore\n return this.webex\n .request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics',\n headers: {\n 'x-prelogin-userid': preLoginId,\n },\n body: {},\n qs: {\n alias: true,\n },\n })\n .then((res) => {\n // @ts-ignore\n this.webex.logger.log(`NewMetrics: @clientMetricsAliasUser. Request successful:`, res);\n\n return res;\n })\n .catch((err) => {\n // @ts-ignore\n this.logger.error(\n `NewMetrics: @clientMetricsAliasUser. Request failed:`,\n `err: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n }\n\n /**\n * Returns a promise that will resolve to fetch options for submitting a metric.\n *\n * This is to support quickly submitting metrics when the browser/tab is closing.\n * Calling submitClientEvent will not work because there some async steps that will\n * not complete before the browser is closed. Instead, we pre-gather all the\n * information/options needed for the request(s), and then simply and quickly\n * fire the fetch(es) when beforeUnload is triggered.\n *\n * We must use fetch instead of request because fetch has a keepalive option that\n * allows the request it to outlive the page.\n *\n * Note: the timings values will be wrong, but setMetricTimingsAndFetch() will\n * properly adjust them before submitting.\n *\n * @public\n * @param {Object} arg\n * @param {String} arg.name - event name\n * @param {Object} arg.payload - event payload\n * @param {Object} arg.options - other options\n * @returns {Promise} promise that resolves to options to be used with fetch\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n return this.callDiagnosticMetrics.buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n });\n }\n\n /**\n * Submits a metric from pre-built request options via the fetch API. Updates\n * the \"$timings\" and \"originTime\" values to Date.now() since the existing times\n * were set when the options were built (not submitted).\n\n * @param {any} options - the pre-built request options for submitting a metric\n * @returns {Promise} promise that resolves to the response object\n */\n public setMetricTimingsAndFetch(options: any): Promise<any> {\n // @ts-ignore\n return this.webex.setTimingsAndFetch(setMetricTimings(options));\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 return this.callDiagnosticMetrics.isServiceErrorExpected(serviceErrorCode);\n }\n}\n\nexport default Metrics;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAKA;AAEA;AAWA;AACA;AACA;AAAoD;AAAA;AAEpD;AACA;AACA;AACA;AAHA,IAIMA,OAAO;EAAA;EAAA;EACX;;EAGA;;EAEA;;EAGA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,mBAAqB;IAAA;IAAA;IAAA,kCAANC,IAAI;MAAJA,IAAI;IAAA;IACjB,gDAASA,IAAI;IAAE;IAAA;IAEf,MAAKC,OAAO,EAAE;IAAC;EACjB;;EAEA;AACF;AACA;EAFE;IAAA;IAAA,OAGA,mBAAkB;MAAA;MAChB;MACA,IAAI,CAACC,KAAK,CAACC,IAAI,CAAC,OAAO,EAAE,YAAM;QAC7B;QACA,MAAI,CAACC,qBAAqB,GAAG,IAAIC,8BAAqB,CAAC,CAAC,CAAC,EAAE;UAACC,MAAM,EAAE,MAAI,CAACJ;QAAK,CAAC,CAAC;QAChF;QACA,MAAI,CAACK,uBAAuB,GAAG,IAAIC,uCAAuB,CAAC,CAAC,CAAC,EAAE;UAACF,MAAM,EAAE,MAAI,CAACJ;QAAK,CAAC,CAAC;MACtF,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,mCAQG;MAAA,IAPDO,IAAI,QAAJA,IAAI;QACJC,OAAO,QAAPA,OAAO;QACPC,OAAO,QAAPA,OAAO;MAMP,IAAIF,IAAI,KAAK,+BAA+B,EAAE;QAC5C,IAAI,CAACF,uBAAuB,CAACK,eAAe,EAAE;MAChD,CAAC,MAAM;QACL,IAAI,CAACL,uBAAuB,CAACM,aAAa,CAAC;UAACC,GAAG,EAAEL;QAAI,CAAC,CAAC;MACzD;IACF;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,sCAQG;MAAA,IAPDA,IAAI,SAAJA,IAAI;QACJC,OAAO,SAAPA,OAAO;QACPC,OAAO,SAAPA,OAAO;MAMP,IAAI,CAACJ,uBAAuB,CAACM,aAAa,CAAC;QAACC,GAAG,EAAEL;MAAI,CAAC,CAAC;MACvD,MAAM,IAAIM,KAAK,CAAC,kBAAkB,CAAC;IACrC;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,uCAQG;MAAA,IAPDN,IAAI,SAAJA,IAAI;QACJC,OAAO,SAAPA,OAAO;QACPC,OAAO,SAAPA,OAAO;MAMP,MAAM,IAAII,KAAK,CAAC,kBAAkB,CAAC;IACrC;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,0BAUG;MAAA,IATDN,IAAI,SAAJA,IAAI;QACJC,OAAO,SAAPA,OAAO;QACPC,OAAO,SAAPA,OAAO;MAQP,IAAI,CAACJ,uBAAuB,CAACM,aAAa,CAAC;QAACC,GAAG,EAAEL;MAAI,CAAC,CAAC;MACvD,IAAI,CAACL,qBAAqB,CAACY,SAAS,CAAC;QAACP,IAAI,EAAJA,IAAI;QAAEC,OAAO,EAAPA,OAAO;QAAEC,OAAO,EAAPA;MAAO,CAAC,CAAC;IAChE;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,mCAQG;MAAA,IAPDF,IAAI,SAAJA,IAAI;QACJC,OAAO,SAAPA,OAAO;QACPC,OAAO,SAAPA,OAAO;MAMP,MAAM,IAAII,KAAK,CAAC,kBAAkB,CAAC;IACrC;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,kCAQiB;MAAA,IAPfN,IAAI,SAAJA,IAAI;QACJC,OAAO,SAAPA,OAAO;QACPC,OAAO,SAAPA,OAAO;MAMP,IAAI,CAAC,IAAI,CAACJ,uBAAuB,IAAI,CAAC,IAAI,CAACH,qBAAqB,EAAE;QAChE;QACA,IAAI,CAACF,KAAK,CAACe,MAAM,CAACC,GAAG,+FACoET,IAAI,EAC5F;QAED,OAAO,iBAAQU,OAAO,EAAE;MAC1B;MACA,IAAI,CAACZ,uBAAuB,CAACM,aAAa,CAAC;QACzCC,GAAG,EAAEL,IAAI;QACTE,OAAO,EAAE;UAACS,SAAS,EAAET,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAES;QAAS;MACzC,CAAC,CAAC;MAEF,OAAO,IAAI,CAAChB,qBAAqB,CAACiB,iBAAiB,CAAC;QAACZ,IAAI,EAAJA,IAAI;QAAEC,OAAO,EAAPA,OAAO;QAAEC,OAAO,EAAPA;MAAO,CAAC,CAAC;IAC/E;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,4BAA0BD,OAAY,EAAEY,UAAkB,EAAgB;MAAA;MACxE;MACA,OAAO,IAAI,CAACpB,KAAK,CACdqB,OAAO,CAAC;QACPC,MAAM,EAAE,MAAM;QACdC,GAAG,EAAE,SAAS;QACdC,QAAQ,EAAE,wBAAwB;QAClCC,OAAO,EAAE;UACPC,aAAa,EAAE,KAAK;UACpB,mBAAmB,EAAEN;QACvB,CAAC;QACDO,IAAI,EAAE;UACJC,OAAO,EAAE,CAACpB,OAAO;QACnB;MACF,CAAC,CAAC,CACDqB,IAAI,CAAC,UAACC,GAAG,EAAK;QACb;QACA,MAAI,CAAC9B,KAAK,CAACe,MAAM,CAACC,GAAG,yDAAyDc,GAAG,CAAC;QAElF,OAAOA,GAAG;MACZ,CAAC,CAAC,CACDC,KAAK,CAAC,UAACC,GAAG,EAAK;QACd;QACA,MAAI,CAACjB,MAAM,CAACkB,KAAK,oEAEP,IAAAC,kCAA2B,EAACF,GAAG,CAAC,EACzC;QAED,OAAO,iBAAQG,MAAM,CAACH,GAAG,CAAC;MAC5B,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,gCAA8BZ,UAAkB,EAAE;MAAA;MAChD;MACA,OAAO,IAAI,CAACpB,KAAK,CACdqB,OAAO,CAAC;QACPC,MAAM,EAAE,MAAM;QACdC,GAAG,EAAE,SAAS;QACdC,QAAQ,EAAE,eAAe;QACzBC,OAAO,EAAE;UACP,mBAAmB,EAAEL;QACvB,CAAC;QACDO,IAAI,EAAE,CAAC,CAAC;QACRS,EAAE,EAAE;UACFC,KAAK,EAAE;QACT;MACF,CAAC,CAAC,CACDR,IAAI,CAAC,UAACC,GAAG,EAAK;QACb;QACA,MAAI,CAAC9B,KAAK,CAACe,MAAM,CAACC,GAAG,6DAA6Dc,GAAG,CAAC;QAEtF,OAAOA,GAAG;MACZ,CAAC,CAAC,CACDC,KAAK,CAAC,UAACC,GAAG,EAAK;QACd;QACA,MAAI,CAACjB,MAAM,CAACkB,KAAK,wEAEP,IAAAC,kCAA2B,EAACF,GAAG,CAAC,EACzC;QAED,OAAO,iBAAQG,MAAM,CAACH,GAAG,CAAC;MAC5B,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EArBE;IAAA;IAAA;MAAA,mHAsBA;QAAA;QAAA;UAAA;YAAA;cACEzB,IAAI,SAAJA,IAAI,EACJC,OAAO,SAAPA,OAAO,EACPC,OAAO,SAAPA,OAAO;cAAA,iCAMA,IAAI,CAACP,qBAAqB,CAACoC,mCAAmC,CAAC;gBACpE/B,IAAI,EAAJA,IAAI;gBACJC,OAAO,EAAPA,OAAO;gBACPC,OAAO,EAAPA;cACF,CAAC,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA,CACH;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAQA,kCAAgCA,OAAY,EAAgB;MAC1D;MACA,OAAO,IAAI,CAACT,KAAK,CAACuC,kBAAkB,CAAC,IAAAC,wCAAgB,EAAC/B,OAAO,CAAC,CAAC;IACjE;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,gCAA8BgC,gBAAwB,EAAW;MAC/D,OAAO,IAAI,CAACvC,qBAAqB,CAACwC,sBAAsB,CAACD,gBAAgB,CAAC;IAC5E;EAAC;EAAA;AAAA,EA/RmBE,sBAAW;AAAA,8BAA3B9C,OAAO;AAAA,eAkSEA,OAAO;AAAA"}
|
|
@@ -381,5 +381,11 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
381
381
|
payload?: ClientEventPayload;
|
|
382
382
|
options?: SubmitClientEventOptions;
|
|
383
383
|
}): Promise<any>;
|
|
384
|
+
/**
|
|
385
|
+
* Returns true if the specified serviceErrorCode maps to an expected error.
|
|
386
|
+
* @param {number} serviceErrorCode the service error code
|
|
387
|
+
* @returns {boolean}
|
|
388
|
+
*/
|
|
389
|
+
isServiceErrorExpected(serviceErrorCode: number): boolean;
|
|
384
390
|
}
|
|
385
391
|
export {};
|
|
@@ -129,5 +129,11 @@ declare class Metrics extends WebexPlugin {
|
|
|
129
129
|
* @returns {Promise} promise that resolves to the response object
|
|
130
130
|
*/
|
|
131
131
|
setMetricTimingsAndFetch(options: any): Promise<any>;
|
|
132
|
+
/**
|
|
133
|
+
* Returns true if the specified serviceErrorCode maps to an expected error.
|
|
134
|
+
* @param {number} serviceErrorCode the service error code
|
|
135
|
+
* @returns {boolean}
|
|
136
|
+
*/
|
|
137
|
+
isServiceErrorExpected(serviceErrorCode: number): boolean;
|
|
132
138
|
}
|
|
133
139
|
export default Metrics;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-metrics",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.246",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
"build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@webex/common": "3.0.0-beta.
|
|
32
|
-
"@webex/common-timers": "3.0.0-beta.
|
|
31
|
+
"@webex/common": "3.0.0-beta.246",
|
|
32
|
+
"@webex/common-timers": "3.0.0-beta.246",
|
|
33
33
|
"@webex/event-dictionary-ts": "^1.0.1268",
|
|
34
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
35
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
36
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
38
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
34
|
+
"@webex/internal-plugin-device": "3.0.0-beta.246",
|
|
35
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.246",
|
|
36
|
+
"@webex/test-helper-chai": "3.0.0-beta.246",
|
|
37
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.246",
|
|
38
|
+
"@webex/webex-core": "3.0.0-beta.246"
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -44,7 +44,8 @@ const CallDiagnosticEventsBatcher = Batcher.extend({
|
|
|
44
44
|
this.webex.logger.log(
|
|
45
45
|
CALL_DIAGNOSTIC_LOG_IDENTIFIER,
|
|
46
46
|
`CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Sending the request:`,
|
|
47
|
-
|
|
47
|
+
'payload:',
|
|
48
|
+
payload
|
|
48
49
|
);
|
|
49
50
|
|
|
50
51
|
return this.webex
|
|
@@ -60,7 +61,8 @@ const CallDiagnosticEventsBatcher = Batcher.extend({
|
|
|
60
61
|
this.webex.logger.log(
|
|
61
62
|
CALL_DIAGNOSTIC_LOG_IDENTIFIER,
|
|
62
63
|
`CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request successful:`,
|
|
63
|
-
`response
|
|
64
|
+
`response:`,
|
|
65
|
+
res
|
|
64
66
|
);
|
|
65
67
|
|
|
66
68
|
return res;
|
|
@@ -759,4 +759,16 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
759
759
|
// @ts-ignore
|
|
760
760
|
return this.webex.prepareFetchOptions(request);
|
|
761
761
|
}
|
|
762
|
+
|
|
763
|
+
/**
|
|
764
|
+
* Returns true if the specified serviceErrorCode maps to an expected error.
|
|
765
|
+
* @param {number} serviceErrorCode the service error code
|
|
766
|
+
* @returns {boolean}
|
|
767
|
+
*/
|
|
768
|
+
public isServiceErrorExpected(serviceErrorCode: number): boolean {
|
|
769
|
+
const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];
|
|
770
|
+
const clientErrorPayload = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];
|
|
771
|
+
|
|
772
|
+
return clientErrorPayload?.category === 'expected';
|
|
773
|
+
}
|
|
762
774
|
}
|
|
@@ -98,6 +98,7 @@ const ERROR_DESCRIPTIONS = {
|
|
|
98
98
|
NO_MEDIA_FOUND: 'NoMediaFound',
|
|
99
99
|
STREAM_ERROR_NO_MEDIA: 'StreamErrorNoMedia',
|
|
100
100
|
CAMERA_PERMISSION_DENIED: 'CameraPermissionDenied',
|
|
101
|
+
FRAUD_DETECTION: 'FraudDetection',
|
|
101
102
|
};
|
|
102
103
|
|
|
103
104
|
export const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP = {
|
|
@@ -191,6 +192,8 @@ export const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP = {
|
|
|
191
192
|
2423016: 4005,
|
|
192
193
|
2423017: 4005,
|
|
193
194
|
2423018: 4005,
|
|
195
|
+
// LOCUS_OWNER_CONCURRENT_ACTIVE_MEETING_LIMIT_EXCEEDED
|
|
196
|
+
2423012: 12000,
|
|
194
197
|
// LOCUS_REQUIRES_MODERATOR_ROLE
|
|
195
198
|
2423007: 4006,
|
|
196
199
|
// LOCUS_JOIN_RESTRICTED_USER_NOT_IN_ROOM
|
|
@@ -575,6 +578,13 @@ export const CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD: Record<number, Partial<ClientEv
|
|
|
575
578
|
category: 'other',
|
|
576
579
|
fatal: true,
|
|
577
580
|
},
|
|
581
|
+
12000: {
|
|
582
|
+
errorDescription: ERROR_DESCRIPTIONS.FRAUD_DETECTION,
|
|
583
|
+
category: 'expected',
|
|
584
|
+
fatal: true,
|
|
585
|
+
name: 'locus.response',
|
|
586
|
+
shownToUser: true,
|
|
587
|
+
},
|
|
578
588
|
};
|
|
579
589
|
|
|
580
590
|
export const CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND = 'js_sdk_call_diagnostic_event_failed_to_send';
|
package/src/new-metrics.ts
CHANGED
|
@@ -201,10 +201,7 @@ class Metrics extends WebexPlugin {
|
|
|
201
201
|
})
|
|
202
202
|
.then((res) => {
|
|
203
203
|
// @ts-ignore
|
|
204
|
-
this.webex.logger.log(
|
|
205
|
-
`NewMetrics: @postPreLoginMetric. Request successful:`,
|
|
206
|
-
`res: ${JSON.stringify(res)}`
|
|
207
|
-
);
|
|
204
|
+
this.webex.logger.log(`NewMetrics: @postPreLoginMetric. Request successful:`, res);
|
|
208
205
|
|
|
209
206
|
return res;
|
|
210
207
|
})
|
|
@@ -241,10 +238,7 @@ class Metrics extends WebexPlugin {
|
|
|
241
238
|
})
|
|
242
239
|
.then((res) => {
|
|
243
240
|
// @ts-ignore
|
|
244
|
-
this.webex.logger.log(
|
|
245
|
-
`NewMetrics: @clientMetricsAliasUser. Request successful:`,
|
|
246
|
-
`res: ${JSON.stringify(res)}`
|
|
247
|
-
);
|
|
241
|
+
this.webex.logger.log(`NewMetrics: @clientMetricsAliasUser. Request successful:`, res);
|
|
248
242
|
|
|
249
243
|
return res;
|
|
250
244
|
})
|
|
@@ -309,6 +303,15 @@ class Metrics extends WebexPlugin {
|
|
|
309
303
|
// @ts-ignore
|
|
310
304
|
return this.webex.setTimingsAndFetch(setMetricTimings(options));
|
|
311
305
|
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Returns true if the specified serviceErrorCode maps to an expected error.
|
|
309
|
+
* @param {number} serviceErrorCode the service error code
|
|
310
|
+
* @returns {boolean}
|
|
311
|
+
*/
|
|
312
|
+
public isServiceErrorExpected(serviceErrorCode: number): boolean {
|
|
313
|
+
return this.callDiagnosticMetrics.isServiceErrorExpected(serviceErrorCode);
|
|
314
|
+
}
|
|
312
315
|
}
|
|
313
316
|
|
|
314
317
|
export default Metrics;
|
|
@@ -329,11 +329,7 @@ describe('plugin-metrics', () => {
|
|
|
329
329
|
// This is horrific, but stubbing lodash is proving difficult
|
|
330
330
|
const expectedBatchId = parseInt(uniqueId()) - 1;
|
|
331
331
|
|
|
332
|
-
assert.deepEqual(loggerLogCalls[1].args, [
|
|
333
|
-
'call-diagnostic-events -> ',
|
|
334
|
-
`CallDiagnosticEventsBatcher: @submitHttpRequest#call-diagnostic-metrics-batch-${expectedBatchId}. Sending the request:`,
|
|
335
|
-
`payload: [{"eventPayload":{"event":"my.event","origin":{"buildType":"test","networkType":"unknown"}},"type":["diagnostic-event"]}]`,
|
|
336
|
-
]);
|
|
332
|
+
assert.deepEqual(JSON.stringify(loggerLogCalls[1].args), `["call-diagnostic-events -> ","CallDiagnosticEventsBatcher: @submitHttpRequest#call-diagnostic-metrics-batch-${expectedBatchId}. Sending the request:","payload:",[{"eventPayload":{"event":"my.event","origin":{"buildType":"test","networkType":"unknown"}},"type":["diagnostic-event"]}]]`);
|
|
337
333
|
|
|
338
334
|
// check that promise was rejected with the original error of the webex.request
|
|
339
335
|
assert.deepEqual(err, error);
|
|
@@ -1110,6 +1110,19 @@ describe('internal-plugin-metrics', () => {
|
|
|
1110
1110
|
errorCode: 9999,
|
|
1111
1111
|
});
|
|
1112
1112
|
});
|
|
1113
|
+
|
|
1114
|
+
it('should generate event error payload correctly for locus error 2423012', () => {
|
|
1115
|
+
const res = cd.generateClientEventErrorPayload({body: {errorCode: 2423012}});
|
|
1116
|
+
assert.deepEqual(res, {
|
|
1117
|
+
category: 'expected',
|
|
1118
|
+
errorDescription: 'FraudDetection',
|
|
1119
|
+
fatal: true,
|
|
1120
|
+
name: 'locus.response',
|
|
1121
|
+
shownToUser: true,
|
|
1122
|
+
serviceErrorCode: 2423012,
|
|
1123
|
+
errorCode: 12000,
|
|
1124
|
+
});
|
|
1125
|
+
});
|
|
1113
1126
|
});
|
|
1114
1127
|
|
|
1115
1128
|
describe('#getCurLoginType', () => {
|
|
@@ -1297,5 +1310,19 @@ describe('internal-plugin-metrics', () => {
|
|
|
1297
1310
|
);
|
|
1298
1311
|
});
|
|
1299
1312
|
});
|
|
1313
|
+
|
|
1314
|
+
describe.only('#isServiceErrorExpected', () => {
|
|
1315
|
+
it('returns true for code mapped to "expected"', () => {
|
|
1316
|
+
assert.isTrue(cd.isServiceErrorExpected(2423012));
|
|
1317
|
+
});
|
|
1318
|
+
|
|
1319
|
+
it('returns false for code mapped to "signaling"', () => {
|
|
1320
|
+
assert.isFalse(cd.isServiceErrorExpected(400001));
|
|
1321
|
+
});
|
|
1322
|
+
|
|
1323
|
+
it('returns false for unmapped code', () => {
|
|
1324
|
+
assert.isFalse(cd.isServiceErrorExpected(999999));
|
|
1325
|
+
});
|
|
1326
|
+
});
|
|
1300
1327
|
});
|
|
1301
1328
|
});
|
|
@@ -157,7 +157,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
157
157
|
assert.calledWith(
|
|
158
158
|
webex.logger.log,
|
|
159
159
|
'NewMetrics: @clientMetricsAliasUser. Request successful:',
|
|
160
|
-
|
|
160
|
+
{ response: 'abc' }
|
|
161
161
|
);
|
|
162
162
|
});
|
|
163
163
|
|
|
@@ -190,7 +190,7 @@ describe('internal-plugin-metrics', () => {
|
|
|
190
190
|
assert.calledWith(
|
|
191
191
|
webex.logger.log,
|
|
192
192
|
'NewMetrics: @postPreLoginMetric. Request successful:',
|
|
193
|
-
|
|
193
|
+
{ response: 'abc' }
|
|
194
194
|
);
|
|
195
195
|
});
|
|
196
196
|
|