@webex/internal-plugin-metrics 3.0.0-beta.374 → 3.0.0-beta.376

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/batcher.js CHANGED
@@ -18,8 +18,18 @@ var _commonTimers = require("@webex/common-timers");
18
18
  */
19
19
 
20
20
  var sym = (0, _symbol.default)('metric id');
21
+
22
+ /**
23
+ * @class
24
+ * @extends Batcher
25
+ * @memberof Metrics
26
+ */
21
27
  var MetricsBatcher = _webexCore.Batcher.extend({
22
28
  namespace: 'Metrics',
29
+ /**
30
+ * @param {any} item
31
+ * @returns {Promise<any>}
32
+ */
23
33
  prepareItem: function prepareItem(item) {
24
34
  // Keep non-prod data out of metrics
25
35
  var env = process.env.NODE_ENV === 'production' ? null : 'TEST';
@@ -29,12 +39,20 @@ var MetricsBatcher = _webexCore.Batcher.extend({
29
39
  item.version = item.version || this.webex.version;
30
40
  return _promise.default.resolve(item);
31
41
  },
42
+ /**
43
+ * @param {any[]} queue
44
+ * @returns {Promise<any[]>}
45
+ */
32
46
  prepareRequest: function prepareRequest(queue) {
33
47
  return _promise.default.resolve(queue.map(function (item) {
34
48
  item.postTime = item.postTime || (0, _now.default)();
35
49
  return item;
36
50
  }));
37
51
  },
52
+ /**
53
+ * @param {any} payload
54
+ * @returns {Promise<any>}
55
+ */
38
56
  submitHttpRequest: function submitHttpRequest(payload) {
39
57
  return this.webex.request({
40
58
  method: 'POST',
@@ -46,12 +64,20 @@ var MetricsBatcher = _webexCore.Batcher.extend({
46
64
  waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout
47
65
  });
48
66
  },
67
+ /**
68
+ * @param {any} res
69
+ * @returns {Promise<any>}
70
+ */
49
71
  handleHttpSuccess: function handleHttpSuccess(res) {
50
72
  var _this = this;
51
73
  return _promise.default.all(res.options.body.metrics.map(function (item) {
52
74
  return _this.acceptItem(item);
53
75
  }));
54
76
  },
77
+ /**
78
+ * @param {any} reason
79
+ * @returns {Promise<any>}
80
+ */
55
81
  handleHttpError: function handleHttpError(reason) {
56
82
  var _this2 = this;
57
83
  if (reason instanceof _webexCore.WebexHttpError.NetworkOrCORSError) {
@@ -70,6 +96,10 @@ var MetricsBatcher = _webexCore.Batcher.extend({
70
96
  }
71
97
  return (0, _apply.default)(_webexCore.Batcher.prototype.handleHttpError, this, [reason]);
72
98
  },
99
+ /**
100
+ * @param {any} item
101
+ * @returns {Promise<any>}
102
+ */
73
103
  rerequest: function rerequest(item) {
74
104
  var _this3 = this;
75
105
  return _promise.default.all([this.getDeferredForRequest(item), this.prepareItem(item)]).then(function (_ref) {
@@ -83,12 +113,20 @@ var MetricsBatcher = _webexCore.Batcher.extend({
83
113
  });
84
114
  });
85
115
  },
116
+ /**
117
+ * @param {any} item
118
+ * @returns {Promise<any>}
119
+ */
86
120
  fingerprintRequest: function fingerprintRequest(item) {
87
121
  item[sym] = item[sym] || {
88
122
  nextDelay: 1000
89
123
  };
90
124
  return _promise.default.resolve(item[sym]);
91
125
  },
126
+ /**
127
+ * @param {any} item
128
+ * @returns {Promise<any>}
129
+ */
92
130
  fingerprintResponse: function fingerprintResponse(item) {
93
131
  return _promise.default.resolve(item[sym]);
94
132
  }
@@ -1 +1 @@
1
- {"version":3,"names":["sym","MetricsBatcher","Batcher","extend","namespace","prepareItem","item","env","process","NODE_ENV","appType","config","time","version","webex","resolve","prepareRequest","queue","map","postTime","submitHttpRequest","payload","request","method","service","resource","body","metrics","waitForServiceTimeout","handleHttpSuccess","res","all","options","acceptItem","handleHttpError","reason","WebexHttpError","NetworkOrCORSError","logger","warn","delay","nextDelay","batcherRetryPlateau","safeSetTimeout","rerequest","prototype","getDeferredForRequest","then","defer","req","enqueue","bounce","catch","reject","fingerprintRequest","fingerprintResponse"],"sources":["batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher, WebexHttpError} from '@webex/webex-core';\nimport {safeSetTimeout} from '@webex/common-timers';\n\nconst sym = Symbol('metric id');\n\nconst MetricsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n prepareItem(item) {\n // Keep non-prod data out of metrics\n const env = process.env.NODE_ENV === 'production' ? null : 'TEST';\n\n item.appType = item.appType || this.config.appType;\n item.env = item.env || env;\n item.time = item.time || Date.now();\n item.version = item.version || this.webex.version;\n\n return Promise.resolve(item);\n },\n\n prepareRequest(queue) {\n return Promise.resolve(\n queue.map((item) => {\n item.postTime = item.postTime || Date.now();\n\n return item;\n })\n );\n },\n\n submitHttpRequest(payload) {\n return this.webex.request({\n method: 'POST',\n service: 'metrics',\n resource: 'metrics',\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n });\n },\n\n handleHttpSuccess(res) {\n return Promise.all(res.options.body.metrics.map((item) => this.acceptItem(item)));\n },\n\n handleHttpError(reason) {\n if (reason instanceof WebexHttpError.NetworkOrCORSError) {\n this.logger.warn(\n 'metrics-batcher: received network error submitting metrics, reenqueuing payload'\n );\n\n return Promise.all(\n reason.options.body.metrics.map(\n (item) =>\n new Promise((resolve) => {\n const delay = item[sym].nextDelay;\n\n if (delay < this.config.batcherRetryPlateau) {\n item[sym].nextDelay *= 2;\n }\n safeSetTimeout(() => {\n resolve(this.rerequest(item));\n }, delay);\n })\n )\n );\n }\n\n return Reflect.apply(Batcher.prototype.handleHttpError, this, [reason]);\n },\n\n rerequest(item) {\n return Promise.all([this.getDeferredForRequest(item), this.prepareItem(item)]).then(\n ([defer, req]) => {\n this.enqueue(req)\n .then(() => this.bounce())\n .catch((reason) => defer.reject(reason));\n }\n );\n },\n\n fingerprintRequest(item) {\n item[sym] = item[sym] || {\n nextDelay: 1000,\n };\n\n return Promise.resolve(item[sym]);\n },\n\n fingerprintResponse(item) {\n return Promise.resolve(item[sym]);\n },\n});\n\nexport default MetricsBatcher;\n"],"mappings":"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"}
1
+ {"version":3,"names":["sym","MetricsBatcher","Batcher","extend","namespace","prepareItem","item","env","process","NODE_ENV","appType","config","time","version","webex","resolve","prepareRequest","queue","map","postTime","submitHttpRequest","payload","request","method","service","resource","body","metrics","waitForServiceTimeout","handleHttpSuccess","res","all","options","acceptItem","handleHttpError","reason","WebexHttpError","NetworkOrCORSError","logger","warn","delay","nextDelay","batcherRetryPlateau","safeSetTimeout","rerequest","prototype","getDeferredForRequest","then","defer","req","enqueue","bounce","catch","reject","fingerprintRequest","fingerprintResponse"],"sources":["batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher, WebexHttpError} from '@webex/webex-core';\nimport {safeSetTimeout} from '@webex/common-timers';\n\nconst sym = Symbol('metric id');\n\n/**\n * @class\n * @extends Batcher\n * @memberof Metrics\n */\nconst MetricsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n /**\n * @param {any} item\n * @returns {Promise<any>}\n */\n prepareItem(item) {\n // Keep non-prod data out of metrics\n const env = process.env.NODE_ENV === 'production' ? null : 'TEST';\n\n item.appType = item.appType || this.config.appType;\n item.env = item.env || env;\n item.time = item.time || Date.now();\n item.version = item.version || this.webex.version;\n\n return Promise.resolve(item);\n },\n\n /**\n * @param {any[]} queue\n * @returns {Promise<any[]>}\n */\n prepareRequest(queue) {\n return Promise.resolve(\n queue.map((item) => {\n item.postTime = item.postTime || Date.now();\n\n return item;\n })\n );\n },\n\n /**\n * @param {any} payload\n * @returns {Promise<any>}\n */\n submitHttpRequest(payload) {\n return this.webex.request({\n method: 'POST',\n service: 'metrics',\n resource: 'metrics',\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n });\n },\n\n /**\n * @param {any} res\n * @returns {Promise<any>}\n */\n handleHttpSuccess(res) {\n return Promise.all(res.options.body.metrics.map((item) => this.acceptItem(item)));\n },\n\n /**\n * @param {any} reason\n * @returns {Promise<any>}\n */\n handleHttpError(reason) {\n if (reason instanceof WebexHttpError.NetworkOrCORSError) {\n this.logger.warn(\n 'metrics-batcher: received network error submitting metrics, reenqueuing payload'\n );\n\n return Promise.all(\n reason.options.body.metrics.map(\n (item) =>\n new Promise((resolve) => {\n const delay = item[sym].nextDelay;\n\n if (delay < this.config.batcherRetryPlateau) {\n item[sym].nextDelay *= 2;\n }\n safeSetTimeout(() => {\n resolve(this.rerequest(item));\n }, delay);\n })\n )\n );\n }\n\n return Reflect.apply(Batcher.prototype.handleHttpError, this, [reason]);\n },\n\n /**\n * @param {any} item\n * @returns {Promise<any>}\n */\n rerequest(item) {\n return Promise.all([this.getDeferredForRequest(item), this.prepareItem(item)]).then(\n ([defer, req]) => {\n this.enqueue(req)\n .then(() => this.bounce())\n .catch((reason) => defer.reject(reason));\n }\n );\n },\n\n /**\n * @param {any} item\n * @returns {Promise<any>}\n */\n fingerprintRequest(item) {\n item[sym] = item[sym] || {\n nextDelay: 1000,\n };\n\n return Promise.resolve(item[sym]);\n },\n\n /**\n * @param {any} item\n * @returns {Promise<any>}\n */\n fingerprintResponse(item) {\n return Promise.resolve(item[sym]);\n },\n});\n\nexport default MetricsBatcher;\n"],"mappings":"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"}
@@ -16,16 +16,16 @@ var CallDiagnosticEventsBatcher = _batcher.default.extend({
16
16
  namespace: 'Metrics',
17
17
  /**
18
18
  * Prepare item
19
- * @param item
20
- * @returns
19
+ * @param {any} item
20
+ * @returns {Promise<any>}
21
21
  */
22
22
  prepareItem: function prepareItem(item) {
23
23
  return _promise.default.resolve((0, _callDiagnosticMetrics.prepareDiagnosticMetricItem)(this.webex, item));
24
24
  },
25
25
  /**
26
26
  * Prepare request, add time sensitive date etc.
27
- * @param queue
28
- * @returns
27
+ * @param {any[]} queue
28
+ * @returns {Promise<any[]>}
29
29
  */
30
30
  prepareRequest: function prepareRequest(queue) {
31
31
  // Add sent timestamp
@@ -37,8 +37,8 @@ var CallDiagnosticEventsBatcher = _batcher.default.extend({
37
37
  },
38
38
  /**
39
39
  *
40
- * @param payload
41
- * @returns
40
+ * @param {any} payload
41
+ * @returns {Promise<any>}
42
42
  */
43
43
  submitHttpRequest: function submitHttpRequest(payload) {
44
44
  var _this = this;
@@ -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","request","method","service","resource","body","metrics","waitForServiceTimeout","config","then","res","logger","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","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('ca-batch-');\n\n return this.webex\n .request({\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n })\n .then((res) => {\n this.webex.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request successful.`\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,WAAW,CAAC;IAErC,OAAO,IAAI,CAACX,KAAK,CACdY,OAAO,CAAC;MACPC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE,SAAS;MAClBC,QAAQ,EAAE,eAAe;MACzBC,IAAI,EAAE;QACJC,OAAO,EAAEP;MACX,CAAC;MACDQ,qBAAqB,EAAE,IAAI,CAAClB,KAAK,CAACmB,MAAM,CAACF,OAAO,CAACC;IACnD,CAAC,CAAC,CACDE,IAAI,CAAC,UAACC,GAAG,EAAK;MACb,KAAI,CAACrB,KAAK,CAACsB,MAAM,CAACC,GAAG,CACnBC,sCAA8B,4DACqBb,OAAO,2BAC3D;MAED,OAAOU,GAAG;IACZ,CAAC,CAAC,CACDI,KAAK,CAAC,UAACC,GAAG,EAAK;MACd,KAAI,CAAC1B,KAAK,CAACsB,MAAM,CAACK,KAAK,CACrBH,sCAA8B,4DACqBb,OAAO,yCAChD,IAAAiB,kCAA2B,EAACF,GAAG,CAAC,EAC3C;MAED,OAAO,iBAAQG,MAAM,CAACH,GAAG,CAAC;IAC5B,CAAC,CAAC;EACN;AACF,CAAC,CAAC;AAAC,eAEYlC,2BAA2B;AAAA"}
1
+ {"version":3,"names":["CallDiagnosticEventsBatcher","Batcher","extend","namespace","prepareItem","item","resolve","prepareDiagnosticMetricItem","webex","prepareRequest","queue","forEach","eventPayload","originTime","sent","Date","toISOString","submitHttpRequest","payload","batchId","request","method","service","resource","body","metrics","waitForServiceTimeout","config","then","res","logger","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","catch","err","error","generateCommonErrorMetadata","reject"],"sources":["call-diagnostic-metrics-batcher.ts"],"sourcesContent":["import {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 {any} item\n * @returns {Promise<any>}\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 {any[]} queue\n * @returns {Promise<any[]>}\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 {any} payload\n * @returns {Promise<any>}\n */\n submitHttpRequest(payload) {\n const batchId = uniqueId('ca-batch-');\n\n return this.webex\n .request({\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n })\n .then((res) => {\n this.webex.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request successful.`\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":";;;;;;;;;;AACA;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,WAAW,CAAC;IAErC,OAAO,IAAI,CAACX,KAAK,CACdY,OAAO,CAAC;MACPC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE,SAAS;MAClBC,QAAQ,EAAE,eAAe;MACzBC,IAAI,EAAE;QACJC,OAAO,EAAEP;MACX,CAAC;MACDQ,qBAAqB,EAAE,IAAI,CAAClB,KAAK,CAACmB,MAAM,CAACF,OAAO,CAACC;IACnD,CAAC,CAAC,CACDE,IAAI,CAAC,UAACC,GAAG,EAAK;MACb,KAAI,CAACrB,KAAK,CAACsB,MAAM,CAACC,GAAG,CACnBC,sCAA8B,4DACqBb,OAAO,2BAC3D;MAED,OAAOU,GAAG;IACZ,CAAC,CAAC,CACDI,KAAK,CAAC,UAACC,GAAG,EAAK;MACd,KAAI,CAAC1B,KAAK,CAACsB,MAAM,CAACK,KAAK,CACrBH,sCAA8B,4DACqBb,OAAO,yCAChD,IAAAiB,kCAA2B,EAACF,GAAG,CAAC,EAC3C;MAED,OAAO,iBAAQG,MAAM,CAACH,GAAG,CAAC;IAC5B,CAAC,CAAC;EACN;AACF,CAAC,CAAC;AAAC,eAEYlC,2BAA2B;AAAA"}
@@ -31,6 +31,7 @@ var _webexCore = require("@webex/webex-core");
31
31
  var _callDiagnosticMetrics = require("./call-diagnostic-metrics.util");
32
32
  var _config = require("../config");
33
33
  var _callDiagnosticMetricsBatcher = _interopRequireDefault(require("./call-diagnostic-metrics-batcher"));
34
+ var _preloginMetricsBatcher = _interopRequireDefault(require("../prelogin-metrics-batcher"));
34
35
  var _config2 = require("./config");
35
36
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
36
37
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -50,6 +51,8 @@ var CallDiagnosticMetrics = /*#__PURE__*/function (_StatelessWebexPlugin) {
50
51
  var _super = _createSuper(CallDiagnosticMetrics);
51
52
  // @ts-ignore
52
53
 
54
+ // @ts-ignore
55
+
53
56
  // to avoid adding @ts-ignore everywhere
54
57
 
55
58
  // the default validator before piping an event to the batcher
@@ -68,6 +71,7 @@ var CallDiagnosticMetrics = /*#__PURE__*/function (_StatelessWebexPlugin) {
68
71
  _this = _super.call.apply(_super, [this].concat(args));
69
72
  // @ts-ignore
70
73
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "callDiagnosticEventsBatcher", void 0);
74
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "preLoginMetricsBatcher", void 0);
71
75
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "logger", void 0);
72
76
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasLoggedBrowserSerial", void 0);
73
77
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "validator", function (options) {
@@ -78,23 +82,22 @@ var CallDiagnosticMetrics = /*#__PURE__*/function (_StatelessWebexPlugin) {
78
82
  });
79
83
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "submitToCallDiagnosticsPreLogin", function (event, preLoginId) {
80
84
  // build metrics-a event type
81
- // @ts-ignore
82
- var diagnosticEvent = (0, _callDiagnosticMetrics.prepareDiagnosticMetricItem)(_this.webex, {
85
+ var finalEvent = {
83
86
  eventPayload: event,
84
87
  type: ['diagnostic-event']
85
- });
86
-
87
- // append sent timestamp
88
- diagnosticEvent.eventPayload.originTime.sent = new Date().toISOString();
89
-
90
- // @ts-ignore
91
- return _this.webex.internal.newMetrics.postPreLoginMetric(diagnosticEvent, preLoginId);
88
+ };
89
+ _this.preLoginMetricsBatcher.savePreLoginId(preLoginId);
90
+ return _this.preLoginMetricsBatcher.request(finalEvent);
92
91
  });
93
92
  _this.logger = _this.webex.logger;
94
93
  // @ts-ignore
95
94
  _this.callDiagnosticEventsBatcher = new _callDiagnosticMetricsBatcher.default({}, {
96
95
  parent: _this.webex
97
96
  });
97
+ // @ts-ignore
98
+ _this.preLoginMetricsBatcher = new _preloginMetricsBatcher.default({}, {
99
+ parent: _this.webex
100
+ });
98
101
  return _this;
99
102
  }
100
103
 
@@ -752,7 +755,7 @@ var CallDiagnosticMetrics = /*#__PURE__*/function (_StatelessWebexPlugin) {
752
755
  }
753
756
 
754
757
  /**
755
- * Pre login events are not batched. We make the request directly.
758
+ * Prepare the event and send the request to metrics-a service, pre login.
756
759
  * @param event
757
760
  * @param preLoginId
758
761
  * @returns
@@ -1 +1 @@
1
- {"version":3,"names":["BrowserDetection","getOSVersion","getBrowserName","getBrowserVersion","CallDiagnosticMetrics","args","options","resolve","event","valid","preLoginId","diagnosticEvent","prepareDiagnosticMetricItem","webex","eventPayload","type","originTime","sent","Date","toISOString","internal","newMetrics","postPreLoginMetric","logger","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","parent","canAuthorize","credentials","isUnverifiedGuest","meetingId","meeting","meetings","meetingCollection","get","meetingInfo","enableConvergedArchitecture","undefined","webexScheduled","enableEvent","pmr","WEBEX_SUB_SERVICE_TYPES","PMR","SCHEDULED_MEETING","WEBINAR","defaultClientType","config","metrics","clientType","defaultSubClientType","subClientType","providedClientVersion","clientVersion","defaultSDKClientVersion","CLIENT_NAME","version","versionMetadata","extractVersionMetadata","hasLoggedBrowserSerial","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","getBrowserSerial","origin","name","networkType","userAgent","userAgentToString","clientName","webexVersion","clientInfo","publicNetworkPrefix","anonymizeIPAddress","geoHintInfo","clientAddress","localNetworkPrefix","statsAnalyzer","getLocalIpAddress","osVersion","os","getOSNameInternal","browser","browserVersion","environment","newEnvironment","clientLaunchMethod","Error","mediaConnections","correlationId","webexConferenceIdStr","globalMeetingId","identifiers","device","userId","deviceId","url","orgId","locusUrl","services","locusInfo","fullState","locusId","split","pop","locusStartTime","lastActive","confIdStr","confID","siteName","webexSiteName","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","validator","submitToCallDiagnostics","clientErrorCode","serviceErrorCode","serviceErrorName","rawErrorMessage","payloadOverrides","error","partialParsedError","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","fatal","shownToUser","category","errorCode","errorData","errorName","rawError","message","isBrowserMediaErrorName","getErrorPayloadForClientErrorCode","BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP","isSdpOfferCreationError","causeType","cause","SDP_OFFER_CREATION_ERROR_MAP","GENERAL","body","code","reason","reasonCode","SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP","isLocusServiceErrorCode","NEW_LOCUS_ERROR_CLIENT_CODE","isMeetingInfoServiceError","MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE","isNetworkError","NETWORK_ERROR","isUnauthorizedError","AUTHENTICATION_FAILED_CODE","UNKNOWN_ERROR","errors","userType","getCurUserType","loginType","callStateForMetrics","getCurLoginType","isConvergedArchitectureEnabled","getIsConvergedArchitectureEnabled","webexSubServiceType","getSubServiceType","generatedError","generateClientEventErrorPayload","push","createClientEventObjectInMeeting","createClientEventObjectPreMeeting","prepareClientEvent","submitToCallDiagnosticsPreLogin","finalEvent","request","clientEvent","method","service","resource","headers","waitForServiceTimeout","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, getBrowserSerial} 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 isNetworkError,\n isUnauthorizedError,\n isSdpOfferCreationError,\n} from './call-diagnostic-metrics.util';\nimport {CLIENT_NAME} from '../config';\nimport {\n Event,\n ClientType,\n SubClientType,\n NetworkType,\n EnvironmentType,\n NewEnvironmentType,\n ClientEvent,\n SubmitClientEventOptions,\n MediaQualityEvent,\n SubmitMQEOptions,\n SubmitMQEPayload,\n ClientLaunchMethodType,\n ClientEventError,\n ClientEventPayload,\n ClientInfo,\n ClientEventPayloadError,\n ClientSubServiceType,\n} 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 NETWORK_ERROR,\n AUTHENTICATION_FAILED_CODE,\n WEBEX_SUB_SERVICE_TYPES,\n SDP_OFFER_CREATION_ERROR_MAP,\n} from './config';\n\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 preLoginId?: string;\n globalMeetingId?: string;\n webexConferenceIdStr?: string;\n};\n\n/**\n * @description Util class to handle Call Analyzer Metrics\n * @export\n * @class CallDiagnosticMetrics\n */\nexport default class CallDiagnosticMetrics extends StatelessWebexPlugin {\n // @ts-ignore\n private callDiagnosticEventsBatcher: CallDiagnosticEventsBatcher;\n private logger: any; // to avoid adding @ts-ignore everywhere\n private hasLoggedBrowserSerial: boolean;\n // the default validator before piping an event to the batcher\n // this function can be overridden by the user\n public validator: (options: {\n type: 'mqe' | 'ce';\n event: Event;\n }) => Promise<{event: Event; valid: boolean}> = (options: {type: 'mqe' | 'ce'; event: Event}) =>\n Promise.resolve({event: options?.event, valid: true});\n\n /**\n * Constructor\n * @param args\n */\n constructor(...args) {\n super(...args);\n // @ts-ignore\n this.logger = this.webex.logger;\n // @ts-ignore\n this.callDiagnosticEventsBatcher = new CallDiagnosticEventsBatcher({}, {parent: this.webex});\n }\n\n /**\n * Returns the login type of the current user\n * @returns one of 'login-ci','unverified-guest', null\n */\n getCurLoginType() {\n // @ts-ignore\n if (this.webex.canAuthorize) {\n // @ts-ignore\n return this.webex.credentials.isUnverifiedGuest ? 'unverified-guest' : 'login-ci';\n }\n\n return null;\n }\n\n /**\n * Returns if the meeting has converged architecture enabled\n * @param options.meetingId\n */\n getIsConvergedArchitectureEnabled({meetingId}: {meetingId?: string}): boolean {\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n\n return meeting?.meetingInfo?.enableConvergedArchitecture;\n }\n\n return undefined;\n }\n\n /**\n * Returns meeting's subServiceType\n * @param meeting\n * @returns\n */\n getSubServiceType(meeting?: any): ClientSubServiceType {\n if (meeting) {\n // @ts-ignore\n const meetingInfo = meeting?.meetingInfo;\n // if not Scheduled, not Webinar, pmr - then pmr\n if (!meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.PMR;\n }\n // if Scheduled, not Webinar, not pmr - then ScheduledMeeting\n if (meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.SCHEDULED_MEETING;\n }\n // if Scheduled, Webinar, not pmr - then Webinar\n if (meetingInfo?.webexScheduled && meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.WEBINAR;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get origin object for Call Diagnostic Event payload.\n * @param options\n * @param meetingId\n * @returns\n */\n getOrigin(options: GetOriginOptions, meetingId?: string) {\n const defaultClientType: ClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.clientType;\n const defaultSubClientType: SubClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.subClientType;\n // @ts-ignore\n const providedClientVersion: string = this.webex.meetings.config?.metrics?.clientVersion;\n // @ts-ignore\n const defaultSDKClientVersion = `${CLIENT_NAME}/${this.webex.version}`;\n\n let versionMetadata: Pick<ClientInfo, 'majorVersion' | 'minorVersion'> = {};\n\n // sdk version split doesn't really make sense for now...\n if (providedClientVersion) {\n versionMetadata = extractVersionMetadata(providedClientVersion);\n }\n\n if (!this.hasLoggedBrowserSerial) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticMetrics: @createClientEventObjectInMeeting => collected browser data`,\n JSON.stringify(getBrowserSerial())\n );\n\n this.hasLoggedBrowserSerial = true;\n }\n\n if (\n (defaultClientType && defaultSubClientType) ||\n (options.clientType && options.subClientType)\n ) {\n const origin: Event['origin'] = {\n name: 'endpoint',\n networkType: options?.networkType || 'unknown',\n userAgent: userAgentToString({\n // @ts-ignore\n clientName: this.webex.meetings?.config?.metrics?.clientName,\n // @ts-ignore\n webexVersion: this.webex.version,\n }),\n clientInfo: {\n clientType: options?.clientType || defaultClientType,\n clientVersion: providedClientVersion || defaultSDKClientVersion,\n ...versionMetadata,\n publicNetworkPrefix:\n // @ts-ignore\n anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress) || undefined,\n localNetworkPrefix:\n anonymizeIPAddress(\n // @ts-ignore\n this.webex.meetings.meetingCollection\n .get(meetingId)\n ?.statsAnalyzer?.getLocalIpAddress()\n ) || undefined,\n osVersion: getOSVersion() || 'unknown',\n subClientType: options?.subClientType || defaultSubClientType,\n os: getOSNameInternal(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion(),\n },\n };\n\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n if (meeting?.environment) {\n origin.environment = meeting.environment;\n }\n }\n\n if (options?.environment) {\n origin.environment = options.environment;\n }\n\n if (options?.newEnvironment) {\n origin.newEnvironment = options.newEnvironment;\n }\n\n if (options?.clientLaunchMethod) {\n origin.clientInfo.clientLaunchMethod = options.clientLaunchMethod;\n }\n\n return origin;\n }\n\n throw new Error(\"ClientType and SubClientType can't be undefined\");\n }\n\n /**\n * Gather identifier details for call diagnostic payload.\n * @throws Error if initialization fails.\n * @param options\n */\n getIdentifiers(options: GetIdentifiersOptions) {\n const {\n meeting,\n mediaConnections,\n correlationId,\n webexConferenceIdStr,\n globalMeetingId,\n preLoginId,\n } = options;\n const identifiers: Event['event']['identifiers'] = {\n correlationId: 'unknown',\n };\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 || preLoginId;\n identifiers.deviceId = device.url;\n identifiers.orgId = device.orgId;\n // @ts-ignore\n identifiers.locusUrl = this.webex.internal.services.get('locus');\n }\n\n if (meeting?.locusInfo?.fullState) {\n identifiers.locusUrl = meeting.locusUrl;\n identifiers.locusId = meeting.locusUrl && meeting.locusUrl.split('/').pop();\n identifiers.locusStartTime =\n meeting.locusInfo.fullState && meeting.locusInfo.fullState.lastActive;\n }\n\n if (meeting?.meetingInfo?.confIdStr || meeting?.meetingInfo?.confID) {\n identifiers.webexConferenceIdStr = `${\n meeting.meetingInfo?.confIdStr || meeting.meetingInfo?.confID\n }`;\n }\n\n if (meeting?.meetingInfo?.meetingId) {\n identifiers.globalMeetingId = meeting.meetingInfo?.meetingId;\n }\n\n if (meeting?.meetingInfo?.siteName) {\n identifiers.webexSiteName = meeting.meetingInfo?.siteName;\n }\n\n if (mediaConnections) {\n identifiers.mediaAgentAlias = mediaConnections?.[0]?.mediaAgentAlias;\n identifiers.mediaAgentGroupId = mediaConnections?.[0]?.mediaAgentGroupId;\n }\n\n if (!identifiers?.webexConferenceIdStr && webexConferenceIdStr) {\n identifiers.webexConferenceIdStr = `${webexConferenceIdStr}`;\n }\n\n if (!identifiers?.globalMeetingId && globalMeetingId) {\n identifiers.globalMeetingId = globalMeetingId;\n }\n\n if (identifiers.correlationId === undefined) {\n throw new Error('Identifiers initialization failed.');\n }\n\n return identifiers;\n }\n\n /**\n * Create diagnostic event, which can hold client event, feature event or MQE event data.\n * This just initiates the shared properties that are required for all the 3 event categories.\n * @param eventData\n * @param options\n * @returns\n */\n prepareDiagnosticEvent(eventData: Event['event'], options: any) {\n const {meetingId} = options;\n const origin = this.getOrigin(options, meetingId);\n\n const event: Event = {\n eventId: uuid.v4(),\n version: 1,\n origin,\n originTime: {\n triggered: new Date().toISOString(),\n // is overridden in prepareRequest batcher\n sent: 'not_defined_yet',\n },\n // @ts-ignore\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: eventData,\n };\n\n // sanitize (remove empty properties, CA requires it)\n // but we don't want to sanitize MQE as most of the times\n // values will be 0, [] etc, and they are required.\n if (eventData.name !== 'client.mediaquality.event') {\n clearEmptyKeysRecursively(event);\n }\n\n return event;\n }\n\n /**\n * TODO: NOT IMPLEMENTED\n * Submit Feature Event\n * @returns\n */\n public submitFeatureEvent() {\n throw Error('Not implemented');\n }\n\n /**\n * Submit Media Quality Event\n * @param args - submit params\n * @param arg.name - event key\n * @param arg.payload - additional payload to be merge with the default payload\n * @param arg.options - options\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: SubmitMQEPayload;\n options: SubmitMQEOptions;\n }) {\n const {meetingId, mediaConnections, webexConferenceIdStr, globalMeetingId} = options;\n\n // events that will most likely happen in join phase\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send MQE but no meeting was found...',\n `event: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return;\n }\n\n // merge identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n });\n\n // create media quality event object\n let clientEventObject: MediaQualityEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n intervals: payload.intervals,\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n // @ts-ignore\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || 'unknown',\n startTime: new Date().toISOString(),\n },\n };\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append media quality event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n this.validator({type: 'mqe', event: diagnosticEvent});\n this.submitToCallDiagnostics(diagnosticEvent);\n } else {\n throw new Error(\n 'Media quality events cant be sent outside the context of a meeting. Meeting id is required.'\n );\n }\n }\n\n /**\n * Return Client Event payload by client error code\n * @param arg - get error arg\n * @param arg.clientErrorCode\n * @param arg.serviceErrorCode\n * @param arg.payloadOverrides\n * @returns\n */\n public getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n serviceErrorName,\n rawErrorMessage,\n payloadOverrides,\n }: {\n clientErrorCode: number;\n serviceErrorCode: any;\n serviceErrorName?: any;\n rawErrorMessage?: string;\n payloadOverrides?: 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 {rawErrorMessage},\n partialParsedError,\n payloadOverrides || {}\n );\n\n return error;\n }\n }\n\n return undefined;\n }\n\n /**\n * Generate error payload for Client Event\n * @param rawError\n */\n generateClientEventErrorPayload(rawError: any) {\n const rawErrorMessage = rawError.message;\n if (rawError.name) {\n if (isBrowserMediaErrorName(rawError.name)) {\n return this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode: BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP[rawError.name],\n serviceErrorName: rawError.name,\n rawErrorMessage,\n });\n }\n }\n\n if (isSdpOfferCreationError(rawError)) {\n // error code is 30005, but that's not specific enough. we also need to check error.cause.type\n const causeType = rawError.cause?.type;\n\n return this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode:\n SDP_OFFER_CREATION_ERROR_MAP[causeType] || SDP_OFFER_CREATION_ERROR_MAP.GENERAL,\n serviceErrorName: rawError.name,\n rawErrorMessage,\n });\n }\n\n const serviceErrorCode =\n rawError?.error?.body?.errorCode ||\n rawError?.body?.errorCode ||\n rawError?.body?.code ||\n rawError?.body?.reason?.reasonCode;\n\n if (serviceErrorCode) {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n if (clientErrorCode) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n rawErrorMessage,\n });\n }\n\n // by default, if it is locus error, return new locus err\n if (isLocusServiceErrorCode(serviceErrorCode)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NEW_LOCUS_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n });\n }\n }\n\n if (isMeetingInfoServiceError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n });\n }\n\n if (isNetworkError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NETWORK_ERROR,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n });\n }\n\n if (isUnauthorizedError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: AUTHENTICATION_FAILED_CODE,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n });\n }\n\n // otherwise return unkown error\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: UNKNOWN_ERROR,\n serviceErrorCode: UNKNOWN_ERROR,\n rawErrorMessage,\n });\n }\n\n /**\n * Create client event object for in meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - options\n * @returns object\n */\n private createClientEventObjectInMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {meetingId, mediaConnections, globalMeetingId, webexConferenceIdStr} = options;\n\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send client event but no meeting was found...',\n `name: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return undefined;\n }\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting?.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n errors,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n userType: meeting.getCurUserType(),\n loginType:\n 'loginType' in meeting.callStateForMetrics\n ? meeting.callStateForMetrics.loginType\n : this.getCurLoginType(),\n isConvergedArchitectureEnabled: this.getIsConvergedArchitectureEnabled({\n meetingId,\n }),\n webexSubServiceType: this.getSubServiceType(meeting),\n };\n\n return clientEventObject;\n }\n\n /**\n * Create client event object for pre meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - payload\n * @returns object\n */\n private createClientEventObjectPreMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {correlationId, globalMeetingId, webexConferenceIdStr, preLoginId} = options;\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n correlationId,\n preLoginId,\n globalMeetingId,\n webexConferenceIdStr,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n errors,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n loginType: this.getCurLoginType(),\n };\n\n return clientEventObject;\n }\n\n /**\n * Prepare Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @returns {any} options to be with fetch\n * @throws\n */\n private prepareClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n const {meetingId, correlationId, rawError} = options;\n let clientEventObject: ClientEvent['payload'];\n\n // check if we need to generate errors\n const errors: ClientEventPayloadError = [];\n\n if (rawError) {\n const generatedError = this.generateClientEventErrorPayload(rawError);\n if (generatedError) {\n errors.push(generatedError);\n }\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @prepareClientEvent. Generated errors:',\n `generatedError: ${JSON.stringify(generatedError)}`\n );\n }\n\n // events that will most likely happen in join phase\n if (meetingId) {\n clientEventObject = this.createClientEventObjectInMeeting({name, options, errors});\n } else if (correlationId) {\n // any pre join events or events that are outside the meeting.\n clientEventObject = this.createClientEventObjectPreMeeting({name, options, errors});\n } else {\n throw new Error('Not implemented');\n }\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append client event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n\n return diagnosticEvent;\n }\n\n /**\n * Submit Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @throws\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitClientEvent. Submit Client Event CA event.',\n `name: ${name}`\n );\n const diagnosticEvent = this.prepareClientEvent({name, payload, options});\n\n if (options?.preLoginId) {\n return this.submitToCallDiagnosticsPreLogin(diagnosticEvent, options?.preLoginId);\n }\n\n this.validator({type: 'ce', event: diagnosticEvent});\n\n return this.submitToCallDiagnostics(diagnosticEvent);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service.\n * @param event\n * @returns promise\n */\n submitToCallDiagnostics(event: Event): Promise<any> {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n };\n\n return this.callDiagnosticEventsBatcher.request(finalEvent);\n }\n\n /**\n * 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 // @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 );\n\n const clientEvent = this.prepareClientEvent({name, payload, options});\n\n // build metrics-a event type\n // @ts-ignore\n const diagnosticEvent = prepareDiagnosticMetricItem(this.webex, {\n eventPayload: clientEvent,\n type: ['diagnostic-event'],\n });\n\n const request = {\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: [diagnosticEvent],\n },\n headers: {},\n // @ts-ignore\n waitForServiceTimeout: this.webex.internal.metrics.config.waitForServiceTimeout,\n };\n\n if (options.preLoginId) {\n request.headers = {\n authorization: false,\n 'x-prelogin-userid': options.preLoginId,\n };\n request.resource = 'clientmetrics-prelogin';\n }\n\n // @ts-ignore\n return this.webex.prepareFetchOptions(request);\n }\n\n /**\n * Returns true if the specified serviceErrorCode maps to an expected error.\n * @param {number} serviceErrorCode the service error code\n * @returns {boolean}\n */\n public isServiceErrorExpected(serviceErrorCode: number): boolean {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n const clientErrorPayload = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n return clientErrorPayload?.category === 'expected';\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["BrowserDetection","getOSVersion","getBrowserName","getBrowserVersion","CallDiagnosticMetrics","args","options","resolve","event","valid","preLoginId","finalEvent","eventPayload","type","preLoginMetricsBatcher","savePreLoginId","request","logger","webex","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","parent","PreLoginMetricsBatcher","canAuthorize","credentials","isUnverifiedGuest","meetingId","meeting","meetings","meetingCollection","get","meetingInfo","enableConvergedArchitecture","undefined","webexScheduled","enableEvent","pmr","WEBEX_SUB_SERVICE_TYPES","PMR","SCHEDULED_MEETING","WEBINAR","defaultClientType","config","metrics","clientType","defaultSubClientType","subClientType","providedClientVersion","clientVersion","defaultSDKClientVersion","CLIENT_NAME","version","versionMetadata","extractVersionMetadata","hasLoggedBrowserSerial","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","getBrowserSerial","origin","name","networkType","userAgent","userAgentToString","clientName","webexVersion","clientInfo","publicNetworkPrefix","anonymizeIPAddress","geoHintInfo","clientAddress","localNetworkPrefix","statsAnalyzer","getLocalIpAddress","osVersion","os","getOSNameInternal","browser","browserVersion","environment","newEnvironment","clientLaunchMethod","Error","mediaConnections","correlationId","webexConferenceIdStr","globalMeetingId","identifiers","internal","device","userId","deviceId","url","orgId","locusUrl","services","locusInfo","fullState","locusId","split","pop","locusStartTime","lastActive","confIdStr","confID","siteName","webexSiteName","mediaAgentAlias","mediaAgentGroupId","eventData","getOrigin","eventId","uuid","v4","originTime","triggered","Date","toISOString","sent","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","diagnosticEvent","prepareDiagnosticEvent","validator","submitToCallDiagnostics","clientErrorCode","serviceErrorCode","serviceErrorName","rawErrorMessage","payloadOverrides","error","partialParsedError","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","fatal","shownToUser","category","errorCode","errorData","errorName","rawError","message","isBrowserMediaErrorName","getErrorPayloadForClientErrorCode","BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP","isSdpOfferCreationError","causeType","cause","SDP_OFFER_CREATION_ERROR_MAP","GENERAL","body","code","reason","reasonCode","SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP","isLocusServiceErrorCode","NEW_LOCUS_ERROR_CLIENT_CODE","isMeetingInfoServiceError","MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE","isNetworkError","NETWORK_ERROR","isUnauthorizedError","AUTHENTICATION_FAILED_CODE","UNKNOWN_ERROR","errors","userType","getCurUserType","loginType","callStateForMetrics","getCurLoginType","isConvergedArchitectureEnabled","getIsConvergedArchitectureEnabled","webexSubServiceType","getSubServiceType","generatedError","generateClientEventErrorPayload","push","createClientEventObjectInMeeting","createClientEventObjectPreMeeting","prepareClientEvent","submitToCallDiagnosticsPreLogin","clientEvent","prepareDiagnosticMetricItem","method","service","resource","headers","waitForServiceTimeout","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, getBrowserSerial} 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 isNetworkError,\n isUnauthorizedError,\n isSdpOfferCreationError,\n} from './call-diagnostic-metrics.util';\nimport {CLIENT_NAME} from '../config';\nimport {\n Event,\n ClientType,\n SubClientType,\n NetworkType,\n EnvironmentType,\n NewEnvironmentType,\n ClientEvent,\n SubmitClientEventOptions,\n MediaQualityEvent,\n SubmitMQEOptions,\n SubmitMQEPayload,\n ClientLaunchMethodType,\n ClientEventError,\n ClientEventPayload,\n ClientInfo,\n ClientEventPayloadError,\n ClientSubServiceType,\n} from '../metrics.types';\nimport CallDiagnosticEventsBatcher from './call-diagnostic-metrics-batcher';\nimport PreLoginMetricsBatcher from '../prelogin-metrics-batcher';\n\nimport {\n CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD,\n CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND,\n NEW_LOCUS_ERROR_CLIENT_CODE,\n SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP,\n UNKNOWN_ERROR,\n BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP,\n MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n NETWORK_ERROR,\n AUTHENTICATION_FAILED_CODE,\n WEBEX_SUB_SERVICE_TYPES,\n SDP_OFFER_CREATION_ERROR_MAP,\n} from './config';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\ntype GetOriginOptions = {\n clientType: ClientType;\n subClientType: SubClientType;\n networkType?: NetworkType;\n clientLaunchMethod?: ClientLaunchMethodType;\n environment?: EnvironmentType;\n newEnvironment?: NewEnvironmentType;\n};\n\ntype GetIdentifiersOptions = {\n meeting?: any;\n mediaConnections?: any[];\n correlationId?: string;\n preLoginId?: string;\n globalMeetingId?: string;\n webexConferenceIdStr?: string;\n};\n\n/**\n * @description Util class to handle Call Analyzer Metrics\n * @export\n * @class CallDiagnosticMetrics\n */\nexport default class CallDiagnosticMetrics extends StatelessWebexPlugin {\n // @ts-ignore\n private callDiagnosticEventsBatcher: CallDiagnosticEventsBatcher;\n // @ts-ignore\n private preLoginMetricsBatcher: PreLoginMetricsBatcher;\n\n private logger: any; // to avoid adding @ts-ignore everywhere\n private hasLoggedBrowserSerial: boolean;\n // the default validator before piping an event to the batcher\n // this function can be overridden by the user\n public validator: (options: {\n type: 'mqe' | 'ce';\n event: Event;\n }) => Promise<{event: Event; valid: boolean}> = (options: {type: 'mqe' | 'ce'; event: Event}) =>\n Promise.resolve({event: options?.event, valid: true});\n\n /**\n * Constructor\n * @param args\n */\n constructor(...args) {\n super(...args);\n // @ts-ignore\n this.logger = this.webex.logger;\n // @ts-ignore\n this.callDiagnosticEventsBatcher = new CallDiagnosticEventsBatcher({}, {parent: this.webex});\n // @ts-ignore\n this.preLoginMetricsBatcher = new PreLoginMetricsBatcher({}, {parent: this.webex});\n }\n\n /**\n * Returns the login type of the current user\n * @returns one of 'login-ci','unverified-guest', null\n */\n getCurLoginType() {\n // @ts-ignore\n if (this.webex.canAuthorize) {\n // @ts-ignore\n return this.webex.credentials.isUnverifiedGuest ? 'unverified-guest' : 'login-ci';\n }\n\n return null;\n }\n\n /**\n * Returns if the meeting has converged architecture enabled\n * @param options.meetingId\n */\n getIsConvergedArchitectureEnabled({meetingId}: {meetingId?: string}): boolean {\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n\n return meeting?.meetingInfo?.enableConvergedArchitecture;\n }\n\n return undefined;\n }\n\n /**\n * Returns meeting's subServiceType\n * @param meeting\n * @returns\n */\n getSubServiceType(meeting?: any): ClientSubServiceType {\n if (meeting) {\n // @ts-ignore\n const meetingInfo = meeting?.meetingInfo;\n // if not Scheduled, not Webinar, pmr - then pmr\n if (!meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.PMR;\n }\n // if Scheduled, not Webinar, not pmr - then ScheduledMeeting\n if (meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.SCHEDULED_MEETING;\n }\n // if Scheduled, Webinar, not pmr - then Webinar\n if (meetingInfo?.webexScheduled && meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.WEBINAR;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get origin object for Call Diagnostic Event payload.\n * @param options\n * @param meetingId\n * @returns\n */\n getOrigin(options: GetOriginOptions, meetingId?: string) {\n const defaultClientType: ClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.clientType;\n const defaultSubClientType: SubClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.subClientType;\n // @ts-ignore\n const providedClientVersion: string = this.webex.meetings.config?.metrics?.clientVersion;\n // @ts-ignore\n const defaultSDKClientVersion = `${CLIENT_NAME}/${this.webex.version}`;\n\n let versionMetadata: Pick<ClientInfo, 'majorVersion' | 'minorVersion'> = {};\n\n // sdk version split doesn't really make sense for now...\n if (providedClientVersion) {\n versionMetadata = extractVersionMetadata(providedClientVersion);\n }\n\n if (!this.hasLoggedBrowserSerial) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticMetrics: @createClientEventObjectInMeeting => collected browser data`,\n JSON.stringify(getBrowserSerial())\n );\n\n this.hasLoggedBrowserSerial = true;\n }\n\n if (\n (defaultClientType && defaultSubClientType) ||\n (options.clientType && options.subClientType)\n ) {\n const origin: Event['origin'] = {\n name: 'endpoint',\n networkType: options?.networkType || 'unknown',\n userAgent: userAgentToString({\n // @ts-ignore\n clientName: this.webex.meetings?.config?.metrics?.clientName,\n // @ts-ignore\n webexVersion: this.webex.version,\n }),\n clientInfo: {\n clientType: options?.clientType || defaultClientType,\n clientVersion: providedClientVersion || defaultSDKClientVersion,\n ...versionMetadata,\n publicNetworkPrefix:\n // @ts-ignore\n anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress) || undefined,\n localNetworkPrefix:\n anonymizeIPAddress(\n // @ts-ignore\n this.webex.meetings.meetingCollection\n .get(meetingId)\n ?.statsAnalyzer?.getLocalIpAddress()\n ) || undefined,\n osVersion: getOSVersion() || 'unknown',\n subClientType: options?.subClientType || defaultSubClientType,\n os: getOSNameInternal(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion(),\n },\n };\n\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n if (meeting?.environment) {\n origin.environment = meeting.environment;\n }\n }\n\n if (options?.environment) {\n origin.environment = options.environment;\n }\n\n if (options?.newEnvironment) {\n origin.newEnvironment = options.newEnvironment;\n }\n\n if (options?.clientLaunchMethod) {\n origin.clientInfo.clientLaunchMethod = options.clientLaunchMethod;\n }\n\n return origin;\n }\n\n throw new Error(\"ClientType and SubClientType can't be undefined\");\n }\n\n /**\n * Gather identifier details for call diagnostic payload.\n * @throws Error if initialization fails.\n * @param options\n */\n getIdentifiers(options: GetIdentifiersOptions) {\n const {\n meeting,\n mediaConnections,\n correlationId,\n webexConferenceIdStr,\n globalMeetingId,\n preLoginId,\n } = options;\n const identifiers: Event['event']['identifiers'] = {\n correlationId: 'unknown',\n };\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 || preLoginId;\n identifiers.deviceId = device.url;\n identifiers.orgId = device.orgId;\n // @ts-ignore\n identifiers.locusUrl = this.webex.internal.services.get('locus');\n }\n\n if (meeting?.locusInfo?.fullState) {\n identifiers.locusUrl = meeting.locusUrl;\n identifiers.locusId = meeting.locusUrl && meeting.locusUrl.split('/').pop();\n identifiers.locusStartTime =\n meeting.locusInfo.fullState && meeting.locusInfo.fullState.lastActive;\n }\n\n if (meeting?.meetingInfo?.confIdStr || meeting?.meetingInfo?.confID) {\n identifiers.webexConferenceIdStr = `${\n meeting.meetingInfo?.confIdStr || meeting.meetingInfo?.confID\n }`;\n }\n\n if (meeting?.meetingInfo?.meetingId) {\n identifiers.globalMeetingId = meeting.meetingInfo?.meetingId;\n }\n\n if (meeting?.meetingInfo?.siteName) {\n identifiers.webexSiteName = meeting.meetingInfo?.siteName;\n }\n\n if (mediaConnections) {\n identifiers.mediaAgentAlias = mediaConnections?.[0]?.mediaAgentAlias;\n identifiers.mediaAgentGroupId = mediaConnections?.[0]?.mediaAgentGroupId;\n }\n\n if (!identifiers?.webexConferenceIdStr && webexConferenceIdStr) {\n identifiers.webexConferenceIdStr = `${webexConferenceIdStr}`;\n }\n\n if (!identifiers?.globalMeetingId && globalMeetingId) {\n identifiers.globalMeetingId = globalMeetingId;\n }\n\n if (identifiers.correlationId === undefined) {\n throw new Error('Identifiers initialization failed.');\n }\n\n return identifiers;\n }\n\n /**\n * Create diagnostic event, which can hold client event, feature event or MQE event data.\n * This just initiates the shared properties that are required for all the 3 event categories.\n * @param eventData\n * @param options\n * @returns\n */\n prepareDiagnosticEvent(eventData: Event['event'], options: any) {\n const {meetingId} = options;\n const origin = this.getOrigin(options, meetingId);\n\n const event: Event = {\n eventId: uuid.v4(),\n version: 1,\n origin,\n originTime: {\n triggered: new Date().toISOString(),\n // is overridden in prepareRequest batcher\n sent: 'not_defined_yet',\n },\n // @ts-ignore\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: eventData,\n };\n\n // sanitize (remove empty properties, CA requires it)\n // but we don't want to sanitize MQE as most of the times\n // values will be 0, [] etc, and they are required.\n if (eventData.name !== 'client.mediaquality.event') {\n clearEmptyKeysRecursively(event);\n }\n\n return event;\n }\n\n /**\n * TODO: NOT IMPLEMENTED\n * Submit Feature Event\n * @returns\n */\n public submitFeatureEvent() {\n throw Error('Not implemented');\n }\n\n /**\n * Submit Media Quality Event\n * @param args - submit params\n * @param arg.name - event key\n * @param arg.payload - additional payload to be merge with the default payload\n * @param arg.options - options\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: SubmitMQEPayload;\n options: SubmitMQEOptions;\n }) {\n const {meetingId, mediaConnections, webexConferenceIdStr, globalMeetingId} = options;\n\n // events that will most likely happen in join phase\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send MQE but no meeting was found...',\n `event: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return;\n }\n\n // merge identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n });\n\n // create media quality event object\n let clientEventObject: MediaQualityEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n intervals: payload.intervals,\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n // @ts-ignore\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || 'unknown',\n startTime: new Date().toISOString(),\n },\n };\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append media quality event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n this.validator({type: 'mqe', event: diagnosticEvent});\n this.submitToCallDiagnostics(diagnosticEvent);\n } else {\n throw new Error(\n 'Media quality events cant be sent outside the context of a meeting. Meeting id is required.'\n );\n }\n }\n\n /**\n * Return Client Event payload by client error code\n * @param arg - get error arg\n * @param arg.clientErrorCode\n * @param arg.serviceErrorCode\n * @param arg.payloadOverrides\n * @returns\n */\n public getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n serviceErrorName,\n rawErrorMessage,\n payloadOverrides,\n }: {\n clientErrorCode: number;\n serviceErrorCode: any;\n serviceErrorName?: any;\n rawErrorMessage?: string;\n payloadOverrides?: 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 {rawErrorMessage},\n partialParsedError,\n payloadOverrides || {}\n );\n\n return error;\n }\n }\n\n return undefined;\n }\n\n /**\n * Generate error payload for Client Event\n * @param rawError\n */\n generateClientEventErrorPayload(rawError: any) {\n const rawErrorMessage = rawError.message;\n if (rawError.name) {\n if (isBrowserMediaErrorName(rawError.name)) {\n return this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode: BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP[rawError.name],\n serviceErrorName: rawError.name,\n rawErrorMessage,\n });\n }\n }\n\n if (isSdpOfferCreationError(rawError)) {\n // error code is 30005, but that's not specific enough. we also need to check error.cause.type\n const causeType = rawError.cause?.type;\n\n return this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode:\n SDP_OFFER_CREATION_ERROR_MAP[causeType] || SDP_OFFER_CREATION_ERROR_MAP.GENERAL,\n serviceErrorName: rawError.name,\n rawErrorMessage,\n });\n }\n\n const serviceErrorCode =\n rawError?.error?.body?.errorCode ||\n rawError?.body?.errorCode ||\n rawError?.body?.code ||\n rawError?.body?.reason?.reasonCode;\n\n if (serviceErrorCode) {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n if (clientErrorCode) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n rawErrorMessage,\n });\n }\n\n // by default, if it is locus error, return new locus err\n if (isLocusServiceErrorCode(serviceErrorCode)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NEW_LOCUS_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n });\n }\n }\n\n if (isMeetingInfoServiceError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n });\n }\n\n if (isNetworkError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NETWORK_ERROR,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n });\n }\n\n if (isUnauthorizedError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: AUTHENTICATION_FAILED_CODE,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n });\n }\n\n // otherwise return unkown error\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: UNKNOWN_ERROR,\n serviceErrorCode: UNKNOWN_ERROR,\n rawErrorMessage,\n });\n }\n\n /**\n * Create client event object for in meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - options\n * @returns object\n */\n private createClientEventObjectInMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {meetingId, mediaConnections, globalMeetingId, webexConferenceIdStr} = options;\n\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send client event but no meeting was found...',\n `name: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return undefined;\n }\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting?.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n errors,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n userType: meeting.getCurUserType(),\n loginType:\n 'loginType' in meeting.callStateForMetrics\n ? meeting.callStateForMetrics.loginType\n : this.getCurLoginType(),\n isConvergedArchitectureEnabled: this.getIsConvergedArchitectureEnabled({\n meetingId,\n }),\n webexSubServiceType: this.getSubServiceType(meeting),\n };\n\n return clientEventObject;\n }\n\n /**\n * Create client event object for pre meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - payload\n * @returns object\n */\n private createClientEventObjectPreMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {correlationId, globalMeetingId, webexConferenceIdStr, preLoginId} = options;\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n correlationId,\n preLoginId,\n globalMeetingId,\n webexConferenceIdStr,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n errors,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n loginType: this.getCurLoginType(),\n };\n\n return clientEventObject;\n }\n\n /**\n * Prepare Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @returns {any} options to be with fetch\n * @throws\n */\n private prepareClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n const {meetingId, correlationId, rawError} = options;\n let clientEventObject: ClientEvent['payload'];\n\n // check if we need to generate errors\n const errors: ClientEventPayloadError = [];\n\n if (rawError) {\n const generatedError = this.generateClientEventErrorPayload(rawError);\n if (generatedError) {\n errors.push(generatedError);\n }\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @prepareClientEvent. Generated errors:',\n `generatedError: ${JSON.stringify(generatedError)}`\n );\n }\n\n // events that will most likely happen in join phase\n if (meetingId) {\n clientEventObject = this.createClientEventObjectInMeeting({name, options, errors});\n } else if (correlationId) {\n // any pre join events or events that are outside the meeting.\n clientEventObject = this.createClientEventObjectPreMeeting({name, options, errors});\n } else {\n throw new Error('Not implemented');\n }\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append client event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n\n return diagnosticEvent;\n }\n\n /**\n * Submit Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @throws\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitClientEvent. Submit Client Event CA event.',\n `name: ${name}`\n );\n const diagnosticEvent = this.prepareClientEvent({name, payload, options});\n\n if (options?.preLoginId) {\n return this.submitToCallDiagnosticsPreLogin(diagnosticEvent, options?.preLoginId);\n }\n\n this.validator({type: 'ce', event: diagnosticEvent});\n\n return this.submitToCallDiagnostics(diagnosticEvent);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service.\n * @param event\n * @returns promise\n */\n submitToCallDiagnostics(event: Event): Promise<any> {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n };\n\n return this.callDiagnosticEventsBatcher.request(finalEvent);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service, pre login.\n * @param event\n * @param preLoginId\n * @returns\n */\n submitToCallDiagnosticsPreLogin = (event: Event, preLoginId?: string): Promise<any> => {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n };\n this.preLoginMetricsBatcher.savePreLoginId(preLoginId);\n\n return this.preLoginMetricsBatcher.request(finalEvent);\n };\n\n /**\n * Builds a request options object to later be passed to fetch().\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - client event options\n * @returns {Promise<any>}\n * @throws\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @buildClientEventFetchRequestOptions. Building request options object for fetch()...',\n `name: ${name}`\n );\n\n const clientEvent = this.prepareClientEvent({name, payload, options});\n\n // build metrics-a event type\n // @ts-ignore\n const diagnosticEvent = prepareDiagnosticMetricItem(this.webex, {\n eventPayload: clientEvent,\n type: ['diagnostic-event'],\n });\n\n const request = {\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: [diagnosticEvent],\n },\n headers: {},\n // @ts-ignore\n waitForServiceTimeout: this.webex.internal.metrics.config.waitForServiceTimeout,\n };\n\n if (options.preLoginId) {\n request.headers = {\n authorization: false,\n 'x-prelogin-userid': options.preLoginId,\n };\n request.resource = 'clientmetrics-prelogin';\n }\n\n // @ts-ignore\n return this.webex.prepareFetchOptions(request);\n }\n\n /**\n * Returns true if the specified serviceErrorCode maps to an expected error.\n * @param {number} serviceErrorCode the service error code\n * @returns {boolean}\n */\n public isServiceErrorExpected(serviceErrorCode: number): boolean {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n const clientErrorPayload = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n return clientErrorPayload?.category === 'expected';\n }\n}\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,7 +8,20 @@ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequ
8
8
  _Object$defineProperty(exports, "__esModule", {
9
9
  value: true
10
10
  });
11
- exports.CallDiagnosticUtils = exports.CALL_DIAGNOSTIC_CONFIG = void 0;
11
+ exports.CALL_DIAGNOSTIC_CONFIG = void 0;
12
+ _Object$defineProperty(exports, "CallDiagnosticLatencies", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _callDiagnosticMetricsLatencies.default;
16
+ }
17
+ });
18
+ _Object$defineProperty(exports, "CallDiagnosticMetrics", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _callDiagnosticMetrics2.default;
22
+ }
23
+ });
24
+ exports.CallDiagnosticUtils = void 0;
12
25
  _Object$defineProperty(exports, "NewMetrics", {
13
26
  enumerable: true,
14
27
  get: function get() {
@@ -45,6 +58,8 @@ var CALL_DIAGNOSTIC_CONFIG = _interopRequireWildcard(require("./call-diagnostic/
45
58
  exports.CALL_DIAGNOSTIC_CONFIG = CALL_DIAGNOSTIC_CONFIG;
46
59
  var CallDiagnosticUtils = _interopRequireWildcard(require("./call-diagnostic/call-diagnostic-metrics.util"));
47
60
  exports.CallDiagnosticUtils = CallDiagnosticUtils;
61
+ var _callDiagnosticMetrics2 = _interopRequireDefault(require("./call-diagnostic/call-diagnostic-metrics"));
62
+ var _callDiagnosticMetricsLatencies = _interopRequireDefault(require("./call-diagnostic/call-diagnostic-metrics-latencies"));
48
63
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
49
64
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
50
65
  /*!
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["registerInternalPlugin","Metrics","config","NewMetrics"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Metrics from './metrics';\nimport config from './config';\nimport NewMetrics from './new-metrics';\nimport * as Utils from './utils';\nimport {\n ClientEvent,\n ClientEventLeaveReason,\n SubmitBehavioralEvent,\n SubmitClientEvent,\n SubmitInternalEvent,\n SubmitOperationalEvent,\n SubmitMQE,\n} from './metrics.types';\nimport * as CALL_DIAGNOSTIC_CONFIG from './call-diagnostic/config';\nimport * as CallDiagnosticUtils from './call-diagnostic/call-diagnostic-metrics.util';\n\nregisterInternalPlugin('metrics', Metrics, {\n config,\n});\n\nregisterInternalPlugin('newMetrics', NewMetrics, {\n config,\n});\n\nexport {default, getOSNameInternal} from './metrics';\nexport {config, CALL_DIAGNOSTIC_CONFIG, NewMetrics, Utils, CallDiagnosticUtils};\nexport type {\n ClientEvent,\n ClientEventLeaveReason,\n SubmitBehavioralEvent,\n SubmitClientEvent,\n SubmitInternalEvent,\n SubmitMQE,\n SubmitOperationalEvent,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;AAEA;AAEA;AACA;AACA;AACA;AAAiC;AAUjC;AAAmE;AACnE;AAAsF;AAAA;AAAA;AAtBtF;AACA;AACA;;AAsBA,IAAAA,iCAAsB,EAAC,SAAS,EAAEC,gBAAO,EAAE;EACzCC,MAAM,EAANA;AACF,CAAC,CAAC;AAEF,IAAAF,iCAAsB,EAAC,YAAY,EAAEG,mBAAU,EAAE;EAC/CD,MAAM,EAANA;AACF,CAAC,CAAC"}
1
+ {"version":3,"names":["registerInternalPlugin","Metrics","config","NewMetrics"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Metrics from './metrics';\nimport config from './config';\nimport NewMetrics from './new-metrics';\nimport * as Utils from './utils';\nimport {\n ClientEvent,\n ClientEventLeaveReason,\n SubmitBehavioralEvent,\n SubmitClientEvent,\n SubmitInternalEvent,\n SubmitOperationalEvent,\n SubmitMQE,\n} from './metrics.types';\nimport * as CALL_DIAGNOSTIC_CONFIG from './call-diagnostic/config';\nimport * as CallDiagnosticUtils from './call-diagnostic/call-diagnostic-metrics.util';\nimport CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';\nimport CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';\n\nregisterInternalPlugin('metrics', Metrics, {\n config,\n});\n\nregisterInternalPlugin('newMetrics', NewMetrics, {\n config,\n});\n\nexport {default, getOSNameInternal} from './metrics';\n\nexport {\n config,\n CALL_DIAGNOSTIC_CONFIG,\n NewMetrics,\n Utils,\n CallDiagnosticUtils,\n CallDiagnosticLatencies,\n CallDiagnosticMetrics,\n};\nexport type {\n ClientEvent,\n ClientEventLeaveReason,\n SubmitBehavioralEvent,\n SubmitClientEvent,\n SubmitInternalEvent,\n SubmitMQE,\n SubmitOperationalEvent,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;AAEA;AAEA;AACA;AACA;AACA;AAAiC;AAUjC;AAAmE;AACnE;AAAsF;AACtF;AACA;AAA0F;AAAA;AAxB1F;AACA;AACA;;AAwBA,IAAAA,iCAAsB,EAAC,SAAS,EAAEC,gBAAO,EAAE;EACzCC,MAAM,EAANA;AACF,CAAC,CAAC;AAEF,IAAAF,iCAAsB,EAAC,YAAY,EAAEG,mBAAU,EAAE;EAC/CD,MAAM,EAANA;AACF,CAAC,CAAC"}
package/dist/metrics.js CHANGED
@@ -161,7 +161,7 @@ var Metrics = _webexCore.WebexPlugin.extend({
161
161
  });
162
162
  });
163
163
  },
164
- version: "3.0.0-beta.374"
164
+ version: "3.0.0-beta.376"
165
165
  });
166
166
  var _default = Metrics;
167
167
  exports.default = _default;
@@ -187,40 +187,6 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
187
187
  });
188
188
  }
189
189
 
190
- /**
191
- * Submit a pre-login metric to clientmetrics
192
- * @public
193
- * @param payload
194
- * @param preLoginId - pre-login ID of user
195
- * @returns
196
- */
197
- }, {
198
- key: "postPreLoginMetric",
199
- value: function postPreLoginMetric(payload, preLoginId) {
200
- var _this3 = this;
201
- // @ts-ignore
202
- return this.webex.request({
203
- method: 'POST',
204
- api: 'metrics',
205
- resource: 'clientmetrics-prelogin',
206
- headers: {
207
- authorization: false,
208
- 'x-prelogin-userid': preLoginId
209
- },
210
- body: {
211
- metrics: [payload]
212
- }
213
- }).then(function (res) {
214
- // @ts-ignore
215
- _this3.webex.logger.log("NewMetrics: @postPreLoginMetric. Request successful.");
216
- return res;
217
- }).catch(function (err) {
218
- // @ts-ignore
219
- _this3.logger.error("NewMetrics: @postPreLoginMetric. Request failed:", "err: ".concat((0, _utils.generateCommonErrorMetadata)(err)));
220
- return _promise.default.reject(err);
221
- });
222
- }
223
-
224
190
  /**
225
191
  * Issue request to alias a user's pre-login ID with their CI UUID
226
192
  * @param {string} preLoginId
@@ -229,7 +195,7 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
229
195
  }, {
230
196
  key: "clientMetricsAliasUser",
231
197
  value: function clientMetricsAliasUser(preLoginId) {
232
- var _this4 = this;
198
+ var _this3 = this;
233
199
  // @ts-ignore
234
200
  return this.webex.request({
235
201
  method: 'POST',
@@ -244,11 +210,11 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
244
210
  }
245
211
  }).then(function (res) {
246
212
  // @ts-ignore
247
- _this4.webex.logger.log("NewMetrics: @clientMetricsAliasUser. Request successful.");
213
+ _this3.webex.logger.log("NewMetrics: @clientMetricsAliasUser. Request successful.");
248
214
  return res;
249
215
  }).catch(function (err) {
250
216
  // @ts-ignore
251
- _this4.logger.error("NewMetrics: @clientMetricsAliasUser. Request failed:", "err: ".concat((0, _utils.generateCommonErrorMetadata)(err)));
217
+ _this3.logger.error("NewMetrics: @clientMetricsAliasUser. Request failed:", "err: ".concat((0, _utils.generateCommonErrorMetadata)(err)));
252
218
  return _promise.default.reject(err);
253
219
  });
254
220
  }