@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.
Files changed (74) hide show
  1. package/dist/automated-user.js +19 -0
  2. package/dist/automated-user.js.map +1 -0
  3. package/dist/batcher.js +3 -0
  4. package/dist/batcher.js.map +1 -1
  5. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +639 -65
  6. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
  7. package/dist/call-diagnostic/call-diagnostic-metrics.js +168 -76
  8. package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
  9. package/dist/call-diagnostic/call-diagnostic-metrics.util.js +18 -4
  10. package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
  11. package/dist/call-diagnostic/config.js +17 -3
  12. package/dist/call-diagnostic/config.js.map +1 -1
  13. package/dist/config.js +1 -0
  14. package/dist/config.js.map +1 -1
  15. package/dist/generic-metrics.js +8 -6
  16. package/dist/generic-metrics.js.map +1 -1
  17. package/dist/index.js +22 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/metrics.js +1 -1
  20. package/dist/metrics.types.js +4 -0
  21. package/dist/metrics.types.js.map +1 -1
  22. package/dist/new-metrics.js +105 -26
  23. package/dist/new-metrics.js.map +1 -1
  24. package/dist/prelogin-metrics.js +106 -0
  25. package/dist/prelogin-metrics.js.map +1 -0
  26. package/dist/privacy-and-security-permission-enricher/constants.js +18 -0
  27. package/dist/privacy-and-security-permission-enricher/constants.js.map +1 -0
  28. package/dist/privacy-and-security-permission-enricher/index.js +143 -0
  29. package/dist/privacy-and-security-permission-enricher/index.js.map +1 -0
  30. package/dist/privacy-and-security-permission-enricher/types.js +7 -0
  31. package/dist/privacy-and-security-permission-enricher/types.js.map +1 -0
  32. package/dist/privacy-and-security-permission-enricher/utils.js +71 -0
  33. package/dist/privacy-and-security-permission-enricher/utils.js.map +1 -0
  34. package/dist/types/automated-user.d.ts +2 -0
  35. package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +208 -5
  36. package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +79 -15
  37. package/dist/types/call-diagnostic/call-diagnostic-metrics.util.d.ts +5 -0
  38. package/dist/types/call-diagnostic/config.d.ts +5 -0
  39. package/dist/types/config.d.ts +1 -0
  40. package/dist/types/index.d.ts +6 -3
  41. package/dist/types/metrics.types.d.ts +9 -4
  42. package/dist/types/new-metrics.d.ts +29 -1
  43. package/dist/types/prelogin-metrics.d.ts +47 -0
  44. package/dist/types/privacy-and-security-permission-enricher/constants.d.ts +6 -0
  45. package/dist/types/privacy-and-security-permission-enricher/index.d.ts +40 -0
  46. package/dist/types/privacy-and-security-permission-enricher/types.d.ts +14 -0
  47. package/dist/types/privacy-and-security-permission-enricher/utils.d.ts +5 -0
  48. package/package.json +12 -11
  49. package/src/automated-user.ts +16 -0
  50. package/src/batcher.js +4 -0
  51. package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +800 -75
  52. package/src/call-diagnostic/call-diagnostic-metrics.ts +102 -15
  53. package/src/call-diagnostic/call-diagnostic-metrics.util.ts +22 -2
  54. package/src/call-diagnostic/config.ts +15 -0
  55. package/src/config.js +1 -0
  56. package/src/generic-metrics.ts +6 -6
  57. package/src/index.ts +9 -0
  58. package/src/metrics.types.ts +27 -5
  59. package/src/new-metrics.ts +95 -6
  60. package/src/prelogin-metrics.ts +94 -0
  61. package/src/privacy-and-security-permission-enricher/constants.ts +33 -0
  62. package/src/privacy-and-security-permission-enricher/index.ts +142 -0
  63. package/src/privacy-and-security-permission-enricher/types.ts +21 -0
  64. package/src/privacy-and-security-permission-enricher/utils.ts +82 -0
  65. package/test/unit/spec/automated-user.ts +43 -0
  66. package/test/unit/spec/batcher.js +43 -0
  67. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +47 -11
  68. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +1550 -416
  69. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +887 -159
  70. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +61 -3
  71. package/test/unit/spec/new-metrics.ts +183 -50
  72. package/test/unit/spec/prelogin-metrics-batcher.ts +71 -36
  73. package/test/unit/spec/prelogin-metrics.ts +132 -0
  74. 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 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
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, accumulate?: boolean): void;
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?: false;
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
- additionalProperties?: false;
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?: false;
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?: false;
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?: false;
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?: false;
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?: false;
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?: false;
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?: false;
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?: false;
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?: false;
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?: false;
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;
@@ -12,6 +12,7 @@ declare namespace _default {
12
12
  const batcherMaxCalls: number;
13
13
  const batcherMaxWait: number;
14
14
  const batcherRetryPlateau: number;
15
+ const batcherRetryOnNetworkError: boolean;
15
16
  const waitForServiceTimeout: number;
16
17
  }
17
18
  export { metrics_1 as metrics };
@@ -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 { ClientEvent, ClientEventLeaveReason, SubmitBehavioralEvent, SubmitClientEvent, SubmitInternalEvent, SubmitOperationalEvent, SubmitBusinessEvent, SubmitMQE, PreComputedLatencies, SubmitFeatureEvent } from './metrics.types';
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 type { ClientEvent, ClientEventLeaveReason, SubmitBehavioralEvent, SubmitClientEvent, SubmitInternalEvent, SubmitMQE, SubmitOperationalEvent, SubmitBusinessEvent, PreComputedLatencies, SubmitFeatureEvent, };
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, };