@webex/internal-plugin-metrics 3.5.0 → 3.6.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/business-metrics.js +119 -9
  2. package/dist/business-metrics.js.map +1 -1
  3. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +1 -1
  4. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
  5. package/dist/call-diagnostic/call-diagnostic-metrics.js +24 -7
  6. package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
  7. package/dist/call-diagnostic/call-diagnostic-metrics.util.js +7 -2
  8. package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
  9. package/dist/call-diagnostic/config.js +13 -3
  10. package/dist/call-diagnostic/config.js.map +1 -1
  11. package/dist/index.js +7 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/metrics.js +1 -1
  14. package/dist/metrics.types.js.map +1 -1
  15. package/dist/new-metrics.js +5 -2
  16. package/dist/new-metrics.js.map +1 -1
  17. package/dist/rtcMetrics/constants.js +11 -0
  18. package/dist/rtcMetrics/constants.js.map +1 -0
  19. package/dist/rtcMetrics/index.js +223 -0
  20. package/dist/rtcMetrics/index.js.map +1 -0
  21. package/dist/types/business-metrics.d.ts +36 -4
  22. package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +4 -1
  23. package/dist/types/call-diagnostic/config.d.ts +3 -0
  24. package/dist/types/index.d.ts +2 -1
  25. package/dist/types/metrics.types.d.ts +19 -2
  26. package/dist/types/new-metrics.d.ts +5 -3
  27. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  28. package/dist/types/rtcMetrics/index.d.ts +80 -0
  29. package/package.json +12 -12
  30. package/src/business-metrics.ts +97 -5
  31. package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +1 -1
  32. package/src/call-diagnostic/call-diagnostic-metrics.ts +25 -7
  33. package/src/call-diagnostic/call-diagnostic-metrics.util.ts +11 -5
  34. package/src/call-diagnostic/config.ts +12 -0
  35. package/src/index.ts +2 -0
  36. package/src/metrics.types.ts +98 -23
  37. package/src/new-metrics.ts +12 -2
  38. package/src/rtcMetrics/constants.ts +3 -0
  39. package/src/rtcMetrics/index.ts +205 -0
  40. package/test/unit/spec/business/business-metrics.ts +69 -2
  41. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +2 -1
  42. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +4 -6
  43. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +451 -15
  44. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +7 -3
  45. package/test/unit/spec/new-metrics.ts +18 -3
  46. package/test/unit/spec/prelogin-metrics-batcher.ts +3 -1
  47. package/test/unit/spec/rtcMetrics/index.ts +196 -0
  48. package/dist/behavioral/behavioral-metrics.js +0 -199
  49. package/dist/behavioral/behavioral-metrics.js.map +0 -1
  50. package/dist/behavioral/config.js +0 -11
  51. package/dist/behavioral/config.js.map +0 -1
  52. package/dist/types/behavioral/behavioral-metrics.d.ts +0 -63
  53. package/dist/types/behavioral/config.d.ts +0 -1
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
4
+ var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
5
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
7
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
+ _Object$defineProperty(exports, "__esModule", {
9
+ value: true
10
+ });
11
+ exports.default = void 0;
12
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
13
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
16
+ var _uuid = _interopRequireDefault(require("uuid"));
17
+ var CallDiagnosticUtils = _interopRequireWildcard(require("../call-diagnostic/call-diagnostic-metrics.util"));
18
+ var _constants = _interopRequireDefault(require("./constants"));
19
+ function _getRequireWildcardCache(e) { if ("function" != typeof _WeakMap) return null; var r = new _WeakMap(), t = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
20
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? _Object$getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? _Object$defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
+ /* eslint-disable class-methods-use-this */
22
+
23
+ var parseJsonPayload = function parseJsonPayload(payload) {
24
+ try {
25
+ if (payload && payload[0]) {
26
+ return JSON.parse(payload[0]);
27
+ }
28
+ return null;
29
+ } catch (_) {
30
+ return null;
31
+ }
32
+ };
33
+
34
+ /**
35
+ * Rtc Metrics
36
+ */
37
+ var RtcMetrics = exports.default = /*#__PURE__*/function () {
38
+ /**
39
+ * Initialize the interval.
40
+ *
41
+ * @param {object} webex - The main `webex` object.
42
+ * @param {IdType} Ids - Meeting or Calling id.
43
+ * @param {string} correlationId - The correlation id.
44
+ */
45
+ function RtcMetrics(webex, _ref, correlationId) {
46
+ var meetingId = _ref.meetingId,
47
+ callId = _ref.callId;
48
+ (0, _classCallCheck2.default)(this, RtcMetrics);
49
+ /**
50
+ * Array of MetricData items to be sent to the metrics service.
51
+ */
52
+ (0, _defineProperty2.default)(this, "metricsQueue", []);
53
+ (0, _defineProperty2.default)(this, "intervalId", void 0);
54
+ (0, _defineProperty2.default)(this, "webex", void 0);
55
+ (0, _defineProperty2.default)(this, "meetingId", void 0);
56
+ (0, _defineProperty2.default)(this, "callId", void 0);
57
+ (0, _defineProperty2.default)(this, "correlationId", void 0);
58
+ (0, _defineProperty2.default)(this, "connectionId", void 0);
59
+ (0, _defineProperty2.default)(this, "shouldSendMetricsOnNextStatsReport", void 0);
60
+ // `window` is used to prevent typescript from returning a NodeJS.Timer.
61
+ this.intervalId = window.setInterval(this.sendMetricsInQueue.bind(this), 30 * 1000);
62
+ this.meetingId = meetingId;
63
+ this.callId = callId;
64
+ this.webex = webex;
65
+ this.correlationId = correlationId;
66
+ this.resetConnection();
67
+ }
68
+
69
+ /**
70
+ * Updates the call identifier with the provided value.
71
+ *
72
+ * @param {string} callId - The new call identifier to set.
73
+ * @returns {void}
74
+ */
75
+ (0, _createClass2.default)(RtcMetrics, [{
76
+ key: "updateCallId",
77
+ value: function updateCallId(callId) {
78
+ this.callId = callId;
79
+ }
80
+
81
+ /**
82
+ * Check to see if the metrics queue has any items.
83
+ *
84
+ * @returns {void}
85
+ */
86
+ }, {
87
+ key: "sendMetricsInQueue",
88
+ value: function sendMetricsInQueue() {
89
+ if (this.metricsQueue.length) {
90
+ this.sendMetrics();
91
+ this.metricsQueue = [];
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Forces sending metrics when we get the next stats-report
97
+ *
98
+ * This is useful for cases when something important happens that affects the media connection,
99
+ * for example when we move from lobby into the meeting.
100
+ *
101
+ * @returns {void}
102
+ */
103
+ }, {
104
+ key: "sendNextMetrics",
105
+ value: function sendNextMetrics() {
106
+ this.shouldSendMetricsOnNextStatsReport = true;
107
+ }
108
+
109
+ /**
110
+ * Add metrics items to the metrics queue.
111
+ *
112
+ * @param {object} data - An object with a payload array of metrics items.
113
+ *
114
+ * @returns {void}
115
+ */
116
+ }, {
117
+ key: "addMetrics",
118
+ value: function addMetrics(data) {
119
+ if (data.payload.length) {
120
+ if (data.name === 'stats-report') {
121
+ data.payload = data.payload.map(this.anonymizeIp);
122
+ }
123
+ this.metricsQueue.push(data);
124
+ if (this.shouldSendMetricsOnNextStatsReport && data.name === 'stats-report') {
125
+ // this is the first useful set of data (WCME gives it to us after 5s), send it out immediately
126
+ // in case the user is unhappy and closes the browser early
127
+ this.sendMetricsInQueue();
128
+ this.shouldSendMetricsOnNextStatsReport = false;
129
+ }
130
+ try {
131
+ // If a connection fails, send the rest of the metrics in queue and get a new connection id.
132
+ var parsedPayload = parseJsonPayload(data.payload);
133
+ if (data.name === 'onconnectionstatechange' && parsedPayload && parsedPayload.value === 'failed') {
134
+ this.sendMetricsInQueue();
135
+ this.resetConnection();
136
+ }
137
+ } catch (e) {
138
+ console.error(e);
139
+ }
140
+ }
141
+ }
142
+
143
+ /**
144
+ * Clear the metrics interval.
145
+ *
146
+ * @returns {void}
147
+ */
148
+ }, {
149
+ key: "closeMetrics",
150
+ value: function closeMetrics() {
151
+ this.sendMetricsInQueue();
152
+ clearInterval(this.intervalId);
153
+ }
154
+
155
+ /**
156
+ * Anonymize IP addresses.
157
+ *
158
+ * @param {array} stats - An RTCStatsReport organized into an array of strings.
159
+ * @returns {string}
160
+ */
161
+ }, {
162
+ key: "anonymizeIp",
163
+ value: function anonymizeIp(stats) {
164
+ var data = JSON.parse(stats);
165
+ // on local and remote candidates, anonymize the last 4 bits.
166
+ if (data.type === 'local-candidate' || data.type === 'remote-candidate') {
167
+ data.ip = CallDiagnosticUtils.anonymizeIPAddress(data.ip) || undefined;
168
+ data.address = CallDiagnosticUtils.anonymizeIPAddress(data.address) || undefined;
169
+ data.relatedAddress = CallDiagnosticUtils.anonymizeIPAddress(data.relatedAddress) || undefined;
170
+ }
171
+ return (0, _stringify.default)(data);
172
+ }
173
+
174
+ /**
175
+ * Set a new connection id.
176
+ *
177
+ * @returns {void}
178
+ */
179
+ }, {
180
+ key: "resetConnection",
181
+ value: function resetConnection() {
182
+ this.connectionId = _uuid.default.v4();
183
+ this.shouldSendMetricsOnNextStatsReport = true;
184
+ }
185
+
186
+ /**
187
+ * Send metrics to the metrics service.
188
+ *
189
+ * @returns {void}
190
+ */
191
+ }, {
192
+ key: "sendMetrics",
193
+ value: function sendMetrics() {
194
+ var metricsAttributes = {
195
+ type: 'webrtc',
196
+ version: '1.1.0',
197
+ userId: this.webex.internal.device.userId,
198
+ correlationId: this.correlationId,
199
+ connectionId: this.connectionId,
200
+ data: this.metricsQueue
201
+ };
202
+ if (this.meetingId) {
203
+ metricsAttributes.meetingId = this.meetingId;
204
+ } else if (this.callId) {
205
+ metricsAttributes.callId = this.callId;
206
+ }
207
+ this.webex.request({
208
+ method: 'POST',
209
+ service: 'unifiedTelemetry',
210
+ resource: 'metric/v2',
211
+ headers: {
212
+ type: 'webrtcMedia',
213
+ appId: _constants.default.APP_ID
214
+ },
215
+ body: {
216
+ metrics: [metricsAttributes]
217
+ }
218
+ });
219
+ }
220
+ }]);
221
+ return RtcMetrics;
222
+ }();
223
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_uuid","_interopRequireDefault","require","CallDiagnosticUtils","_interopRequireWildcard","_constants","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","parseJsonPayload","payload","JSON","parse","_","RtcMetrics","exports","webex","_ref","correlationId","meetingId","callId","_classCallCheck2","_defineProperty2","intervalId","window","setInterval","sendMetricsInQueue","bind","resetConnection","_createClass2","key","value","updateCallId","metricsQueue","length","sendMetrics","sendNextMetrics","shouldSendMetricsOnNextStatsReport","addMetrics","data","name","map","anonymizeIp","push","parsedPayload","console","error","closeMetrics","clearInterval","stats","type","ip","anonymizeIPAddress","undefined","address","relatedAddress","_stringify","connectionId","uuid","v4","metricsAttributes","version","userId","internal","device","request","method","service","resource","headers","appId","RTC_METRICS","APP_ID","body","metrics"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport uuid from 'uuid';\nimport * as CallDiagnosticUtils from '../call-diagnostic/call-diagnostic-metrics.util';\nimport RTC_METRICS from './constants';\nimport {IdType, IMetricsAttributes} from '../metrics.types';\n\nconst parseJsonPayload = (payload: any[]): any | null => {\n try {\n if (payload && payload[0]) {\n return JSON.parse(payload[0]);\n }\n\n return null;\n } catch (_) {\n return null;\n }\n};\n\n/**\n * Rtc Metrics\n */\nexport default class RtcMetrics {\n /**\n * Array of MetricData items to be sent to the metrics service.\n */\n metricsQueue = [];\n\n intervalId: number;\n\n webex: any;\n\n meetingId?: string;\n\n callId?: string;\n\n correlationId: string;\n\n connectionId: string;\n\n shouldSendMetricsOnNextStatsReport: boolean;\n\n /**\n * Initialize the interval.\n *\n * @param {object} webex - The main `webex` object.\n * @param {IdType} Ids - Meeting or Calling id.\n * @param {string} correlationId - The correlation id.\n */\n constructor(webex, {meetingId, callId}: IdType, correlationId) {\n // `window` is used to prevent typescript from returning a NodeJS.Timer.\n this.intervalId = window.setInterval(this.sendMetricsInQueue.bind(this), 30 * 1000);\n this.meetingId = meetingId;\n this.callId = callId;\n this.webex = webex;\n this.correlationId = correlationId;\n this.resetConnection();\n }\n\n /**\n * Updates the call identifier with the provided value.\n *\n * @param {string} callId - The new call identifier to set.\n * @returns {void}\n */\n public updateCallId(callId: string) {\n this.callId = callId;\n }\n\n /**\n * Check to see if the metrics queue has any items.\n *\n * @returns {void}\n */\n public sendMetricsInQueue() {\n if (this.metricsQueue.length) {\n this.sendMetrics();\n this.metricsQueue = [];\n }\n }\n\n /**\n * Forces sending metrics when we get the next stats-report\n *\n * This is useful for cases when something important happens that affects the media connection,\n * for example when we move from lobby into the meeting.\n *\n * @returns {void}\n */\n public sendNextMetrics() {\n this.shouldSendMetricsOnNextStatsReport = true;\n }\n\n /**\n * Add metrics items to the metrics queue.\n *\n * @param {object} data - An object with a payload array of metrics items.\n *\n * @returns {void}\n */\n addMetrics(data) {\n if (data.payload.length) {\n if (data.name === 'stats-report') {\n data.payload = data.payload.map(this.anonymizeIp);\n }\n\n this.metricsQueue.push(data);\n\n if (this.shouldSendMetricsOnNextStatsReport && data.name === 'stats-report') {\n // this is the first useful set of data (WCME gives it to us after 5s), send it out immediately\n // in case the user is unhappy and closes the browser early\n this.sendMetricsInQueue();\n this.shouldSendMetricsOnNextStatsReport = false;\n }\n\n try {\n // If a connection fails, send the rest of the metrics in queue and get a new connection id.\n const parsedPayload = parseJsonPayload(data.payload);\n if (\n data.name === 'onconnectionstatechange' &&\n parsedPayload &&\n parsedPayload.value === 'failed'\n ) {\n this.sendMetricsInQueue();\n this.resetConnection();\n }\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n /**\n * Clear the metrics interval.\n *\n * @returns {void}\n */\n closeMetrics() {\n this.sendMetricsInQueue();\n clearInterval(this.intervalId);\n }\n\n /**\n * Anonymize IP addresses.\n *\n * @param {array} stats - An RTCStatsReport organized into an array of strings.\n * @returns {string}\n */\n anonymizeIp(stats: string): string {\n const data = JSON.parse(stats);\n // on local and remote candidates, anonymize the last 4 bits.\n if (data.type === 'local-candidate' || data.type === 'remote-candidate') {\n data.ip = CallDiagnosticUtils.anonymizeIPAddress(data.ip) || undefined;\n data.address = CallDiagnosticUtils.anonymizeIPAddress(data.address) || undefined;\n data.relatedAddress =\n CallDiagnosticUtils.anonymizeIPAddress(data.relatedAddress) || undefined;\n }\n\n return JSON.stringify(data);\n }\n\n /**\n * Set a new connection id.\n *\n * @returns {void}\n */\n private resetConnection() {\n this.connectionId = uuid.v4();\n this.shouldSendMetricsOnNextStatsReport = true;\n }\n\n /**\n * Send metrics to the metrics service.\n *\n * @returns {void}\n */\n private sendMetrics() {\n const metricsAttributes: IMetricsAttributes = {\n type: 'webrtc',\n version: '1.1.0',\n userId: this.webex.internal.device.userId,\n correlationId: this.correlationId,\n connectionId: this.connectionId,\n data: this.metricsQueue,\n };\n\n if (this.meetingId) {\n metricsAttributes.meetingId = this.meetingId;\n } else if (this.callId) {\n metricsAttributes.callId = this.callId;\n }\n\n this.webex.request({\n method: 'POST',\n service: 'unifiedTelemetry',\n resource: 'metric/v2',\n headers: {\n type: 'webrtcMedia',\n appId: RTC_METRICS.APP_ID,\n },\n body: {\n metrics: [metricsAttributes],\n },\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AACA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,UAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAsC,SAAAI,yBAAAC,CAAA,6BAAAC,QAAA,mBAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAF,wBAAA,YAAAA,yBAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAH,wBAAAG,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,gBAAAK,OAAA,CAAAL,CAAA,0BAAAA,CAAA,WAAAM,OAAA,EAAAN,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAI,GAAA,CAAAP,CAAA,UAAAG,CAAA,CAAAK,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,sBAAA,IAAAC,gCAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAC,MAAA,CAAAC,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAlB,CAAA,EAAAc,CAAA,SAAAK,CAAA,GAAAR,CAAA,GAAAE,gCAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAK,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,sBAAA,CAAAH,CAAA,EAAAK,CAAA,EAAAK,CAAA,IAAAV,CAAA,CAAAK,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAL,CAAA,CAAAH,OAAA,GAAAN,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAiB,GAAA,CAAApB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AAHtC;;AAMA,IAAMY,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,OAAc,EAAiB;EACvD,IAAI;IACF,IAAIA,OAAO,IAAIA,OAAO,CAAC,CAAC,CAAC,EAAE;MACzB,OAAOC,IAAI,CAACC,KAAK,CAACF,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B;IAEA,OAAO,IAAI;EACb,CAAC,CAAC,OAAOG,CAAC,EAAE;IACV,OAAO,IAAI;EACb;AACF,CAAC;;AAED;AACA;AACA;AAFA,IAGqBC,UAAU,GAAAC,OAAA,CAAArB,OAAA;EAoB7B;AACF;AACA;AACA;AACA;AACA;AACA;EACE,SAAAoB,WAAYE,KAAK,EAAAC,IAAA,EAA+BC,aAAa,EAAE;IAAA,IAA3CC,SAAS,GAAAF,IAAA,CAATE,SAAS;MAAEC,MAAM,GAAAH,IAAA,CAANG,MAAM;IAAA,IAAAC,gBAAA,CAAA3B,OAAA,QAAAoB,UAAA;IA1BrC;AACF;AACA;IAFE,IAAAQ,gBAAA,CAAA5B,OAAA,wBAGe,EAAE;IAAA,IAAA4B,gBAAA,CAAA5B,OAAA;IAAA,IAAA4B,gBAAA,CAAA5B,OAAA;IAAA,IAAA4B,gBAAA,CAAA5B,OAAA;IAAA,IAAA4B,gBAAA,CAAA5B,OAAA;IAAA,IAAA4B,gBAAA,CAAA5B,OAAA;IAAA,IAAA4B,gBAAA,CAAA5B,OAAA;IAAA,IAAA4B,gBAAA,CAAA5B,OAAA;IAwBf;IACA,IAAI,CAAC6B,UAAU,GAAGC,MAAM,CAACC,WAAW,CAAC,IAAI,CAACC,kBAAkB,CAACC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IACnF,IAAI,CAACR,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACJ,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACE,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACU,eAAe,CAAC,CAAC;EACxB;;EAEA;AACF;AACA;AACA;AACA;AACA;EALE,IAAAC,aAAA,CAAAnC,OAAA,EAAAoB,UAAA;IAAAgB,GAAA;IAAAC,KAAA,EAMA,SAAAC,aAAoBZ,MAAc,EAAE;MAClC,IAAI,CAACA,MAAM,GAAGA,MAAM;IACtB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAU,GAAA;IAAAC,KAAA,EAKA,SAAAL,mBAAA,EAA4B;MAC1B,IAAI,IAAI,CAACO,YAAY,CAACC,MAAM,EAAE;QAC5B,IAAI,CAACC,WAAW,CAAC,CAAC;QAClB,IAAI,CAACF,YAAY,GAAG,EAAE;MACxB;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAH,GAAA;IAAAC,KAAA,EAQA,SAAAK,gBAAA,EAAyB;MACvB,IAAI,CAACC,kCAAkC,GAAG,IAAI;IAChD;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAP,GAAA;IAAAC,KAAA,EAOA,SAAAO,WAAWC,IAAI,EAAE;MACf,IAAIA,IAAI,CAAC7B,OAAO,CAACwB,MAAM,EAAE;QACvB,IAAIK,IAAI,CAACC,IAAI,KAAK,cAAc,EAAE;UAChCD,IAAI,CAAC7B,OAAO,GAAG6B,IAAI,CAAC7B,OAAO,CAAC+B,GAAG,CAAC,IAAI,CAACC,WAAW,CAAC;QACnD;QAEA,IAAI,CAACT,YAAY,CAACU,IAAI,CAACJ,IAAI,CAAC;QAE5B,IAAI,IAAI,CAACF,kCAAkC,IAAIE,IAAI,CAACC,IAAI,KAAK,cAAc,EAAE;UAC3E;UACA;UACA,IAAI,CAACd,kBAAkB,CAAC,CAAC;UACzB,IAAI,CAACW,kCAAkC,GAAG,KAAK;QACjD;QAEA,IAAI;UACF;UACA,IAAMO,aAAa,GAAGnC,gBAAgB,CAAC8B,IAAI,CAAC7B,OAAO,CAAC;UACpD,IACE6B,IAAI,CAACC,IAAI,KAAK,yBAAyB,IACvCI,aAAa,IACbA,aAAa,CAACb,KAAK,KAAK,QAAQ,EAChC;YACA,IAAI,CAACL,kBAAkB,CAAC,CAAC;YACzB,IAAI,CAACE,eAAe,CAAC,CAAC;UACxB;QACF,CAAC,CAAC,OAAOxC,CAAC,EAAE;UACVyD,OAAO,CAACC,KAAK,CAAC1D,CAAC,CAAC;QAClB;MACF;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA0C,GAAA;IAAAC,KAAA,EAKA,SAAAgB,aAAA,EAAe;MACb,IAAI,CAACrB,kBAAkB,CAAC,CAAC;MACzBsB,aAAa,CAAC,IAAI,CAACzB,UAAU,CAAC;IAChC;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAO,GAAA;IAAAC,KAAA,EAMA,SAAAW,YAAYO,KAAa,EAAU;MACjC,IAAMV,IAAI,GAAG5B,IAAI,CAACC,KAAK,CAACqC,KAAK,CAAC;MAC9B;MACA,IAAIV,IAAI,CAACW,IAAI,KAAK,iBAAiB,IAAIX,IAAI,CAACW,IAAI,KAAK,kBAAkB,EAAE;QACvEX,IAAI,CAACY,EAAE,GAAGnE,mBAAmB,CAACoE,kBAAkB,CAACb,IAAI,CAACY,EAAE,CAAC,IAAIE,SAAS;QACtEd,IAAI,CAACe,OAAO,GAAGtE,mBAAmB,CAACoE,kBAAkB,CAACb,IAAI,CAACe,OAAO,CAAC,IAAID,SAAS;QAChFd,IAAI,CAACgB,cAAc,GACjBvE,mBAAmB,CAACoE,kBAAkB,CAACb,IAAI,CAACgB,cAAc,CAAC,IAAIF,SAAS;MAC5E;MAEA,OAAO,IAAAG,UAAA,CAAA9D,OAAA,EAAe6C,IAAI,CAAC;IAC7B;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAT,GAAA;IAAAC,KAAA,EAKA,SAAAH,gBAAA,EAA0B;MACxB,IAAI,CAAC6B,YAAY,GAAGC,aAAI,CAACC,EAAE,CAAC,CAAC;MAC7B,IAAI,CAACtB,kCAAkC,GAAG,IAAI;IAChD;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAP,GAAA;IAAAC,KAAA,EAKA,SAAAI,YAAA,EAAsB;MACpB,IAAMyB,iBAAqC,GAAG;QAC5CV,IAAI,EAAE,QAAQ;QACdW,OAAO,EAAE,OAAO;QAChBC,MAAM,EAAE,IAAI,CAAC9C,KAAK,CAAC+C,QAAQ,CAACC,MAAM,CAACF,MAAM;QACzC5C,aAAa,EAAE,IAAI,CAACA,aAAa;QACjCuC,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BlB,IAAI,EAAE,IAAI,CAACN;MACb,CAAC;MAED,IAAI,IAAI,CAACd,SAAS,EAAE;QAClByC,iBAAiB,CAACzC,SAAS,GAAG,IAAI,CAACA,SAAS;MAC9C,CAAC,MAAM,IAAI,IAAI,CAACC,MAAM,EAAE;QACtBwC,iBAAiB,CAACxC,MAAM,GAAG,IAAI,CAACA,MAAM;MACxC;MAEA,IAAI,CAACJ,KAAK,CAACiD,OAAO,CAAC;QACjBC,MAAM,EAAE,MAAM;QACdC,OAAO,EAAE,kBAAkB;QAC3BC,QAAQ,EAAE,WAAW;QACrBC,OAAO,EAAE;UACPnB,IAAI,EAAE,aAAa;UACnBoB,KAAK,EAAEC,kBAAW,CAACC;QACrB,CAAC;QACDC,IAAI,EAAE;UACJC,OAAO,EAAE,CAACd,iBAAiB;QAC7B;MACF,CAAC,CAAC;IACJ;EAAC;EAAA,OAAA9C,UAAA;AAAA"}
@@ -1,5 +1,5 @@
1
1
  import GenericMetrics from './generic-metrics';
2
- import { EventPayload } from './metrics.types';
2
+ import { EventPayload, Table } from './metrics.types';
3
3
  /**
4
4
  * @description Util class to handle Buisness Metrics
5
5
  * @export
@@ -7,13 +7,45 @@ import { EventPayload } from './metrics.types';
7
7
  */
8
8
  export default class BusinessMetrics extends GenericMetrics {
9
9
  /**
10
- * Submit a buisness metric to our metrics endpoint.
10
+ * unfortunately, the pinot team does not allow changes to the schema of wbxapp_callend_metrics
11
+ * so we have to shim this layer specifically for this
12
+ * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table+wbxapp_callend_metrics
13
+ * @param {EventPayload} payload payload of the metric
14
+ * @returns {Promise<any>}
15
+ */
16
+ private submitCallEndEvent;
17
+ /**
18
+ * Submit a buisness metric to our metrics endpoint, going to the default business_ucf table
19
+ * all event payload keys are converted into a hex string value
20
+ * unfortunately, the pinot team does not allow changes to the schema of business_metrics
21
+ * so we have to shim this layer specifically for this
22
+ * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table%3A+business_metrics
23
+ * @param {string} name of the metric
24
+ * @param {EventPayload} payload payload of the metric
25
+ * @returns {Promise<any>}
26
+ */
27
+ private submitBusinessMetricsEvent;
28
+ /**
29
+ * Submit a buisness metric to our metrics endpoint, going to the default business_ucf table
30
+ * all event payload keys are converted into a hex string value
31
+ * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
11
32
  * @param {string} name of the metric
12
33
  * @param {EventPayload} user payload of the metric
13
34
  * @returns {Promise<any>}
14
35
  */
15
- submitBusinessEvent({ name, payload }: {
36
+ private submitDefaultEvent;
37
+ /**
38
+ * Submit a buisness metric to our metrics endpoint.
39
+ * routes to the correct table with the correct schema payload by table
40
+ * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
41
+ * @param {string} name of the metric, ignored if going to wbxapp_callend_metrics
42
+ * @param {EventPayload} payload user payload of the metric
43
+ * @param {Table} table optional - to submit the metric to and adapt the sent schema
44
+ * @returns {Promise<any>}
45
+ */
46
+ submitBusinessEvent({ name, payload, table, }: {
16
47
  name: string;
17
48
  payload: EventPayload;
18
- }): void;
49
+ table?: Table;
50
+ }): Promise<void>;
19
51
  }
@@ -66,7 +66,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
66
66
  * @returns
67
67
  */
68
68
  getOrigin(options: GetOriginOptions, meetingId?: string): {
69
- name: "endpoint" | "addin" | "antares" | "appapi" | "beech" | "breakout" | "calendar" | "cb" | "cca" | "ccc" | "cloudproxy" | "edonus" | "givr" | "hecate" | "hedge" | "hesiod" | "homer" | "superhomer" | "l2sip" | "linus" | "locus" | "mbs" | "mcc" | "mcs" | "mercury" | "mes" | "mjs" | "mmp" | "mygdon" | "ngservice" | "orpheus" | "page" | "poros" | "publicapi" | "rhesos" | "terminus" | "tpgw" | "ucc" | "wdm" | "webexivr";
69
+ name: "endpoint" | "addin" | "antares" | "appapi" | "beech" | "breakout" | "calendar" | "cb" | "cca" | "ccc" | "cloudproxy" | "crc" | "edonus" | "givr" | "hecate" | "hedge" | "hesiod" | "homer" | "superhomer" | "l2sip" | "linus" | "locus" | "mbs" | "mcc" | "mcs" | "mercury" | "mes" | "mjs" | "mmp" | "mygdon" | "ngservice" | "orpheus" | "page" | "poros" | "publicapi" | "rhesos" | "terminus" | "tpgw" | "ucc" | "wdm" | "webexivr" | "meetingcontainer";
70
70
  userAgent: string;
71
71
  buildType?: "debug" | "test" | "prod" | "tap" | "analyzer-test";
72
72
  upgradeChannel?: string;
@@ -137,6 +137,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
137
137
  emmVendorId?: string;
138
138
  isHybridMedia?: boolean;
139
139
  originData?: {};
140
+ serviceVersion?: string;
140
141
  additionalProperties?: false;
141
142
  };
142
143
  /**
@@ -146,6 +147,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
146
147
  */
147
148
  getIdentifiers(options: GetIdentifiersOptions): {
148
149
  attendeeId?: string;
150
+ participantId?: string;
149
151
  breakoutGroupId?: string;
150
152
  breakoutMoveId?: string;
151
153
  breakoutSessionId?: string;
@@ -225,6 +227,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
225
227
  additionalProperties?: false;
226
228
  } | {
227
229
  attendeeId?: string;
230
+ participantId?: string;
228
231
  breakoutGroupId?: string;
229
232
  breakoutMoveId?: string;
230
233
  breakoutSessionId?: string;
@@ -96,6 +96,7 @@ export declare const ERROR_DESCRIPTIONS: {
96
96
  ICE_AND_REACHABILITY_FAILED: string;
97
97
  SDP_OFFER_CREATION_ERROR: string;
98
98
  SDP_OFFER_CREATION_ERROR_MISSING_CODEC: string;
99
+ WDM_RESTRICTED_REGION: string;
99
100
  };
100
101
  export declare const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP: {
101
102
  58400: number;
@@ -175,6 +176,8 @@ export declare const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP: {
175
176
  100006: number;
176
177
  100005: number;
177
178
  100004: number;
179
+ 4404002: number;
180
+ 4404003: number;
178
181
  };
179
182
  export declare const CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD: Record<number, Partial<ClientEventError>>;
180
183
  export declare const CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND = "js_sdk_call_diagnostic_event_failed_to_send";
@@ -12,6 +12,7 @@ import CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-l
12
12
  import BehavioralMetrics from './behavioral-metrics';
13
13
  import OperationalMetrics from './operational-metrics';
14
14
  import BusinessMetrics from './business-metrics';
15
+ import RtcMetrics from './rtcMetrics';
15
16
  export { default, getOSNameInternal } from './metrics';
16
- export { config, CALL_DIAGNOSTIC_CONFIG, NewMetrics, Utils, CallDiagnosticUtils, CallDiagnosticLatencies, CallDiagnosticMetrics, BehavioralMetrics, OperationalMetrics, BusinessMetrics, };
17
+ export { config, CALL_DIAGNOSTIC_CONFIG, NewMetrics, Utils, CallDiagnosticUtils, CallDiagnosticLatencies, CallDiagnosticMetrics, BehavioralMetrics, OperationalMetrics, BusinessMetrics, RtcMetrics, };
17
18
  export type { ClientEvent, ClientEventLeaveReason, SubmitBehavioralEvent, SubmitClientEvent, SubmitInternalEvent, SubmitMQE, SubmitOperationalEvent, PreComputedLatencies, };
@@ -8,8 +8,9 @@ export type NewEnvironmentType = NonNullable<RawEvent['origin']['newEnvironment'
8
8
  export type ClientLaunchMethodType = NonNullable<RawEvent['origin']['clientInfo']>['clientLaunchMethod'];
9
9
  export type BrowserLaunchMethodType = NonNullable<RawEvent['origin']['clientInfo']>['browserLaunchMethod'];
10
10
  export type MetricEventProduct = 'webex' | 'wxcc_desktop';
11
- export type MetricEventAgent = 'user' | 'browser' | 'system' | 'sdk' | 'redux' | 'service';
12
- export type MetricEventVerb = 'create' | 'get' | 'fetch' | 'update' | 'list' | 'delete' | 'select' | 'view' | 'set' | 'toggle' | 'load' | 'reload' | 'click' | 'hover' | 'register' | 'unregister' | 'enable' | 'disable' | 'use' | 'complete' | 'submit' | 'apply' | 'cancel' | 'abort' | 'sync' | 'login' | 'logout' | 'answer' | 'activate' | 'deactivate';
11
+ export type MetricEventAgent = 'user' | 'browser' | 'system' | 'sdk' | 'redux' | 'service' | 'api';
12
+ export type MetricEventVerb = 'abort' | 'accept' | 'activate' | 'apply' | 'answer' | 'authorize' | 'build' | 'cancel' | 'change' | 'click' | 'close' | 'complete' | 'connect' | 'create' | 'deactivate' | 'decrypt' | 'delete' | 'deliver' | 'destroy' | 'disable' | 'disconnect' | 'dismiss' | 'display' | 'download' | 'edit' | 'enable' | 'encrypt' | 'end' | 'expire' | 'fail' | 'fetch' | 'fire' | 'generate' | 'get' | 'hide' | 'hover' | 'ignore' | 'initialize' | 'initiate' | 'invalidate' | 'join' | 'list' | 'load' | 'login' | 'logout' | 'notify' | 'offer' | 'open' | 'press' | 'receive' | 'refer' | 'refresh' | 'register' | 'release' | 'reload' | 'reject' | 'request' | 'reset' | 'resize' | 'respond' | 'retry' | 'revoke' | 'save' | 'search' | 'select' | 'send' | 'set' | 'sign' | 'start' | 'submit' | 'switch' | 'sync' | 'toggle' | 'transfer' | 'unregister' | 'update' | 'upload' | 'use' | 'validate' | 'view' | 'visit' | 'wait' | 'warn' | 'exit';
13
+ export type MetricEventJoinFlowVersion = 'Other' | 'NewFTE';
13
14
  export type SubmitClientEventOptions = {
14
15
  meetingId?: string;
15
16
  mediaConnections?: any[];
@@ -23,6 +24,7 @@ export type SubmitClientEventOptions = {
23
24
  browserLaunchMethod?: BrowserLaunchMethodType;
24
25
  webexConferenceIdStr?: string;
25
26
  globalMeetingId?: string;
27
+ joinFlowVersion?: MetricEventJoinFlowVersion;
26
28
  };
27
29
  export type SubmitMQEOptions = {
28
30
  meetingId: string;
@@ -55,6 +57,7 @@ export interface DeviceContext {
55
57
  };
56
58
  }
57
59
  export type MetricType = 'behavioral' | 'operational' | 'business';
60
+ export type Table = 'wbxapp_callend_metrics' | 'business_metrics' | 'business_ucf' | 'default';
58
61
  type InternalEventPayload = string | number | boolean;
59
62
  export type EventPayload = Record<string, InternalEventPayload>;
60
63
  export type BehavioralEventPayload = EventPayload;
@@ -137,4 +140,18 @@ export type BuildClientEventFetchRequestOptions = (args: {
137
140
  options?: SubmitClientEventOptions;
138
141
  }) => Promise<any>;
139
142
  export type PreComputedLatencies = 'internal.client.pageJMT' | 'internal.download.time' | 'internal.get.cluster.time' | 'internal.click.to.interstitial' | 'internal.refresh.captcha.time' | 'internal.exchange.ci.token.time' | 'internal.get.u2c.time' | 'internal.call.init.join.req' | 'internal.other.app.api.time' | 'internal.api.fetch.intelligence.models';
143
+ export interface IdType {
144
+ meetingId?: string;
145
+ callId?: string;
146
+ }
147
+ export interface IMetricsAttributes {
148
+ type: string;
149
+ version: string;
150
+ userId: string;
151
+ correlationId: string;
152
+ connectionId: string;
153
+ data: any[];
154
+ meetingId?: string;
155
+ callId?: string;
156
+ }
140
157
  export {};
@@ -3,10 +3,11 @@ import CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';
3
3
  import BehavioralMetrics from './behavioral-metrics';
4
4
  import OperationalMetrics from './operational-metrics';
5
5
  import BusinessMetrics from './business-metrics';
6
- import { RecursivePartial, MetricEventProduct, MetricEventAgent, MetricEventVerb, ClientEvent, FeatureEvent, EventPayload, MediaQualityEvent, InternalEvent, SubmitClientEventOptions } from './metrics.types';
6
+ import { RecursivePartial, MetricEventProduct, MetricEventAgent, MetricEventVerb, ClientEvent, FeatureEvent, EventPayload, MediaQualityEvent, InternalEvent, SubmitClientEventOptions, Table } from './metrics.types';
7
7
  import CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';
8
8
  /**
9
9
  * Metrics plugin to centralize all types of metrics.
10
+ * https://confluence-eng-gpk2.cisco.com/conf/pages/viewpage.action?pageId=231011379
10
11
  * @class
11
12
  */
12
13
  declare class Metrics extends WebexPlugin {
@@ -85,10 +86,11 @@ declare class Metrics extends WebexPlugin {
85
86
  * Buisness event
86
87
  * @param args
87
88
  */
88
- submitBusinessEvent({ name, payload }: {
89
+ submitBusinessEvent({ name, payload, table, }: {
89
90
  name: string;
90
91
  payload: EventPayload;
91
- }): void | Promise<void>;
92
+ table?: Table;
93
+ }): Promise<void>;
92
94
  /**
93
95
  * Call Analyzer: Media Quality Event
94
96
  * @param args
@@ -0,0 +1,4 @@
1
+ declare const RTC_METRICS: {
2
+ APP_ID: string;
3
+ };
4
+ export { RTC_METRICS as default };
@@ -0,0 +1,80 @@
1
+ import { IdType } from '../metrics.types';
2
+ /**
3
+ * Rtc Metrics
4
+ */
5
+ export default class RtcMetrics {
6
+ /**
7
+ * Array of MetricData items to be sent to the metrics service.
8
+ */
9
+ metricsQueue: any[];
10
+ intervalId: number;
11
+ webex: any;
12
+ meetingId?: string;
13
+ callId?: string;
14
+ correlationId: string;
15
+ connectionId: string;
16
+ shouldSendMetricsOnNextStatsReport: boolean;
17
+ /**
18
+ * Initialize the interval.
19
+ *
20
+ * @param {object} webex - The main `webex` object.
21
+ * @param {IdType} Ids - Meeting or Calling id.
22
+ * @param {string} correlationId - The correlation id.
23
+ */
24
+ constructor(webex: any, { meetingId, callId }: IdType, correlationId: any);
25
+ /**
26
+ * Updates the call identifier with the provided value.
27
+ *
28
+ * @param {string} callId - The new call identifier to set.
29
+ * @returns {void}
30
+ */
31
+ updateCallId(callId: string): void;
32
+ /**
33
+ * Check to see if the metrics queue has any items.
34
+ *
35
+ * @returns {void}
36
+ */
37
+ sendMetricsInQueue(): void;
38
+ /**
39
+ * Forces sending metrics when we get the next stats-report
40
+ *
41
+ * This is useful for cases when something important happens that affects the media connection,
42
+ * for example when we move from lobby into the meeting.
43
+ *
44
+ * @returns {void}
45
+ */
46
+ sendNextMetrics(): void;
47
+ /**
48
+ * Add metrics items to the metrics queue.
49
+ *
50
+ * @param {object} data - An object with a payload array of metrics items.
51
+ *
52
+ * @returns {void}
53
+ */
54
+ addMetrics(data: any): void;
55
+ /**
56
+ * Clear the metrics interval.
57
+ *
58
+ * @returns {void}
59
+ */
60
+ closeMetrics(): void;
61
+ /**
62
+ * Anonymize IP addresses.
63
+ *
64
+ * @param {array} stats - An RTCStatsReport organized into an array of strings.
65
+ * @returns {string}
66
+ */
67
+ anonymizeIp(stats: string): string;
68
+ /**
69
+ * Set a new connection id.
70
+ *
71
+ * @returns {void}
72
+ */
73
+ private resetConnection;
74
+ /**
75
+ * Send metrics to the metrics service.
76
+ *
77
+ * @returns {void}
78
+ */
79
+ private sendMetrics;
80
+ }
package/package.json CHANGED
@@ -26,22 +26,22 @@
26
26
  "@webex/eslint-config-legacy": "0.0.0",
27
27
  "@webex/jest-config-legacy": "0.0.0",
28
28
  "@webex/legacy-tools": "0.0.0",
29
- "@webex/test-helper-chai": "3.5.0",
30
- "@webex/test-helper-mocha": "3.5.0",
31
- "@webex/test-helper-mock-webex": "3.5.0",
32
- "@webex/test-helper-test-users": "3.5.0",
29
+ "@webex/test-helper-chai": "3.6.0-next.1",
30
+ "@webex/test-helper-mocha": "3.6.0-next.1",
31
+ "@webex/test-helper-mock-webex": "3.6.0-next.1",
32
+ "@webex/test-helper-test-users": "3.6.0-next.1",
33
33
  "eslint": "^8.24.0",
34
34
  "prettier": "^2.7.1",
35
35
  "sinon": "^9.2.4"
36
36
  },
37
37
  "dependencies": {
38
- "@webex/common": "3.5.0",
39
- "@webex/common-timers": "3.5.0",
40
- "@webex/event-dictionary-ts": "^1.0.1546",
41
- "@webex/internal-plugin-metrics": "3.5.0",
42
- "@webex/test-helper-chai": "3.5.0",
43
- "@webex/test-helper-mock-webex": "3.5.0",
44
- "@webex/webex-core": "3.5.0",
38
+ "@webex/common": "3.6.0-next.1",
39
+ "@webex/common-timers": "3.6.0-next.1",
40
+ "@webex/event-dictionary-ts": "^1.0.1594",
41
+ "@webex/internal-plugin-metrics": "3.6.0-next.1",
42
+ "@webex/test-helper-chai": "3.6.0-next.1",
43
+ "@webex/test-helper-mock-webex": "3.6.0-next.1",
44
+ "@webex/webex-core": "3.6.0-next.1",
45
45
  "ip-anonymize": "^0.1.0",
46
46
  "lodash": "^4.17.21",
47
47
  "uuid": "^3.3.2"
@@ -54,5 +54,5 @@
54
54
  "test:style": "eslint ./src/**/*.*",
55
55
  "test:unit": "webex-legacy-tools test --unit --runner mocha"
56
56
  },
57
- "version": "3.5.0"
57
+ "version": "3.6.0-next.1"
58
58
  }