@webex/internal-plugin-metrics 3.11.0 → 3.12.0-llmrefactor.2
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/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 +639 -65
- package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.js +168 -76
- package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js +18 -4
- package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
- package/dist/call-diagnostic/config.js +17 -3
- package/dist/call-diagnostic/config.js.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/generic-metrics.js +8 -6
- package/dist/generic-metrics.js.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/metrics.js +1 -1
- package/dist/metrics.types.js +4 -0
- package/dist/metrics.types.js.map +1 -1
- package/dist/new-metrics.js +105 -26
- package/dist/new-metrics.js.map +1 -1
- package/dist/prelogin-metrics.js +106 -0
- package/dist/prelogin-metrics.js.map +1 -0
- 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 +208 -5
- package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +79 -15
- package/dist/types/call-diagnostic/call-diagnostic-metrics.util.d.ts +5 -0
- package/dist/types/call-diagnostic/config.d.ts +5 -0
- package/dist/types/config.d.ts +1 -0
- package/dist/types/index.d.ts +6 -3
- package/dist/types/metrics.types.d.ts +9 -4
- package/dist/types/new-metrics.d.ts +29 -1
- package/dist/types/prelogin-metrics.d.ts +47 -0
- 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/package.json +12 -11
- package/src/automated-user.ts +16 -0
- package/src/batcher.js +4 -0
- package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +800 -75
- package/src/call-diagnostic/call-diagnostic-metrics.ts +102 -15
- package/src/call-diagnostic/call-diagnostic-metrics.util.ts +22 -2
- package/src/call-diagnostic/config.ts +15 -0
- package/src/config.js +1 -0
- package/src/generic-metrics.ts +6 -6
- package/src/index.ts +9 -0
- package/src/metrics.types.ts +27 -5
- package/src/new-metrics.ts +95 -6
- package/src/prelogin-metrics.ts +94 -0
- package/src/privacy-and-security-permission-enricher/constants.ts +33 -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/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 +47 -11
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +1550 -416
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +887 -159
- package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +61 -3
- package/test/unit/spec/new-metrics.ts +183 -50
- package/test/unit/spec/prelogin-metrics-batcher.ts +71 -36
- package/test/unit/spec/prelogin-metrics.ts +132 -0
- package/test/unit/spec/privacy-and-security-permission-enricher.ts +318 -0
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
import { WebexPlugin } from '@webex/webex-core';
|
|
2
2
|
import { MetricEventNames, PreComputedLatencies } from '../metrics.types';
|
|
3
|
+
type SaveTimestampOptions = {
|
|
4
|
+
meetingId?: string;
|
|
5
|
+
dataSetName?: string;
|
|
6
|
+
trackingId?: string;
|
|
7
|
+
};
|
|
8
|
+
type SaveLatencyOptions = {
|
|
9
|
+
accumulate?: boolean;
|
|
10
|
+
meetingId?: string;
|
|
11
|
+
dataSetName?: string;
|
|
12
|
+
};
|
|
13
|
+
type LocusSyncLatencyRecord = {
|
|
14
|
+
meetingId: string;
|
|
15
|
+
dataSetName: string;
|
|
16
|
+
randomBackoffTime: number;
|
|
17
|
+
trackingId?: string;
|
|
18
|
+
syncStart?: number;
|
|
19
|
+
hashTreeRequest?: number;
|
|
20
|
+
hashTreeResponse?: number;
|
|
21
|
+
syncRequest?: number;
|
|
22
|
+
syncResponse?: number;
|
|
23
|
+
messageReceived?: number;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Container for the latencies tracked for a single meeting. Locus sync is currently the only
|
|
27
|
+
* meeting-specific latency we track, but this wrapper lets us add other latency records in the
|
|
28
|
+
* future without changing the shape of `meetingLatencies`.
|
|
29
|
+
*/
|
|
30
|
+
type MeetingLatencyRecord = {
|
|
31
|
+
locusSync: LocusSyncLatencyRecord;
|
|
32
|
+
};
|
|
3
33
|
/**
|
|
4
34
|
* @description Helper class to store latencies timestamp and to calculate various latencies for CA.
|
|
5
35
|
* @exports
|
|
@@ -8,8 +38,12 @@ import { MetricEventNames, PreComputedLatencies } from '../metrics.types';
|
|
|
8
38
|
export default class CallDiagnosticLatencies extends WebexPlugin {
|
|
9
39
|
latencyTimestamps: Map<MetricEventNames, number>;
|
|
10
40
|
precomputedLatencies: Map<PreComputedLatencies, number>;
|
|
41
|
+
meetingLatencies: Map<string, MeetingLatencyRecord[]>;
|
|
11
42
|
private meetingId?;
|
|
12
43
|
private MAX_INTEGER;
|
|
44
|
+
private LOCUS_SYNC_SKEW_THRESHOLD_MS;
|
|
45
|
+
private LOCUS_SYNC_PENDING_RECORD_TTL_MS;
|
|
46
|
+
private LOCUS_SYNC_MAX_RECORDS_PER_DATASET;
|
|
13
47
|
/**
|
|
14
48
|
* @constructor
|
|
15
49
|
*/
|
|
@@ -18,6 +52,164 @@ export default class CallDiagnosticLatencies extends WebexPlugin {
|
|
|
18
52
|
* Clear timestamps
|
|
19
53
|
*/
|
|
20
54
|
clearTimestamps(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Clear tracked Locus sync latency state for a dataset.
|
|
57
|
+
*
|
|
58
|
+
* When a `trackingId` is supplied only the single record matching it is dropped, mirroring the
|
|
59
|
+
* native client which discards the individual in-progress record on a sync error (by syncId).
|
|
60
|
+
* When no `trackingId` is supplied every record for the dataset is dropped (legacy behavior).
|
|
61
|
+
*
|
|
62
|
+
* @param dataSetName dataset name
|
|
63
|
+
* @param meetingId meeting id
|
|
64
|
+
* @param trackingId optional sync tracking id to drop a single record instead of the whole dataset
|
|
65
|
+
*/
|
|
66
|
+
clearLocusSyncLatency(dataSetName: string, meetingId: string, trackingId?: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Calculates Locus sync latency values from stored milestone timestamps.
|
|
69
|
+
* @param meetingId meeting id
|
|
70
|
+
* @param trackingId sync tracking id used to match the record
|
|
71
|
+
* @returns sync latency metrics
|
|
72
|
+
*/
|
|
73
|
+
getLocusSyncLatency(meetingId: string, trackingId: string): {
|
|
74
|
+
totalTime: number;
|
|
75
|
+
syncMessageReceiveTime?: number;
|
|
76
|
+
syncResponseTime?: number;
|
|
77
|
+
randomBackoffTime: number;
|
|
78
|
+
hashtreePrepTime: number;
|
|
79
|
+
hashtreeResponseTime: number;
|
|
80
|
+
syncPrepTime: number;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Records the time the LLM state-update message for a Locus sync arrived. This is the milestone
|
|
84
|
+
* that gates the client.locus.sync.complete metric: the metric is emitted only for flows where
|
|
85
|
+
* the update came over LLM (aligned with the agreed requirement that body/http-only syncs do not
|
|
86
|
+
* emit). The record is matched by meeting id + tracking id, regardless of which other milestones
|
|
87
|
+
* are present yet, so the real arrival time is captured even if the /sync response has not landed.
|
|
88
|
+
* @param meetingId meeting id
|
|
89
|
+
* @param trackingId sync tracking id used to match the pending record
|
|
90
|
+
* @returns void
|
|
91
|
+
*/
|
|
92
|
+
recordLocusSyncMessageReceived(meetingId: string, trackingId: string): void;
|
|
93
|
+
/**
|
|
94
|
+
* Complete and remove the Locus sync latency record for a meeting + tracking id.
|
|
95
|
+
*
|
|
96
|
+
* Both milestones are required, in any arrival order: the metric is emitted only once BOTH the
|
|
97
|
+
* matching LLM broadcast (messageReceived) AND the /sync response have arrived. The LLM broadcast
|
|
98
|
+
* confirms the client that issued the /sync received the resulting state update for its tracking
|
|
99
|
+
* id (so sync cancel, or a sync storm where the final broadcast echoed another client's tracking
|
|
100
|
+
* id, never emit); the /sync response is always waited for too, since the LLM message can arrive
|
|
101
|
+
* before the HTTP response. If either milestone is missing the record is kept so the other can
|
|
102
|
+
* still arrive; it is only consumed when the metric is actually emitted.
|
|
103
|
+
* @param meetingId meeting id
|
|
104
|
+
* @param trackingId sync tracking id used to match the pending record
|
|
105
|
+
* @returns completed sync latency metric payload, or undefined when not completed
|
|
106
|
+
*/
|
|
107
|
+
completeLocusSyncLatency(meetingId: string, trackingId: string): {
|
|
108
|
+
dataSet: string;
|
|
109
|
+
syncLatency: {
|
|
110
|
+
totalTime: number;
|
|
111
|
+
syncMessageReceiveTime?: number;
|
|
112
|
+
syncResponseTime?: number;
|
|
113
|
+
randomBackoffTime: number;
|
|
114
|
+
hashtreePrepTime: number;
|
|
115
|
+
hashtreeResponseTime: number;
|
|
116
|
+
syncPrepTime: number;
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Helper to calculate end - start for Locus sync milestones.
|
|
121
|
+
* @param record tracked milestone timestamps
|
|
122
|
+
* @param a start milestone
|
|
123
|
+
* @param b end milestone
|
|
124
|
+
* @returns latency
|
|
125
|
+
*/
|
|
126
|
+
private getDiffBetweenLocusSyncTimestamps;
|
|
127
|
+
/**
|
|
128
|
+
* Get the timestamp that starts the sync prep segment.
|
|
129
|
+
* @param record tracked milestone timestamps
|
|
130
|
+
* @returns sync prep start milestone
|
|
131
|
+
*/
|
|
132
|
+
private getLocusSyncPrepStart;
|
|
133
|
+
/**
|
|
134
|
+
* Round and clamp Locus sync latency values.
|
|
135
|
+
* @param latency latency value
|
|
136
|
+
* @returns rounded latency
|
|
137
|
+
*/
|
|
138
|
+
private getClampedLocusSyncLatency;
|
|
139
|
+
/**
|
|
140
|
+
* Finds a Locus sync latency record for a meeting using a predicate run against each stored
|
|
141
|
+
* locusSync record.
|
|
142
|
+
* @param meetingId meeting id
|
|
143
|
+
* @param predicate matcher run against each locusSync record
|
|
144
|
+
* @param options.searchFromLatest when true, iterate from the most recently added record first
|
|
145
|
+
* @returns matching Locus sync latency record
|
|
146
|
+
*/
|
|
147
|
+
private findLocusSyncRecord;
|
|
148
|
+
/**
|
|
149
|
+
* Get the Locus sync latency record for a meeting and tracking id.
|
|
150
|
+
* @param meetingId meeting id
|
|
151
|
+
* @param trackingId /sync response tracking id
|
|
152
|
+
* @returns matching Locus sync latency record
|
|
153
|
+
*/
|
|
154
|
+
private getLocusSyncLatencyRecord;
|
|
155
|
+
/**
|
|
156
|
+
* Remove the Locus sync latency record for a meeting and tracking id.
|
|
157
|
+
* @param meetingId meeting id
|
|
158
|
+
* @param trackingId sync tracking id used to match the record
|
|
159
|
+
* @returns void
|
|
160
|
+
*/
|
|
161
|
+
private removeLocusSyncLatencyRecord;
|
|
162
|
+
/**
|
|
163
|
+
* Prune stale never-completed Locus sync latency records for the same dataset as the record that
|
|
164
|
+
* just changed. Records are dropped when they have been pending longer than the TTL, or to keep
|
|
165
|
+
* the number of records per dataset under the safety cap (oldest pending candidates first).
|
|
166
|
+
* @param records current records for the meeting
|
|
167
|
+
* @param changedRecord the record that was just updated, used as the reference point
|
|
168
|
+
* @returns the records to keep
|
|
169
|
+
*/
|
|
170
|
+
private pruneStaleLocusSyncLatencyRecords;
|
|
171
|
+
/**
|
|
172
|
+
* Get the most recent milestone timestamp stored on a Locus sync latency record, checking
|
|
173
|
+
* milestones from latest to earliest so the newest available one is returned.
|
|
174
|
+
* @param record tracked milestone timestamps
|
|
175
|
+
* @returns latest milestone timestamp, or undefined when none are set
|
|
176
|
+
*/
|
|
177
|
+
private getLatestLocusSyncTimestamp;
|
|
178
|
+
/**
|
|
179
|
+
* Persist the Locus sync latency records for a meeting, deleting the meeting entry when no
|
|
180
|
+
* records remain. When pruneOptions is provided, stale records are pruned before saving.
|
|
181
|
+
* @param meetingId meeting id
|
|
182
|
+
* @param records records to save
|
|
183
|
+
* @param pruneOptions when provided, triggers stale record pruning relative to changedRecord
|
|
184
|
+
* @returns void
|
|
185
|
+
*/
|
|
186
|
+
private setMeetingLatencyRecords;
|
|
187
|
+
/**
|
|
188
|
+
* Get the latest Locus sync latency record waiting for sync.start.
|
|
189
|
+
* @param meetingId meeting id
|
|
190
|
+
* @param dataSetName dataset name
|
|
191
|
+
* @returns latest pending Locus sync latency record
|
|
192
|
+
*/
|
|
193
|
+
private getLatestPendingLocusSyncLatencyRecord;
|
|
194
|
+
/**
|
|
195
|
+
* Store random backoff latency for the current or next Locus sync latency record.
|
|
196
|
+
* @param meetingId meeting id
|
|
197
|
+
* @param dataSetName dataset name
|
|
198
|
+
* @param randomBackoffTime random backoff latency value
|
|
199
|
+
* @returns void
|
|
200
|
+
*/
|
|
201
|
+
private saveLocusSyncBackoffLatency;
|
|
202
|
+
/**
|
|
203
|
+
* Checks if metric event name is a Locus sync latency milestone.
|
|
204
|
+
* @param key event name
|
|
205
|
+
* @returns whether event is Locus sync latency milestone
|
|
206
|
+
*/
|
|
207
|
+
private isLocusSyncLatencyEvent;
|
|
208
|
+
/**
|
|
209
|
+
* Stores a Locus sync latency milestone timestamp.
|
|
210
|
+
* @param options options
|
|
211
|
+
*/
|
|
212
|
+
private saveLocusSyncLatencyTimestamp;
|
|
21
213
|
/**
|
|
22
214
|
* Associate current latencies with a meeting id
|
|
23
215
|
* @param meetingId
|
|
@@ -39,19 +231,20 @@ export default class CallDiagnosticLatencies extends WebexPlugin {
|
|
|
39
231
|
saveTimestamp({ key, value, options, }: {
|
|
40
232
|
key: MetricEventNames;
|
|
41
233
|
value?: number;
|
|
42
|
-
options?:
|
|
43
|
-
meetingId?: string;
|
|
44
|
-
};
|
|
234
|
+
options?: SaveTimestampOptions;
|
|
45
235
|
}): void;
|
|
46
236
|
/**
|
|
47
237
|
* Store precomputed latency value
|
|
48
238
|
* @param key - key
|
|
49
239
|
* @param value - value
|
|
50
|
-
* @param
|
|
240
|
+
* @param options - store options (a legacy boolean `accumulate` flag is also accepted)
|
|
241
|
+
* @param options.accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement
|
|
242
|
+
* @param options.meetingId - meeting id, only used for Locus sync latency records
|
|
243
|
+
* @param options.dataSetName - dataset name, only used for Locus sync latency records
|
|
51
244
|
* @throws
|
|
52
245
|
* @returns
|
|
53
246
|
*/
|
|
54
|
-
saveLatency(key: PreComputedLatencies, value: number,
|
|
247
|
+
saveLatency(key: PreComputedLatencies, value: number, options?: SaveLatencyOptions): void;
|
|
55
248
|
/**
|
|
56
249
|
* Measure latency for a request
|
|
57
250
|
* @param callback - callback for which you would like to measure latency
|
|
@@ -149,6 +342,15 @@ export default class CallDiagnosticLatencies extends WebexPlugin {
|
|
|
149
342
|
* @returns - latency
|
|
150
343
|
*/
|
|
151
344
|
getStayLobbyTime(): number;
|
|
345
|
+
/**
|
|
346
|
+
* Stay lobby time capped by a certain timestamp.
|
|
347
|
+
* This is to handle the case where the target end timestamp could happen before the lobby is exited,
|
|
348
|
+
* for example media-engine.ready or client.ice.end
|
|
349
|
+
* This is supposed to be called AFTER the end timestamp happens
|
|
350
|
+
* @param endTimestampKey name of the target end event
|
|
351
|
+
* @returns - latency
|
|
352
|
+
*/
|
|
353
|
+
getStayLobbyTimeCappedBy(endTimestampKey: MetricEventNames): number;
|
|
152
354
|
/**
|
|
153
355
|
* Page JMT
|
|
154
356
|
* @returns - latency
|
|
@@ -258,3 +460,4 @@ export default class CallDiagnosticLatencies extends WebexPlugin {
|
|
|
258
460
|
*/
|
|
259
461
|
getOtherAppApiReqResp(): number;
|
|
260
462
|
}
|
|
463
|
+
export {};
|
|
@@ -27,7 +27,7 @@ type GetIdentifiersOptions = {
|
|
|
27
27
|
export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
28
28
|
private callDiagnosticEventsBatcher;
|
|
29
29
|
private preLoginMetricsBatcher;
|
|
30
|
-
private logger;
|
|
30
|
+
private get logger();
|
|
31
31
|
private hasLoggedBrowserSerial;
|
|
32
32
|
private device;
|
|
33
33
|
private delayedClientEvents;
|
|
@@ -36,6 +36,8 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
36
36
|
private isMercuryConnected;
|
|
37
37
|
private eventLimitTracker;
|
|
38
38
|
private eventLimitWarningsLogged;
|
|
39
|
+
private isTelemetryOptOutManual;
|
|
40
|
+
private isTelemetryOptOutAutomatic;
|
|
39
41
|
validator: (options: {
|
|
40
42
|
type: 'mqe' | 'ce';
|
|
41
43
|
event: Event;
|
|
@@ -53,6 +55,29 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
53
55
|
* @returns one of 'login-ci','unverified-guest', null
|
|
54
56
|
*/
|
|
55
57
|
getCurLoginType(): "unverified-guest" | "login-ci";
|
|
58
|
+
/**
|
|
59
|
+
* Returns the user activation state reported from the browser's navigator.userActivation API
|
|
60
|
+
* @returns object with hasBeenActive and isActive booleans, or undefined if unavailable
|
|
61
|
+
*/
|
|
62
|
+
getUserActivation(): {
|
|
63
|
+
hasBeenActive: boolean;
|
|
64
|
+
isActive: boolean;
|
|
65
|
+
} | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Returns the telemetryOptOut value of the current user
|
|
68
|
+
* @returns one of 'manual', 'automatic', undefined
|
|
69
|
+
*/
|
|
70
|
+
getTelemetryOptOut(): "manual" | "automatic";
|
|
71
|
+
/**
|
|
72
|
+
* Sets the manual telemetry opt-out status for the current user
|
|
73
|
+
* @param value - boolean value indicating manual telemetry opt-out status
|
|
74
|
+
*/
|
|
75
|
+
setIsTelemetryOptOutManual(value: boolean): void;
|
|
76
|
+
/**
|
|
77
|
+
* Sets the automatic telemetry opt-out status for the current user
|
|
78
|
+
* @param value - boolean value indicating automatic telemetry opt-out status
|
|
79
|
+
*/
|
|
80
|
+
setIsTelemetryOptOutAutomatic(value: boolean): void;
|
|
56
81
|
/**
|
|
57
82
|
* Returns if the meeting has converged architecture enabled
|
|
58
83
|
* @param options.meetingId
|
|
@@ -84,6 +109,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
84
109
|
userAgent: string;
|
|
85
110
|
buildType?: "debug" | "test" | "prod" | "tap" | "analyzer-test";
|
|
86
111
|
upgradeChannel?: string;
|
|
112
|
+
upgradeSource?: string;
|
|
87
113
|
instanceId?: string;
|
|
88
114
|
networkType: "wifi" | "ethernet" | "cellular" | "unknown";
|
|
89
115
|
localIP?: string;
|
|
@@ -100,10 +126,14 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
100
126
|
localNetworkPrefix?: string;
|
|
101
127
|
publicNetworkPrefix?: string;
|
|
102
128
|
browserLaunchMethod?: "url-handler" | "activex" | "npapi" | "extension" | "cwsapi" | "java" | "tfs" | "webacd" | "thinclient" | "switch-to-web" | "switch-to-native";
|
|
129
|
+
cwsStatus?: "starting-converged-mtg" | "webexapp-launched" | "webex-launcher-launched";
|
|
130
|
+
cwsVersion?: string;
|
|
103
131
|
clientLaunchMethod?: "url-handler" | "universal-link" | "voice-command" | "notification" | "manual" | "teams-cross-launch" | "mc-cross-launch" | "cws" | "installer" | "installer-launcher" | "launcher" | "cws-launcher";
|
|
104
132
|
urlProtocolLaunchMethod?: "manual" | "auto" | "extension-fallback";
|
|
105
133
|
browser?: string;
|
|
106
134
|
browserVersion?: string;
|
|
135
|
+
isSupportedBrowserFamily?: boolean;
|
|
136
|
+
isOutdatedBrowserVersion?: boolean;
|
|
107
137
|
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";
|
|
108
138
|
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";
|
|
109
139
|
schedulingClientType?: "TEAMS_CLIENT" | "GOOGLE_ADDON" | "PT" | "PUBLIC_API" | "UNIFIED_PAGE" | "WEBEX_PAGE" | "GOOGLE_NOTIFICATION_CALENDAR" | "MSFT_NOTIFICATION_ADDIN" | "MSFT_NOTIFICATION_CALENDAR" | "OUTLOOK_ADDIN";
|
|
@@ -111,6 +141,10 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
111
141
|
clientVersionStatus?: "CURRENT" | "LEGACY" | "UNSUPPORTED";
|
|
112
142
|
localClientVersion?: string;
|
|
113
143
|
launcherVersion?: string;
|
|
144
|
+
installerVersion?: string;
|
|
145
|
+
installerMajorVersion?: number;
|
|
146
|
+
installerMinorVersion?: number;
|
|
147
|
+
installerRevision?: number;
|
|
114
148
|
modelNumber?: string;
|
|
115
149
|
joinFirstUpdateLater?: "ep-enabled" | "sp-enabled" | "not-enabled";
|
|
116
150
|
standbyUsed?: boolean;
|
|
@@ -132,14 +166,15 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
132
166
|
cpuInfo?: {
|
|
133
167
|
description: string;
|
|
134
168
|
numberOfCores: number;
|
|
135
|
-
architecture: "unknown" | "intel32" | "intel64" | "amd32" | "amd64" | "arm32" | "arm64";
|
|
169
|
+
architecture: "unknown" | "intel32" | "intel64" | "amd32" | "amd64" | "arm32" | "arm64" | "armv9" | "armv8" | "armv7" | "armv6" | "x86_64" | "x86_32";
|
|
136
170
|
staticPerformance?: string;
|
|
137
171
|
clockSpeedGigaHertz?: number;
|
|
138
|
-
additionalProperties?:
|
|
172
|
+
additionalProperties?: never;
|
|
139
173
|
};
|
|
140
174
|
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";
|
|
141
175
|
videoDisplayMode?: "grid-view" | "active-speaker-view";
|
|
142
|
-
videoLayoutType?: "stack" | "stackWithShare" | "sideBySide" | "sideBySideWithShare" | "grid" | "floatingActive" | "floatingThumbnail" | "floatingGrid" | "overlay" | "focus" | "prominent" | "focusWithShare" | "prominentWithShare" | "equal" | "equalWithShare";
|
|
176
|
+
videoLayoutType?: "auto" | "stack" | "stackWithShare" | "sideBySide" | "sideBySideWithShare" | "grid" | "floatingActive" | "floatingThumbnail" | "floatingGrid" | "overlay" | "focus" | "prominent" | "focusWithShare" | "prominentWithShare" | "equal" | "equalWithShare" | "largeGallery" | "autoWithShare";
|
|
177
|
+
appliedLayout?: "auto" | "stack" | "stackWithShare" | "sideBySide" | "sideBySideWithShare" | "grid" | "floatingActive" | "floatingThumbnail" | "floatingGrid" | "overlay" | "focus" | "prominent" | "focusWithShare" | "prominentWithShare" | "equal" | "equalWithShare" | "largeGallery" | "autoWithShare";
|
|
143
178
|
videoRenderType?: "wme" | "client_d3d" | "client_gdi";
|
|
144
179
|
vdiInfo?: {};
|
|
145
180
|
is64BitsClient?: boolean;
|
|
@@ -151,13 +186,24 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
151
186
|
vendorId?: string;
|
|
152
187
|
staticPerformanceLevel?: string;
|
|
153
188
|
staticPerformanceScore?: number;
|
|
154
|
-
|
|
189
|
+
preInstalledTime?: string;
|
|
190
|
+
preInstalledType?: "installer" | "launcher" | "app";
|
|
191
|
+
preInstalledVersion?: string;
|
|
192
|
+
additionalProperties?: never;
|
|
193
|
+
};
|
|
194
|
+
installerInfo?: {
|
|
195
|
+
packageSuffix?: string;
|
|
196
|
+
packageArch?: string;
|
|
197
|
+
launchId?: string;
|
|
198
|
+
packageCount?: number;
|
|
199
|
+
totalSize?: number;
|
|
200
|
+
additionalProperties?: never;
|
|
155
201
|
};
|
|
156
202
|
emmVendorId?: string;
|
|
157
203
|
isHybridMedia?: boolean;
|
|
158
204
|
originData?: {};
|
|
159
205
|
serviceVersion?: string;
|
|
160
|
-
additionalProperties?:
|
|
206
|
+
additionalProperties?: never;
|
|
161
207
|
};
|
|
162
208
|
/**
|
|
163
209
|
* Gather identifier details for call diagnostic payload.
|
|
@@ -170,7 +216,9 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
170
216
|
participantId?: string;
|
|
171
217
|
breakoutGroupId?: string;
|
|
172
218
|
breakoutMoveId?: string;
|
|
219
|
+
breakoutTrackingId?: string;
|
|
173
220
|
breakoutSessionId?: string;
|
|
221
|
+
browserId?: string;
|
|
174
222
|
ciExchangeTokenUrl?: string;
|
|
175
223
|
confluenceId?: string;
|
|
176
224
|
cpaasIdentifiers?: {
|
|
@@ -180,7 +228,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
180
228
|
imiAppId: string;
|
|
181
229
|
sessionId: string;
|
|
182
230
|
sessionInstanceId: string;
|
|
183
|
-
additionalProperties?:
|
|
231
|
+
additionalProperties?: never;
|
|
184
232
|
};
|
|
185
233
|
csdmDeviceUrl?: string;
|
|
186
234
|
destinationBreakoutSessionId?: string;
|
|
@@ -196,6 +244,8 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
196
244
|
ivrId?: string;
|
|
197
245
|
callId?: string;
|
|
198
246
|
pairCallId?: string;
|
|
247
|
+
llmWebsocketUrl?: string;
|
|
248
|
+
locusCluster?: string;
|
|
199
249
|
locusId?: string;
|
|
200
250
|
locusJoinUrl?: string;
|
|
201
251
|
locusSessionId?: string;
|
|
@@ -209,9 +259,11 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
209
259
|
meetingLookupUrl?: string;
|
|
210
260
|
meetingOrgId?: string;
|
|
211
261
|
metricServiceUrl?: string;
|
|
262
|
+
mercuryWebsocketUrl?: string;
|
|
212
263
|
msteamsTenantGuid?: string;
|
|
213
264
|
msteamsConferenceId?: string;
|
|
214
265
|
msteamsMeetingId?: string;
|
|
266
|
+
mtid?: string;
|
|
215
267
|
oauth2ClientId?: string;
|
|
216
268
|
orgId?: string;
|
|
217
269
|
provisionalCorrelationId?: string;
|
|
@@ -222,7 +274,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
222
274
|
sipSessionId?: {
|
|
223
275
|
local?: string;
|
|
224
276
|
remote?: string;
|
|
225
|
-
additionalProperties?:
|
|
277
|
+
additionalProperties?: never;
|
|
226
278
|
};
|
|
227
279
|
sipUri?: string;
|
|
228
280
|
subConfId?: string;
|
|
@@ -250,14 +302,16 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
250
302
|
idForEndpointAB?: string;
|
|
251
303
|
customerOrgId?: string;
|
|
252
304
|
correlationId: string;
|
|
253
|
-
additionalProperties?:
|
|
305
|
+
additionalProperties?: never;
|
|
254
306
|
} | {
|
|
255
307
|
aggregatedBreakoutMoveId?: string;
|
|
256
308
|
attendeeId?: string;
|
|
257
309
|
participantId?: string;
|
|
258
310
|
breakoutGroupId?: string;
|
|
259
311
|
breakoutMoveId?: string;
|
|
312
|
+
breakoutTrackingId?: string;
|
|
260
313
|
breakoutSessionId?: string;
|
|
314
|
+
browserId?: string;
|
|
261
315
|
ciExchangeTokenUrl?: string;
|
|
262
316
|
confluenceId?: string;
|
|
263
317
|
cpaasIdentifiers?: {
|
|
@@ -267,7 +321,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
267
321
|
imiAppId: string;
|
|
268
322
|
sessionId: string;
|
|
269
323
|
sessionInstanceId: string;
|
|
270
|
-
additionalProperties?:
|
|
324
|
+
additionalProperties?: never;
|
|
271
325
|
};
|
|
272
326
|
csdmDeviceUrl?: string;
|
|
273
327
|
destinationBreakoutSessionId?: string;
|
|
@@ -283,6 +337,8 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
283
337
|
ivrId?: string;
|
|
284
338
|
callId?: string;
|
|
285
339
|
pairCallId?: string;
|
|
340
|
+
llmWebsocketUrl?: string;
|
|
341
|
+
locusCluster?: string;
|
|
286
342
|
locusId?: string;
|
|
287
343
|
locusJoinUrl?: string;
|
|
288
344
|
locusSessionId?: string;
|
|
@@ -296,9 +352,11 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
296
352
|
meetingLookupUrl?: string;
|
|
297
353
|
meetingOrgId?: string;
|
|
298
354
|
metricServiceUrl?: string;
|
|
355
|
+
mercuryWebsocketUrl?: string;
|
|
299
356
|
msteamsTenantGuid?: string;
|
|
300
357
|
msteamsConferenceId?: string;
|
|
301
358
|
msteamsMeetingId?: string;
|
|
359
|
+
mtid?: string;
|
|
302
360
|
oauth2ClientId?: string;
|
|
303
361
|
orgId?: string;
|
|
304
362
|
provisionalCorrelationId?: string;
|
|
@@ -309,7 +367,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
309
367
|
sipSessionId?: {
|
|
310
368
|
local?: string;
|
|
311
369
|
remote?: string;
|
|
312
|
-
additionalProperties?:
|
|
370
|
+
additionalProperties?: never;
|
|
313
371
|
};
|
|
314
372
|
sipUri?: string;
|
|
315
373
|
subConfId?: string;
|
|
@@ -337,14 +395,16 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
337
395
|
idForEndpointAB?: string;
|
|
338
396
|
customerOrgId?: string;
|
|
339
397
|
correlationId: string;
|
|
340
|
-
additionalProperties?:
|
|
398
|
+
additionalProperties?: never;
|
|
341
399
|
} | {
|
|
342
400
|
aggregatedBreakoutMoveId?: string;
|
|
343
401
|
attendeeId?: string;
|
|
344
402
|
participantId?: string;
|
|
345
403
|
breakoutGroupId?: string;
|
|
346
404
|
breakoutMoveId?: string;
|
|
405
|
+
breakoutTrackingId?: string;
|
|
347
406
|
breakoutSessionId?: string;
|
|
407
|
+
browserId?: string;
|
|
348
408
|
ciExchangeTokenUrl?: string;
|
|
349
409
|
confluenceId?: string;
|
|
350
410
|
cpaasIdentifiers?: {
|
|
@@ -354,7 +414,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
354
414
|
imiAppId: string;
|
|
355
415
|
sessionId: string;
|
|
356
416
|
sessionInstanceId: string;
|
|
357
|
-
additionalProperties?:
|
|
417
|
+
additionalProperties?: never;
|
|
358
418
|
};
|
|
359
419
|
csdmDeviceUrl?: string;
|
|
360
420
|
destinationBreakoutSessionId?: string;
|
|
@@ -370,6 +430,8 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
370
430
|
ivrId?: string;
|
|
371
431
|
callId?: string;
|
|
372
432
|
pairCallId?: string;
|
|
433
|
+
llmWebsocketUrl?: string;
|
|
434
|
+
locusCluster?: string;
|
|
373
435
|
locusId?: string;
|
|
374
436
|
locusJoinUrl?: string;
|
|
375
437
|
locusSessionId?: string;
|
|
@@ -383,9 +445,11 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
383
445
|
meetingLookupUrl?: string;
|
|
384
446
|
meetingOrgId?: string;
|
|
385
447
|
metricServiceUrl?: string;
|
|
448
|
+
mercuryWebsocketUrl?: string;
|
|
386
449
|
msteamsTenantGuid?: string;
|
|
387
450
|
msteamsConferenceId?: string;
|
|
388
451
|
msteamsMeetingId?: string;
|
|
452
|
+
mtid?: string;
|
|
389
453
|
oauth2ClientId?: string;
|
|
390
454
|
orgId?: string;
|
|
391
455
|
provisionalCorrelationId?: string;
|
|
@@ -396,7 +460,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
396
460
|
sipSessionId?: {
|
|
397
461
|
local?: string;
|
|
398
462
|
remote?: string;
|
|
399
|
-
additionalProperties?:
|
|
463
|
+
additionalProperties?: never;
|
|
400
464
|
};
|
|
401
465
|
sipUri?: string;
|
|
402
466
|
subConfId?: string;
|
|
@@ -424,7 +488,7 @@ export default class CallDiagnosticMetrics extends StatelessWebexPlugin {
|
|
|
424
488
|
idForEndpointAB?: string;
|
|
425
489
|
customerOrgId?: string;
|
|
426
490
|
correlationId: string;
|
|
427
|
-
additionalProperties?:
|
|
491
|
+
additionalProperties?: never;
|
|
428
492
|
};
|
|
429
493
|
/**
|
|
430
494
|
* Create diagnostic event, which can hold client event, feature event or MQE event data.
|
|
@@ -59,6 +59,11 @@ export declare const isUnauthorizedError: (rawError: any) => boolean;
|
|
|
59
59
|
* @returns {boolean}
|
|
60
60
|
*/
|
|
61
61
|
export declare const isSdpOfferCreationError: (rawError: any) => boolean;
|
|
62
|
+
export declare const isWebrtcApiNotAvailableError: (rawError: {
|
|
63
|
+
code: number;
|
|
64
|
+
message: string;
|
|
65
|
+
name: string;
|
|
66
|
+
} | unknown) => boolean;
|
|
62
67
|
/**
|
|
63
68
|
* Checks if the given error is a browser media error by its name.
|
|
64
69
|
* Returns true if the error name matches any known browser media error name in the mapping.
|
|
@@ -99,13 +99,16 @@ export declare const ERROR_DESCRIPTIONS: {
|
|
|
99
99
|
MULTISTREAM_NOT_AVAILABLE: string;
|
|
100
100
|
SDP_OFFER_CREATION_ERROR: string;
|
|
101
101
|
SDP_OFFER_CREATION_ERROR_MISSING_CODEC: string;
|
|
102
|
+
WEBRTC_API_NOT_AVAILABLE: string;
|
|
102
103
|
WDM_RESTRICTED_REGION: string;
|
|
103
104
|
USER_NOT_ALLOWED_JOIN_WEBINAR: string;
|
|
105
|
+
INVALID_MEETING_INFO: string;
|
|
104
106
|
};
|
|
105
107
|
export declare const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP: {
|
|
106
108
|
58400: number;
|
|
107
109
|
99002: number;
|
|
108
110
|
99009: number;
|
|
111
|
+
99019: number;
|
|
109
112
|
58500: number;
|
|
110
113
|
400001: number;
|
|
111
114
|
403004: number;
|
|
@@ -133,6 +136,7 @@ export declare const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP: {
|
|
|
133
136
|
423001: number;
|
|
134
137
|
423005: number;
|
|
135
138
|
423006: number;
|
|
139
|
+
423008: number;
|
|
136
140
|
423010: number;
|
|
137
141
|
423012: number;
|
|
138
142
|
423013: number;
|
|
@@ -146,6 +150,7 @@ export declare const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP: {
|
|
|
146
150
|
403037: number;
|
|
147
151
|
403003: number;
|
|
148
152
|
403030: number;
|
|
153
|
+
403106: number;
|
|
149
154
|
2403001: number;
|
|
150
155
|
2403002: number;
|
|
151
156
|
2403003: number;
|
package/dist/types/config.d.ts
CHANGED
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';
|
|
@@ -13,6 +14,8 @@ import BehavioralMetrics from './behavioral-metrics';
|
|
|
13
14
|
import OperationalMetrics from './operational-metrics';
|
|
14
15
|
import BusinessMetrics from './business-metrics';
|
|
15
16
|
import RtcMetrics from './rtcMetrics';
|
|
17
|
+
import PreLoginMetrics from './prelogin-metrics';
|
|
16
18
|
export { default, getOSNameInternal } from './metrics';
|
|
17
|
-
export { config, CALL_DIAGNOSTIC_CONFIG, NewMetrics, Utils, CallDiagnosticUtils, CallDiagnosticLatencies, CallDiagnosticMetrics, BehavioralMetrics, OperationalMetrics, BusinessMetrics, RtcMetrics, };
|
|
18
|
-
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, };
|