@webex/internal-plugin-metrics 3.12.0-next.6 → 3.12.0-next.60
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/.repo-context.json +466 -0
- package/.sdd/manifest.json +626 -0
- package/AGENTS.md +208 -0
- package/README.md +274 -0
- package/dist/automated-user.js +19 -0
- package/dist/automated-user.js.map +1 -0
- package/dist/batcher.js +3 -0
- package/dist/batcher.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +613 -53
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.js +240 -103
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js +5 -0
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
- package/dist/call-diagnostic/config.js +19 -4
- package/dist/call-diagnostic/config.js.map +1 -1
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/index.js +25 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics.js +118 -5
- package/dist/metrics.js.map +1 -1
- package/dist/metrics.types.js +4 -0
- package/dist/metrics.types.js.map +1 -1
- package/dist/network-telemetry.js +610 -0
- package/dist/network-telemetry.js.map +1 -0
- package/dist/new-metrics.js +63 -17
- package/dist/new-metrics.js.map +1 -1
- package/dist/privacy-and-security-permission-enricher/constants.js +18 -0
- package/dist/privacy-and-security-permission-enricher/constants.js.map +1 -0
- package/dist/privacy-and-security-permission-enricher/index.js +143 -0
- package/dist/privacy-and-security-permission-enricher/index.js.map +1 -0
- package/dist/privacy-and-security-permission-enricher/types.js +7 -0
- package/dist/privacy-and-security-permission-enricher/types.js.map +1 -0
- package/dist/privacy-and-security-permission-enricher/utils.js +71 -0
- package/dist/privacy-and-security-permission-enricher/utils.js.map +1 -0
- package/dist/types/automated-user.d.ts +2 -0
- package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +200 -5
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +77 -17
- package/dist/types/call-diagnostic/config.d.ts +6 -0
- package/dist/types/config.d.ts +9 -0
- package/dist/types/index.d.ts +5 -3
- package/dist/types/metrics.types.d.ts +11 -5
- package/dist/types/network-telemetry.d.ts +108 -0
- package/dist/types/new-metrics.d.ts +17 -1
- package/dist/types/privacy-and-security-permission-enricher/constants.d.ts +6 -0
- package/dist/types/privacy-and-security-permission-enricher/index.d.ts +40 -0
- package/dist/types/privacy-and-security-permission-enricher/types.d.ts +14 -0
- package/dist/types/privacy-and-security-permission-enricher/utils.d.ts +5 -0
- package/dist/types/unhandled-exception-telemetry/index.d.ts +60 -0
- package/dist/types/unhandled-exception-telemetry/utils.d.ts +6 -0
- package/dist/unhandled-exception-telemetry/index.js +331 -0
- package/dist/unhandled-exception-telemetry/index.js.map +1 -0
- package/dist/unhandled-exception-telemetry/utils.js +105 -0
- package/dist/unhandled-exception-telemetry/utils.js.map +1 -0
- package/docs/adr/index.md +27 -0
- package/docs/architecture.md +437 -0
- package/docs/getting-started.md +131 -0
- package/docs/index.md +52 -0
- package/docs/specs/README.md +88 -0
- package/package.json +12 -11
- package/schemas/repo-context.schema.json +796 -0
- package/src/automated-user.ts +16 -0
- package/src/batcher.js +4 -0
- package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +737 -60
- package/src/call-diagnostic/call-diagnostic-metrics.ts +184 -42
- package/src/call-diagnostic/call-diagnostic-metrics.util.ts +5 -0
- package/src/call-diagnostic/config.ts +16 -0
- package/src/call-diagnostic/docs/README.md +535 -0
- package/src/config.js +8 -0
- package/src/docs/README.md +703 -0
- package/src/index.ts +16 -0
- package/src/metrics.js +123 -5
- package/src/metrics.types.ts +29 -6
- package/src/network-telemetry.ts +757 -0
- package/src/new-metrics.ts +56 -6
- package/src/privacy-and-security-permission-enricher/constants.ts +33 -0
- package/src/privacy-and-security-permission-enricher/docs/README.md +356 -0
- package/src/privacy-and-security-permission-enricher/index.ts +142 -0
- package/src/privacy-and-security-permission-enricher/types.ts +21 -0
- package/src/privacy-and-security-permission-enricher/utils.ts +82 -0
- package/src/rtcMetrics/docs/README.md +447 -0
- package/src/unhandled-exception-telemetry/docs/README.md +536 -0
- package/src/unhandled-exception-telemetry/index.ts +404 -0
- package/src/unhandled-exception-telemetry/utils.ts +101 -0
- package/test/unit/spec/automated-user.ts +43 -0
- package/test/unit/spec/batcher.js +43 -0
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +10 -1
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +1336 -131
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +1265 -207
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +27 -0
- package/test/unit/spec/metrics.js +14 -5
- package/test/unit/spec/network-telemetry.ts +610 -0
- package/test/unit/spec/new-metrics.ts +203 -50
- package/test/unit/spec/prelogin-metrics-batcher.ts +71 -36
- package/test/unit/spec/privacy-and-security-permission-enricher.ts +318 -0
- package/test/unit/spec/unhandled-exception-telemetry/utils.ts +109 -0
- package/test/unit/spec/unhandled-exception-telemetry.ts +689 -0
|
@@ -18,6 +18,7 @@ type GetIdentifiersOptions = {
|
|
|
18
18
|
preLoginId?: string;
|
|
19
19
|
globalMeetingId?: string;
|
|
20
20
|
webexConferenceIdStr?: string;
|
|
21
|
+
locusCluster?: string;
|
|
21
22
|
};
|
|
22
23
|
/**
|
|
23
24
|
* @description Util class to handle Call Analyzer Metrics
|
|
@@ -27,7 +28,7 @@ type GetIdentifiersOptions = {
|
|
|
27
28
|
export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
28
29
|
private callDiagnosticEventsBatcher;
|
|
29
30
|
private preLoginMetricsBatcher;
|
|
30
|
-
private logger;
|
|
31
|
+
private get logger();
|
|
31
32
|
private hasLoggedBrowserSerial;
|
|
32
33
|
private device;
|
|
33
34
|
private delayedClientEvents;
|
|
@@ -36,6 +37,8 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
36
37
|
private isMercuryConnected;
|
|
37
38
|
private eventLimitTracker;
|
|
38
39
|
private eventLimitWarningsLogged;
|
|
40
|
+
private isTelemetryOptOutManual;
|
|
41
|
+
private isTelemetryOptOutAutomatic;
|
|
39
42
|
validator: (options: {
|
|
40
43
|
type: 'mqe' | 'ce';
|
|
41
44
|
event: Event;
|
|
@@ -53,6 +56,29 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
53
56
|
* @returns one of 'login-ci','unverified-guest', null
|
|
54
57
|
*/
|
|
55
58
|
getCurLoginType(): "unverified-guest" | "login-ci";
|
|
59
|
+
/**
|
|
60
|
+
* Returns the user activation state reported from the browser's navigator.userActivation API
|
|
61
|
+
* @returns object with hasBeenActive and isActive booleans, or undefined if unavailable
|
|
62
|
+
*/
|
|
63
|
+
getUserActivation(): {
|
|
64
|
+
hasBeenActive: boolean;
|
|
65
|
+
isActive: boolean;
|
|
66
|
+
} | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* Returns the telemetryOptOut value of the current user
|
|
69
|
+
* @returns one of 'manual', 'automatic', undefined
|
|
70
|
+
*/
|
|
71
|
+
getTelemetryOptOut(): "manual" | "automatic";
|
|
72
|
+
/**
|
|
73
|
+
* Sets the manual telemetry opt-out status for the current user
|
|
74
|
+
* @param value - boolean value indicating manual telemetry opt-out status
|
|
75
|
+
*/
|
|
76
|
+
setIsTelemetryOptOutManual(value: boolean): void;
|
|
77
|
+
/**
|
|
78
|
+
* Sets the automatic telemetry opt-out status for the current user
|
|
79
|
+
* @param value - boolean value indicating automatic telemetry opt-out status
|
|
80
|
+
*/
|
|
81
|
+
setIsTelemetryOptOutAutomatic(value: boolean): void;
|
|
56
82
|
/**
|
|
57
83
|
* Returns if the meeting has converged architecture enabled
|
|
58
84
|
* @param options.meetingId
|
|
@@ -84,6 +110,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
84
110
|
userAgent: string;
|
|
85
111
|
buildType?: "debug" | "test" | "prod" | "tap" | "analyzer-test";
|
|
86
112
|
upgradeChannel?: string;
|
|
113
|
+
upgradeSource?: string;
|
|
87
114
|
instanceId?: string;
|
|
88
115
|
networkType: "wifi" | "ethernet" | "cellular" | "unknown";
|
|
89
116
|
localIP?: string;
|
|
@@ -106,6 +133,8 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
106
133
|
urlProtocolLaunchMethod?: "manual" | "auto" | "extension-fallback";
|
|
107
134
|
browser?: string;
|
|
108
135
|
browserVersion?: string;
|
|
136
|
+
isSupportedBrowserFamily?: boolean;
|
|
137
|
+
isOutdatedBrowserVersion?: boolean;
|
|
109
138
|
clientType?: "MEETING_CENTER" | "EVENT_CENTER" | "TRAINING_CENTER" | "TEAMS_CLIENT" | "TEAMS_DEVICE" | "TEAMS_SHARE" | "SIP" | "RECORDING" | "CLOUD_AWARE_SIP" | "TEAMS_WXC_CLIENT" | "WXC_CLIENT" | "WXC_DEVICE" | "WEBEX_JS_SDK" | "VOICEA_CLIENT" | "CISCO_SIP_GW" | "WEBEX_SDK" | "CPAAS_THIRD_PARTY_SDK" | "WXC_THIRD_PARTY" | "WXCC" | "TEAMS_PHONE" | "WEBEX_RELAY";
|
|
110
139
|
subClientType?: "TEAMS_DEVICE" | "SIP" | "AUTOMOTIVE_APP" | "BROWSER_EXTENSION" | "DESKTOP_APP" | "DESKTOP_APP_VDI" | "DEVICE_CURRENT" | "DEVICE_LEGACY_2020" | "HOLOGRAM_HEADSET_APP" | "HVDI_APP" | "MIXED" | "MOBILE_APP" | "MOBILE_NETWORK" | "PAGE" | "VDI_APP" | "WEB_APP" | "PHONE_NOVUM" | "PHONE_ESPRESSO" | "PHONE_BUMBLEBEE" | "SIP_PSTN";
|
|
111
140
|
schedulingClientType?: "TEAMS_CLIENT" | "GOOGLE_ADDON" | "PT" | "PUBLIC_API" | "UNIFIED_PAGE" | "WEBEX_PAGE" | "GOOGLE_NOTIFICATION_CALENDAR" | "MSFT_NOTIFICATION_ADDIN" | "MSFT_NOTIFICATION_CALENDAR" | "OUTLOOK_ADDIN";
|
|
@@ -113,6 +142,10 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
113
142
|
clientVersionStatus?: "CURRENT" | "LEGACY" | "UNSUPPORTED";
|
|
114
143
|
localClientVersion?: string;
|
|
115
144
|
launcherVersion?: string;
|
|
145
|
+
installerVersion?: string;
|
|
146
|
+
installerMajorVersion?: number;
|
|
147
|
+
installerMinorVersion?: number;
|
|
148
|
+
installerRevision?: number;
|
|
116
149
|
modelNumber?: string;
|
|
117
150
|
joinFirstUpdateLater?: "ep-enabled" | "sp-enabled" | "not-enabled";
|
|
118
151
|
standbyUsed?: boolean;
|
|
@@ -137,11 +170,12 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
137
170
|
architecture: "unknown" | "intel32" | "intel64" | "amd32" | "amd64" | "arm32" | "arm64" | "armv9" | "armv8" | "armv7" | "armv6" | "x86_64" | "x86_32";
|
|
138
171
|
staticPerformance?: string;
|
|
139
172
|
clockSpeedGigaHertz?: number;
|
|
140
|
-
additionalProperties?:
|
|
173
|
+
additionalProperties?: never;
|
|
141
174
|
};
|
|
142
175
|
shareType?: "cb-normal-share" | "ce-airplay-share" | "ce-direct-share" | "ce-gui-loopback-share" | "ce-input-source-share" | "ce-input-source-share-hdmi" | "ce-input-source-share-usbc" | "ce-jpg-share" | "ce-miracast-share" | "mcs-normal-share" | "mcs-normal-audio-share" | "mcs-hfps-share" | "mcs-hfps-audio-share";
|
|
143
176
|
videoDisplayMode?: "grid-view" | "active-speaker-view";
|
|
144
|
-
videoLayoutType?: "stack" | "stackWithShare" | "sideBySide" | "sideBySideWithShare" | "grid" | "floatingActive" | "floatingThumbnail" | "floatingGrid" | "overlay" | "focus" | "prominent" | "focusWithShare" | "prominentWithShare" | "equal" | "equalWithShare" | "largeGallery";
|
|
177
|
+
videoLayoutType?: "auto" | "stack" | "stackWithShare" | "sideBySide" | "sideBySideWithShare" | "grid" | "floatingActive" | "floatingThumbnail" | "floatingGrid" | "overlay" | "focus" | "prominent" | "focusWithShare" | "prominentWithShare" | "equal" | "equalWithShare" | "largeGallery" | "autoWithShare";
|
|
178
|
+
appliedLayout?: "auto" | "stack" | "stackWithShare" | "sideBySide" | "sideBySideWithShare" | "grid" | "floatingActive" | "floatingThumbnail" | "floatingGrid" | "overlay" | "focus" | "prominent" | "focusWithShare" | "prominentWithShare" | "equal" | "equalWithShare" | "largeGallery" | "autoWithShare";
|
|
145
179
|
videoRenderType?: "wme" | "client_d3d" | "client_gdi";
|
|
146
180
|
vdiInfo?: {};
|
|
147
181
|
is64BitsClient?: boolean;
|
|
@@ -153,14 +187,31 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
153
187
|
vendorId?: string;
|
|
154
188
|
staticPerformanceLevel?: string;
|
|
155
189
|
staticPerformanceScore?: number;
|
|
156
|
-
|
|
190
|
+
preInstalledTime?: string;
|
|
191
|
+
preInstalledType?: "installer" | "launcher" | "app";
|
|
192
|
+
preInstalledVersion?: string;
|
|
193
|
+
additionalProperties?: never;
|
|
194
|
+
};
|
|
195
|
+
installerInfo?: {
|
|
196
|
+
packageSuffix?: string;
|
|
197
|
+
packageArch?: string;
|
|
198
|
+
launchId?: string;
|
|
199
|
+
packageCount?: number;
|
|
200
|
+
totalSize?: number;
|
|
201
|
+
additionalProperties?: never;
|
|
157
202
|
};
|
|
158
203
|
emmVendorId?: string;
|
|
159
204
|
isHybridMedia?: boolean;
|
|
160
205
|
originData?: {};
|
|
161
206
|
serviceVersion?: string;
|
|
162
|
-
additionalProperties?:
|
|
207
|
+
additionalProperties?: never;
|
|
163
208
|
};
|
|
209
|
+
/**
|
|
210
|
+
* Returns the signed-in user's CI ID derived from credentials tokens.
|
|
211
|
+
* Used as a fallback when no device is registered.
|
|
212
|
+
* @returns the userId, or undefined if it can't be determined
|
|
213
|
+
*/
|
|
214
|
+
private getUserIdFromCredentials;
|
|
164
215
|
/**
|
|
165
216
|
* Gather identifier details for call diagnostic payload.
|
|
166
217
|
* @throws Error if initialization fails.
|
|
@@ -172,6 +223,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
172
223
|
participantId?: string;
|
|
173
224
|
breakoutGroupId?: string;
|
|
174
225
|
breakoutMoveId?: string;
|
|
226
|
+
breakoutTrackingId?: string;
|
|
175
227
|
breakoutSessionId?: string;
|
|
176
228
|
browserId?: string;
|
|
177
229
|
ciExchangeTokenUrl?: string;
|
|
@@ -183,7 +235,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
183
235
|
imiAppId: string;
|
|
184
236
|
sessionId: string;
|
|
185
237
|
sessionInstanceId: string;
|
|
186
|
-
additionalProperties?:
|
|
238
|
+
additionalProperties?: never;
|
|
187
239
|
};
|
|
188
240
|
csdmDeviceUrl?: string;
|
|
189
241
|
destinationBreakoutSessionId?: string;
|
|
@@ -200,6 +252,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
200
252
|
callId?: string;
|
|
201
253
|
pairCallId?: string;
|
|
202
254
|
llmWebsocketUrl?: string;
|
|
255
|
+
locusCluster?: string;
|
|
203
256
|
locusId?: string;
|
|
204
257
|
locusJoinUrl?: string;
|
|
205
258
|
locusSessionId?: string;
|
|
@@ -217,6 +270,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
217
270
|
msteamsTenantGuid?: string;
|
|
218
271
|
msteamsConferenceId?: string;
|
|
219
272
|
msteamsMeetingId?: string;
|
|
273
|
+
mtid?: string;
|
|
220
274
|
oauth2ClientId?: string;
|
|
221
275
|
orgId?: string;
|
|
222
276
|
provisionalCorrelationId?: string;
|
|
@@ -227,7 +281,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
227
281
|
sipSessionId?: {
|
|
228
282
|
local?: string;
|
|
229
283
|
remote?: string;
|
|
230
|
-
additionalProperties?:
|
|
284
|
+
additionalProperties?: never;
|
|
231
285
|
};
|
|
232
286
|
sipUri?: string;
|
|
233
287
|
subConfId?: string;
|
|
@@ -255,13 +309,14 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
255
309
|
idForEndpointAB?: string;
|
|
256
310
|
customerOrgId?: string;
|
|
257
311
|
correlationId: string;
|
|
258
|
-
additionalProperties?:
|
|
312
|
+
additionalProperties?: never;
|
|
259
313
|
} | {
|
|
260
314
|
aggregatedBreakoutMoveId?: string;
|
|
261
315
|
attendeeId?: string;
|
|
262
316
|
participantId?: string;
|
|
263
317
|
breakoutGroupId?: string;
|
|
264
318
|
breakoutMoveId?: string;
|
|
319
|
+
breakoutTrackingId?: string;
|
|
265
320
|
breakoutSessionId?: string;
|
|
266
321
|
browserId?: string;
|
|
267
322
|
ciExchangeTokenUrl?: string;
|
|
@@ -273,7 +328,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
273
328
|
imiAppId: string;
|
|
274
329
|
sessionId: string;
|
|
275
330
|
sessionInstanceId: string;
|
|
276
|
-
additionalProperties?:
|
|
331
|
+
additionalProperties?: never;
|
|
277
332
|
};
|
|
278
333
|
csdmDeviceUrl?: string;
|
|
279
334
|
destinationBreakoutSessionId?: string;
|
|
@@ -290,6 +345,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
290
345
|
callId?: string;
|
|
291
346
|
pairCallId?: string;
|
|
292
347
|
llmWebsocketUrl?: string;
|
|
348
|
+
locusCluster?: string;
|
|
293
349
|
locusId?: string;
|
|
294
350
|
locusJoinUrl?: string;
|
|
295
351
|
locusSessionId?: string;
|
|
@@ -307,6 +363,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
307
363
|
msteamsTenantGuid?: string;
|
|
308
364
|
msteamsConferenceId?: string;
|
|
309
365
|
msteamsMeetingId?: string;
|
|
366
|
+
mtid?: string;
|
|
310
367
|
oauth2ClientId?: string;
|
|
311
368
|
orgId?: string;
|
|
312
369
|
provisionalCorrelationId?: string;
|
|
@@ -317,7 +374,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
317
374
|
sipSessionId?: {
|
|
318
375
|
local?: string;
|
|
319
376
|
remote?: string;
|
|
320
|
-
additionalProperties?:
|
|
377
|
+
additionalProperties?: never;
|
|
321
378
|
};
|
|
322
379
|
sipUri?: string;
|
|
323
380
|
subConfId?: string;
|
|
@@ -345,13 +402,14 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
345
402
|
idForEndpointAB?: string;
|
|
346
403
|
customerOrgId?: string;
|
|
347
404
|
correlationId: string;
|
|
348
|
-
additionalProperties?:
|
|
405
|
+
additionalProperties?: never;
|
|
349
406
|
} | {
|
|
350
407
|
aggregatedBreakoutMoveId?: string;
|
|
351
408
|
attendeeId?: string;
|
|
352
409
|
participantId?: string;
|
|
353
410
|
breakoutGroupId?: string;
|
|
354
411
|
breakoutMoveId?: string;
|
|
412
|
+
breakoutTrackingId?: string;
|
|
355
413
|
breakoutSessionId?: string;
|
|
356
414
|
browserId?: string;
|
|
357
415
|
ciExchangeTokenUrl?: string;
|
|
@@ -363,7 +421,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
363
421
|
imiAppId: string;
|
|
364
422
|
sessionId: string;
|
|
365
423
|
sessionInstanceId: string;
|
|
366
|
-
additionalProperties?:
|
|
424
|
+
additionalProperties?: never;
|
|
367
425
|
};
|
|
368
426
|
csdmDeviceUrl?: string;
|
|
369
427
|
destinationBreakoutSessionId?: string;
|
|
@@ -380,6 +438,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
380
438
|
callId?: string;
|
|
381
439
|
pairCallId?: string;
|
|
382
440
|
llmWebsocketUrl?: string;
|
|
441
|
+
locusCluster?: string;
|
|
383
442
|
locusId?: string;
|
|
384
443
|
locusJoinUrl?: string;
|
|
385
444
|
locusSessionId?: string;
|
|
@@ -397,6 +456,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
397
456
|
msteamsTenantGuid?: string;
|
|
398
457
|
msteamsConferenceId?: string;
|
|
399
458
|
msteamsMeetingId?: string;
|
|
459
|
+
mtid?: string;
|
|
400
460
|
oauth2ClientId?: string;
|
|
401
461
|
orgId?: string;
|
|
402
462
|
provisionalCorrelationId?: string;
|
|
@@ -407,7 +467,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
407
467
|
sipSessionId?: {
|
|
408
468
|
local?: string;
|
|
409
469
|
remote?: string;
|
|
410
|
-
additionalProperties?:
|
|
470
|
+
additionalProperties?: never;
|
|
411
471
|
};
|
|
412
472
|
sipUri?: string;
|
|
413
473
|
subConfId?: string;
|
|
@@ -435,7 +495,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
435
495
|
idForEndpointAB?: string;
|
|
436
496
|
customerOrgId?: string;
|
|
437
497
|
correlationId: string;
|
|
438
|
-
additionalProperties?:
|
|
498
|
+
additionalProperties?: never;
|
|
439
499
|
};
|
|
440
500
|
/**
|
|
441
501
|
* Create diagnostic event, which can hold client event, feature event or MQE event data.
|
|
@@ -488,16 +548,16 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
488
548
|
* @param arg.clientErrorCode
|
|
489
549
|
* @param arg.serviceErrorCode
|
|
490
550
|
* @param arg.payloadOverrides
|
|
491
|
-
* @param arg.
|
|
551
|
+
* @param arg.httpCode
|
|
492
552
|
* @returns
|
|
493
553
|
*/
|
|
494
|
-
getErrorPayloadForClientErrorCode({ clientErrorCode, serviceErrorCode, serviceErrorName, rawErrorMessage, payloadOverrides,
|
|
554
|
+
getErrorPayloadForClientErrorCode({ clientErrorCode, serviceErrorCode, serviceErrorName, rawErrorMessage, payloadOverrides, httpCode, }: {
|
|
495
555
|
clientErrorCode: number;
|
|
496
556
|
serviceErrorCode: any;
|
|
497
557
|
serviceErrorName?: any;
|
|
498
558
|
rawErrorMessage?: string;
|
|
499
559
|
payloadOverrides?: any;
|
|
500
|
-
|
|
560
|
+
httpCode?: number;
|
|
501
561
|
}): ClientEventError;
|
|
502
562
|
/**
|
|
503
563
|
* Clear the error cache
|
|
@@ -2,6 +2,8 @@ import { ClientEventError, ClientSubServiceType } from '../metrics.types';
|
|
|
2
2
|
export declare const CALL_DIAGNOSTIC_LOG_IDENTIFIER = "call-diagnostic-events -> ";
|
|
3
3
|
export declare const CALL_FEATURE_LOG_IDENTIFIER = "call-diagnostic-events-feature -> ";
|
|
4
4
|
export declare const AUTHENTICATION_FAILED_CODE = 1010;
|
|
5
|
+
export declare const LOCUS_RATE_LIMITED_OUTGOING_CLIENT_CODE = 1002;
|
|
6
|
+
export declare const LOCUS_UNAVAILABLE_CLIENT_CODE = 1003;
|
|
5
7
|
export declare const NETWORK_ERROR = 1026;
|
|
6
8
|
export declare const NEW_LOCUS_ERROR_CLIENT_CODE = 4008;
|
|
7
9
|
export declare const MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE = 4100;
|
|
@@ -102,11 +104,13 @@ export declare const ERROR_DESCRIPTIONS: {
|
|
|
102
104
|
WEBRTC_API_NOT_AVAILABLE: string;
|
|
103
105
|
WDM_RESTRICTED_REGION: string;
|
|
104
106
|
USER_NOT_ALLOWED_JOIN_WEBINAR: string;
|
|
107
|
+
INVALID_MEETING_INFO: string;
|
|
105
108
|
};
|
|
106
109
|
export declare const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP: {
|
|
107
110
|
58400: number;
|
|
108
111
|
99002: number;
|
|
109
112
|
99009: number;
|
|
113
|
+
99019: number;
|
|
110
114
|
58500: number;
|
|
111
115
|
400001: number;
|
|
112
116
|
403004: number;
|
|
@@ -134,6 +138,7 @@ export declare const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP: {
|
|
|
134
138
|
423001: number;
|
|
135
139
|
423005: number;
|
|
136
140
|
423006: number;
|
|
141
|
+
423008: number;
|
|
137
142
|
423010: number;
|
|
138
143
|
423012: number;
|
|
139
144
|
423013: number;
|
|
@@ -147,6 +152,7 @@ export declare const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP: {
|
|
|
147
152
|
403037: number;
|
|
148
153
|
403003: number;
|
|
149
154
|
403030: number;
|
|
155
|
+
403106: number;
|
|
150
156
|
2403001: number;
|
|
151
157
|
2403002: number;
|
|
152
158
|
2403003: number;
|
package/dist/types/config.d.ts
CHANGED
|
@@ -8,10 +8,19 @@ declare namespace _default {
|
|
|
8
8
|
}
|
|
9
9
|
export namespace metrics_1 {
|
|
10
10
|
const appType: string;
|
|
11
|
+
namespace unhandledExceptionTelemetry {
|
|
12
|
+
const enabled: boolean;
|
|
13
|
+
}
|
|
14
|
+
namespace networkTelemetry {
|
|
15
|
+
const enabled_1: boolean;
|
|
16
|
+
export { enabled_1 as enabled };
|
|
17
|
+
export const intervalMs: number;
|
|
18
|
+
}
|
|
11
19
|
const batcherWait: number;
|
|
12
20
|
const batcherMaxCalls: number;
|
|
13
21
|
const batcherMaxWait: number;
|
|
14
22
|
const batcherRetryPlateau: number;
|
|
23
|
+
const batcherRetryOnNetworkError: boolean;
|
|
15
24
|
const waitForServiceTimeout: number;
|
|
16
25
|
}
|
|
17
26
|
export { metrics_1 as metrics };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
import config from './config';
|
|
5
5
|
import NewMetrics from './new-metrics';
|
|
6
6
|
import * as Utils from './utils';
|
|
7
|
-
import
|
|
7
|
+
import * as AutomatedUserUtils from './automated-user';
|
|
8
|
+
import { ClientEvent, ClientEventLeaveReason, SubmitBehavioralEvent, SubmitClientEvent, SubmitInternalEvent, SubmitOperationalEvent, SubmitBusinessEvent, SubmitMQE, PreComputedLatencies, SubmitFeatureEvent, LocusSyncLatencyEventName, PrivacyAndSecurityPermission } from './metrics.types';
|
|
8
9
|
import * as CALL_DIAGNOSTIC_CONFIG from './call-diagnostic/config';
|
|
9
10
|
import * as CallDiagnosticUtils from './call-diagnostic/call-diagnostic-metrics.util';
|
|
10
11
|
import CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';
|
|
@@ -15,5 +16,6 @@ import BusinessMetrics from './business-metrics';
|
|
|
15
16
|
import RtcMetrics from './rtcMetrics';
|
|
16
17
|
import PreLoginMetrics from './prelogin-metrics';
|
|
17
18
|
export { default, getOSNameInternal } from './metrics';
|
|
18
|
-
export { config, CALL_DIAGNOSTIC_CONFIG, NewMetrics, Utils, CallDiagnosticUtils, CallDiagnosticLatencies, CallDiagnosticMetrics, BehavioralMetrics, OperationalMetrics, BusinessMetrics, RtcMetrics, PreLoginMetrics, };
|
|
19
|
-
export
|
|
19
|
+
export { config, CALL_DIAGNOSTIC_CONFIG, AutomatedUserUtils, NewMetrics, Utils, CallDiagnosticUtils, CallDiagnosticLatencies, CallDiagnosticMetrics, BehavioralMetrics, OperationalMetrics, BusinessMetrics, RtcMetrics, PreLoginMetrics, };
|
|
20
|
+
export { isAutomatedUser, isAutomatedUserAgent } from './automated-user';
|
|
21
|
+
export type { ClientEvent, ClientEventLeaveReason, SubmitBehavioralEvent, SubmitClientEvent, SubmitInternalEvent, SubmitMQE, SubmitOperationalEvent, SubmitBusinessEvent, PreComputedLatencies, SubmitFeatureEvent, LocusSyncLatencyEventName, PrivacyAndSecurityPermission, };
|
|
@@ -8,6 +8,9 @@ export type NewEnvironmentType = NonNullable<RawEvent['origin']['newEnvironment'
|
|
|
8
8
|
export type ClientLaunchMethodType = NonNullable<RawEvent['origin']['clientInfo']>['clientLaunchMethod'];
|
|
9
9
|
export type ClientUserNameInput = NonNullable<RawClientEvent['userNameInput']>;
|
|
10
10
|
export type ClientEmailInput = NonNullable<RawClientEvent['emailInput']>;
|
|
11
|
+
export type PrivacyAndSecurityPermission = NonNullable<RawClientEvent['privacyAndSecurityPermission']>;
|
|
12
|
+
export type PrivacyAndSecurityPermissionResource = keyof PrivacyAndSecurityPermission;
|
|
13
|
+
export type PrivacyAndSecurityPermissionState = PrivacyAndSecurityPermission[PrivacyAndSecurityPermissionResource];
|
|
11
14
|
export type BrowserLaunchMethodType = NonNullable<RawEvent['origin']['clientInfo']>['browserLaunchMethod'];
|
|
12
15
|
export type MetricEventProduct = 'webex' | 'wxcc_desktop' | 'wxcc_crm' | 'wxcc_sdk';
|
|
13
16
|
export type MetricEventAgent = 'user' | 'browser' | 'system' | 'sdk' | 'redux' | 'service' | 'api';
|
|
@@ -27,6 +30,7 @@ export type SubmitClientEventOptions = {
|
|
|
27
30
|
browserLaunchMethod?: BrowserLaunchMethodType;
|
|
28
31
|
webexConferenceIdStr?: string;
|
|
29
32
|
globalMeetingId?: string;
|
|
33
|
+
locusCluster?: string;
|
|
30
34
|
joinFlowVersion?: MetricEventJoinFlowVersion;
|
|
31
35
|
meetingJoinPhase?: MetricEventMeetingJoinPhase;
|
|
32
36
|
triggeredTime?: string;
|
|
@@ -41,8 +45,10 @@ export type SubmitMQEOptions = {
|
|
|
41
45
|
webexConferenceIdStr?: string;
|
|
42
46
|
globalMeetingId?: string;
|
|
43
47
|
};
|
|
48
|
+
export declare const LOCUS_SYNC_LATENCY_EVENT_NAMES: readonly ["internal.client.locus.sync.start", "internal.client.locus.hashtree.request", "internal.client.locus.hashtree.response", "internal.client.locus.sync.request", "internal.client.locus.sync.response", "internal.client.locus.sync.message.received"];
|
|
49
|
+
export type LocusSyncLatencyEventName = (typeof LOCUS_SYNC_LATENCY_EVENT_NAMES)[number];
|
|
44
50
|
export type InternalEvent = {
|
|
45
|
-
name: 'internal.client.meetinginfo.request' | 'internal.client.meetinginfo.response' | 'internal.register.device.request' | 'internal.register.device.response' | 'internal.reset.join.latencies' | 'internal.
|
|
51
|
+
name: 'internal.client.meetinginfo.request' | 'internal.client.meetinginfo.response' | 'internal.register.device.request' | 'internal.register.device.response' | 'internal.reset.join.latencies' | 'internal.host.meeting.participant.admitted' | 'internal.client.meeting.interstitial-window.showed' | 'internal.client.interstitial-window.click.joinbutton' | 'internal.client.add-media.turn-discovery.start' | 'internal.client.add-media.turn-discovery.end' | 'internal.client.share.initiated' | 'internal.client.share.stopped' | LocusSyncLatencyEventName;
|
|
46
52
|
payload?: never;
|
|
47
53
|
options?: never;
|
|
48
54
|
};
|
|
@@ -107,10 +113,10 @@ export type ClientInfo = NonNullable<RawEvent['origin']['clientInfo']>;
|
|
|
107
113
|
export type ClientType = NonNullable<RawEvent['origin']['clientInfo']>['clientType'];
|
|
108
114
|
export type SubClientType = NonNullable<RawEvent['origin']['clientInfo']>['subClientType'];
|
|
109
115
|
export type NetworkType = NonNullable<RawEvent['origin']>['networkType'];
|
|
110
|
-
export type ClientSubServiceType = ClientEvent['payload']['webexSubServiceType'];
|
|
116
|
+
export type ClientSubServiceType = NonNullable<ClientEvent['payload']>['webexSubServiceType'];
|
|
111
117
|
export type ClientEventPayload = RecursivePartial<ClientEvent['payload']>;
|
|
112
|
-
export type ClientEventLeaveReason = ClientEvent['payload']['leaveReason'];
|
|
113
|
-
export type ClientEventPayloadError = ClientEvent['payload']['errors'];
|
|
118
|
+
export type ClientEventLeaveReason = NonNullable<ClientEvent['payload']>['leaveReason'];
|
|
119
|
+
export type ClientEventPayloadError = NonNullable<ClientEvent['payload']>['errors'];
|
|
114
120
|
export type ClientFeatureEventPayload = RecursivePartial<FeatureEvent['payload']>;
|
|
115
121
|
export type MediaQualityEventAudioSetupDelayPayload = NonNullable<MediaQualityEvent['payload']>['audioSetupDelay'];
|
|
116
122
|
export type MediaQualityEventVideoSetupDelayPayload = NonNullable<MediaQualityEvent['payload']>['videoSetupDelay'];
|
|
@@ -154,7 +160,7 @@ export type BuildClientEventFetchRequestOptions = (args: {
|
|
|
154
160
|
payload?: RecursivePartial<ClientEvent['payload']>;
|
|
155
161
|
options?: SubmitClientEventOptions;
|
|
156
162
|
}) => Promise<any>;
|
|
157
|
-
export type PreComputedLatencies = 'internal.client.pageJMT' | 'internal.download.time' | 'internal.get.cluster.time' | 'internal.click.to.interstitial' | 'internal.click.to.interstitial.with.user.delay' | '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';
|
|
163
|
+
export type PreComputedLatencies = 'internal.client.pageJMT' | 'internal.download.time' | 'internal.get.cluster.time' | 'internal.click.to.interstitial' | 'internal.click.to.interstitial.with.user.delay' | 'internal.click.to.interstitial.for.client.jmt' | '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' | 'internal.client.locus.sync.random.backoff';
|
|
158
164
|
export interface IdType {
|
|
159
165
|
meetingId?: string;
|
|
160
166
|
callId?: string;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
export declare const NETWORK_REQUEST_SUMMARY_METRIC = "JS_SDK_NETWORK_REQUEST_SUMMARY";
|
|
2
|
+
export declare const NETWORK_TELEMETRY_INTERVAL_MS: number;
|
|
3
|
+
type Headers = Record<string, unknown>;
|
|
4
|
+
type MetricsSummary = {
|
|
5
|
+
totalSendRequest: number;
|
|
6
|
+
totalFailedRequest: number;
|
|
7
|
+
totalRecvdResponse: number;
|
|
8
|
+
totalFailedResponse: number;
|
|
9
|
+
};
|
|
10
|
+
type RequestMetric = {
|
|
11
|
+
host: string;
|
|
12
|
+
endPoint: string;
|
|
13
|
+
countSendRequest: number;
|
|
14
|
+
countFailedRequest: number;
|
|
15
|
+
countRecvdResponse: number;
|
|
16
|
+
countFailedResponse: number;
|
|
17
|
+
averageNetworkDurationMs: number;
|
|
18
|
+
maxNetworkDurationP90Ms: number;
|
|
19
|
+
maxNetworkDurationP99Ms: number;
|
|
20
|
+
};
|
|
21
|
+
export type NetworkErrorMetric = {
|
|
22
|
+
host: string;
|
|
23
|
+
endPoint: string;
|
|
24
|
+
statusCode: number;
|
|
25
|
+
errorCode: string;
|
|
26
|
+
method: string;
|
|
27
|
+
errorType: string;
|
|
28
|
+
errorMessage: string;
|
|
29
|
+
trackingIds: string[];
|
|
30
|
+
countError: number;
|
|
31
|
+
};
|
|
32
|
+
export type NetworkTelemetry = {
|
|
33
|
+
metricsSummary: MetricsSummary;
|
|
34
|
+
metrics: RequestMetric[];
|
|
35
|
+
errorMetrics: NetworkErrorMetric[];
|
|
36
|
+
errorMetricsSummary: Record<string, {
|
|
37
|
+
count: number;
|
|
38
|
+
}>;
|
|
39
|
+
};
|
|
40
|
+
type ErrorDetails = {
|
|
41
|
+
code?: number | string;
|
|
42
|
+
errorCode?: number | string;
|
|
43
|
+
message?: string;
|
|
44
|
+
name?: string;
|
|
45
|
+
};
|
|
46
|
+
type RequestOptions = {
|
|
47
|
+
api?: string;
|
|
48
|
+
headers?: Headers;
|
|
49
|
+
method?: string;
|
|
50
|
+
resource?: string;
|
|
51
|
+
service?: string;
|
|
52
|
+
timeout?: number;
|
|
53
|
+
uri?: string;
|
|
54
|
+
url?: string;
|
|
55
|
+
$timings?: {
|
|
56
|
+
networkEnd?: number;
|
|
57
|
+
networkStart?: number;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
type RequestFailure = ErrorDetails & {
|
|
61
|
+
body?: ErrorDetails | string;
|
|
62
|
+
status?: number;
|
|
63
|
+
statusCode?: number;
|
|
64
|
+
};
|
|
65
|
+
type NetworkMetricProperties = {
|
|
66
|
+
type: 'operational';
|
|
67
|
+
tags: Record<string, string>;
|
|
68
|
+
fields: MetricsSummary;
|
|
69
|
+
eventPayload: NetworkTelemetry;
|
|
70
|
+
};
|
|
71
|
+
type NetworkTelemetryCollectorOptions = {
|
|
72
|
+
intervalMs?: number;
|
|
73
|
+
onSubmissionFailure: () => void;
|
|
74
|
+
submitMetric: (name: string, properties: NetworkMetricProperties) => unknown;
|
|
75
|
+
};
|
|
76
|
+
type NetworkTelemetryCollector = {
|
|
77
|
+
recordRequest: (options?: RequestOptions) => void;
|
|
78
|
+
recordResponse: (options?: RequestOptions) => void;
|
|
79
|
+
recordFailure: (options?: RequestOptions, reason?: RequestFailure) => void;
|
|
80
|
+
flush: () => Promise<void>;
|
|
81
|
+
stop: () => Promise<void>;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Removes query data and redacts dynamic-looking endpoint segments.
|
|
85
|
+
* @param resource SDK resource path.
|
|
86
|
+
* @returns The normalized endpoint.
|
|
87
|
+
*/
|
|
88
|
+
export declare function getOperation(resource?: string): string;
|
|
89
|
+
/**
|
|
90
|
+
* Excludes the transports used to submit telemetry, preventing self-reporting.
|
|
91
|
+
* @param options Request options.
|
|
92
|
+
* @returns Whether the request should be tracked.
|
|
93
|
+
*/
|
|
94
|
+
export declare function shouldTrackNetworkRequest(options?: RequestOptions): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Creates the error entry produced by one failed request.
|
|
97
|
+
* @param options Request options.
|
|
98
|
+
* @param reason Request failure.
|
|
99
|
+
* @returns The normalized error metric.
|
|
100
|
+
*/
|
|
101
|
+
export declare function createNetworkErrorMetric(options?: RequestOptions, reason?: RequestFailure): NetworkErrorMetric;
|
|
102
|
+
/**
|
|
103
|
+
* Creates a network telemetry collector and starts its periodic timer.
|
|
104
|
+
* @param options Submission callbacks.
|
|
105
|
+
* @returns The network telemetry collector.
|
|
106
|
+
*/
|
|
107
|
+
export declare function createNetworkTelemetryCollector({ intervalMs, onSubmissionFailure, submitMetric, }: NetworkTelemetryCollectorOptions): NetworkTelemetryCollector;
|
|
108
|
+
export {};
|
|
@@ -4,7 +4,7 @@ import BehavioralMetrics from './behavioral-metrics';
|
|
|
4
4
|
import OperationalMetrics from './operational-metrics';
|
|
5
5
|
import BusinessMetrics from './business-metrics';
|
|
6
6
|
import PreLoginMetrics from './prelogin-metrics';
|
|
7
|
-
import { RecursivePartial, MetricEventProduct, MetricEventAgent, MetricEventVerb, ClientEvent, FeatureEvent, EventPayload, MediaQualityEvent, InternalEvent, SubmitClientEventOptions, Table, DelayedClientEvent, DelayedClientFeatureEvent } from './metrics.types';
|
|
7
|
+
import { RecursivePartial, MetricEventProduct, MetricEventAgent, MetricEventVerb, ClientEvent, FeatureEvent, EventPayload, MediaQualityEvent, InternalEvent, SubmitClientEventOptions, Table, DelayedClientEvent, DelayedClientFeatureEvent, PrivacyAndSecurityPermission } from './metrics.types';
|
|
8
8
|
import CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';
|
|
9
9
|
/**
|
|
10
10
|
* Metrics plugin to centralize all types of metrics.
|
|
@@ -33,6 +33,7 @@ declare class Metrics extends WebexPlugin {
|
|
|
33
33
|
*/
|
|
34
34
|
delayedClientEventsOverrides: Partial<DelayedClientEvent['options']>;
|
|
35
35
|
delayedClientFeatureEventsOverrides: Partial<DelayedClientFeatureEvent['options']>;
|
|
36
|
+
private privacyAndSecurityPermissionEnricher;
|
|
36
37
|
/**
|
|
37
38
|
* Constructor
|
|
38
39
|
* @param args
|
|
@@ -78,6 +79,10 @@ declare class Metrics extends WebexPlugin {
|
|
|
78
79
|
* @returns true once we have the deviceId we need to submit business events
|
|
79
80
|
*/
|
|
80
81
|
isReadyToSubmitBusinessEvents(): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* @returns whether the current user agent belongs to an automated user
|
|
84
|
+
*/
|
|
85
|
+
isAutomatedUser(): boolean;
|
|
81
86
|
/**
|
|
82
87
|
* Behavioral event
|
|
83
88
|
* @param args
|
|
@@ -147,6 +152,17 @@ declare class Metrics extends WebexPlugin {
|
|
|
147
152
|
payload?: RecursivePartial<ClientEvent['payload']>;
|
|
148
153
|
options?: SubmitClientEventOptions;
|
|
149
154
|
}): Promise<any>;
|
|
155
|
+
/**
|
|
156
|
+
* Stores the latest browser permission state supplied by the client.
|
|
157
|
+
* @param permission latest normalized permission snapshot
|
|
158
|
+
*/
|
|
159
|
+
setPrivacyAndSecurityPermission(permission: PrivacyAndSecurityPermission): void;
|
|
160
|
+
/**
|
|
161
|
+
* Resolves event options to the call identity used by Call Diagnostic where possible.
|
|
162
|
+
* @param options client event options
|
|
163
|
+
* @returns the permission history scope
|
|
164
|
+
*/
|
|
165
|
+
private getPermissionScope;
|
|
150
166
|
/**
|
|
151
167
|
* Issue request to alias a user's pre-login ID with their CI UUID
|
|
152
168
|
* @param {string} preLoginId
|