@webex/plugin-meetings 3.11.0 → 3.12.0

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 (170) hide show
  1. package/dist/aiEnableRequest/index.js +184 -0
  2. package/dist/aiEnableRequest/index.js.map +1 -0
  3. package/dist/aiEnableRequest/utils.js +36 -0
  4. package/dist/aiEnableRequest/utils.js.map +1 -0
  5. package/dist/annotation/index.js +14 -5
  6. package/dist/annotation/index.js.map +1 -1
  7. package/dist/breakouts/breakout.js +1 -1
  8. package/dist/breakouts/index.js +1 -1
  9. package/dist/config.js +5 -1
  10. package/dist/config.js.map +1 -1
  11. package/dist/constants.js +28 -6
  12. package/dist/constants.js.map +1 -1
  13. package/dist/hashTree/constants.js +3 -1
  14. package/dist/hashTree/constants.js.map +1 -1
  15. package/dist/hashTree/hashTree.js +18 -0
  16. package/dist/hashTree/hashTree.js.map +1 -1
  17. package/dist/hashTree/hashTreeParser.js +709 -380
  18. package/dist/hashTree/hashTreeParser.js.map +1 -1
  19. package/dist/hashTree/types.js +4 -2
  20. package/dist/hashTree/types.js.map +1 -1
  21. package/dist/hashTree/utils.js +10 -0
  22. package/dist/hashTree/utils.js.map +1 -1
  23. package/dist/index.js +11 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/interceptors/constant.js +12 -0
  26. package/dist/interceptors/constant.js.map +1 -0
  27. package/dist/interceptors/dataChannelAuthToken.js +290 -0
  28. package/dist/interceptors/dataChannelAuthToken.js.map +1 -0
  29. package/dist/interceptors/index.js +7 -0
  30. package/dist/interceptors/index.js.map +1 -1
  31. package/dist/interceptors/utils.js +27 -0
  32. package/dist/interceptors/utils.js.map +1 -0
  33. package/dist/interpretation/index.js +2 -2
  34. package/dist/interpretation/index.js.map +1 -1
  35. package/dist/interpretation/siLanguage.js +1 -1
  36. package/dist/locus-info/controlsUtils.js +5 -3
  37. package/dist/locus-info/controlsUtils.js.map +1 -1
  38. package/dist/locus-info/index.js +217 -79
  39. package/dist/locus-info/index.js.map +1 -1
  40. package/dist/locus-info/selfUtils.js +1 -0
  41. package/dist/locus-info/selfUtils.js.map +1 -1
  42. package/dist/locus-info/types.js.map +1 -1
  43. package/dist/media/MediaConnectionAwaiter.js +57 -1
  44. package/dist/media/MediaConnectionAwaiter.js.map +1 -1
  45. package/dist/media/properties.js +4 -2
  46. package/dist/media/properties.js.map +1 -1
  47. package/dist/meeting/in-meeting-actions.js +7 -1
  48. package/dist/meeting/in-meeting-actions.js.map +1 -1
  49. package/dist/meeting/index.js +1082 -861
  50. package/dist/meeting/index.js.map +1 -1
  51. package/dist/meeting/request.js +50 -0
  52. package/dist/meeting/request.js.map +1 -1
  53. package/dist/meeting/request.type.js.map +1 -1
  54. package/dist/meeting/util.js +133 -3
  55. package/dist/meeting/util.js.map +1 -1
  56. package/dist/meetings/index.js +100 -45
  57. package/dist/meetings/index.js.map +1 -1
  58. package/dist/member/index.js +10 -0
  59. package/dist/member/index.js.map +1 -1
  60. package/dist/member/util.js +10 -0
  61. package/dist/member/util.js.map +1 -1
  62. package/dist/metrics/constants.js +2 -1
  63. package/dist/metrics/constants.js.map +1 -1
  64. package/dist/multistream/mediaRequestManager.js +9 -60
  65. package/dist/multistream/mediaRequestManager.js.map +1 -1
  66. package/dist/multistream/remoteMediaManager.js +11 -0
  67. package/dist/multistream/remoteMediaManager.js.map +1 -1
  68. package/dist/reachability/index.js +18 -10
  69. package/dist/reachability/index.js.map +1 -1
  70. package/dist/reactions/reactions.type.js.map +1 -1
  71. package/dist/reconnection-manager/index.js +0 -1
  72. package/dist/reconnection-manager/index.js.map +1 -1
  73. package/dist/types/aiEnableRequest/index.d.ts +5 -0
  74. package/dist/types/aiEnableRequest/utils.d.ts +2 -0
  75. package/dist/types/config.d.ts +3 -0
  76. package/dist/types/constants.d.ts +23 -1
  77. package/dist/types/hashTree/constants.d.ts +1 -0
  78. package/dist/types/hashTree/hashTree.d.ts +7 -0
  79. package/dist/types/hashTree/hashTreeParser.d.ts +99 -14
  80. package/dist/types/hashTree/types.d.ts +3 -0
  81. package/dist/types/hashTree/utils.d.ts +6 -0
  82. package/dist/types/index.d.ts +1 -0
  83. package/dist/types/interceptors/constant.d.ts +5 -0
  84. package/dist/types/interceptors/dataChannelAuthToken.d.ts +43 -0
  85. package/dist/types/interceptors/index.d.ts +2 -1
  86. package/dist/types/interceptors/utils.d.ts +1 -0
  87. package/dist/types/locus-info/index.d.ts +21 -2
  88. package/dist/types/locus-info/types.d.ts +1 -0
  89. package/dist/types/media/MediaConnectionAwaiter.d.ts +10 -1
  90. package/dist/types/media/properties.d.ts +2 -1
  91. package/dist/types/meeting/in-meeting-actions.d.ts +6 -0
  92. package/dist/types/meeting/index.d.ts +38 -6
  93. package/dist/types/meeting/request.d.ts +16 -1
  94. package/dist/types/meeting/request.type.d.ts +5 -0
  95. package/dist/types/meeting/util.d.ts +31 -0
  96. package/dist/types/meetings/index.d.ts +4 -2
  97. package/dist/types/member/index.d.ts +1 -0
  98. package/dist/types/member/util.d.ts +5 -0
  99. package/dist/types/metrics/constants.d.ts +1 -0
  100. package/dist/types/multistream/mediaRequestManager.d.ts +0 -23
  101. package/dist/types/reactions/reactions.type.d.ts +1 -0
  102. package/dist/types/webinar/utils.d.ts +6 -0
  103. package/dist/webinar/index.js +260 -90
  104. package/dist/webinar/index.js.map +1 -1
  105. package/dist/webinar/utils.js +25 -0
  106. package/dist/webinar/utils.js.map +1 -0
  107. package/package.json +24 -23
  108. package/src/aiEnableRequest/README.md +84 -0
  109. package/src/aiEnableRequest/index.ts +170 -0
  110. package/src/aiEnableRequest/utils.ts +25 -0
  111. package/src/annotation/index.ts +27 -7
  112. package/src/config.ts +3 -0
  113. package/src/constants.ts +29 -1
  114. package/src/hashTree/constants.ts +1 -0
  115. package/src/hashTree/hashTree.ts +17 -0
  116. package/src/hashTree/hashTreeParser.ts +627 -249
  117. package/src/hashTree/types.ts +4 -0
  118. package/src/hashTree/utils.ts +9 -0
  119. package/src/index.ts +8 -1
  120. package/src/interceptors/constant.ts +6 -0
  121. package/src/interceptors/dataChannelAuthToken.ts +170 -0
  122. package/src/interceptors/index.ts +2 -1
  123. package/src/interceptors/utils.ts +16 -0
  124. package/src/interpretation/index.ts +2 -2
  125. package/src/locus-info/controlsUtils.ts +11 -0
  126. package/src/locus-info/index.ts +231 -61
  127. package/src/locus-info/selfUtils.ts +1 -0
  128. package/src/locus-info/types.ts +1 -0
  129. package/src/media/MediaConnectionAwaiter.ts +41 -1
  130. package/src/media/properties.ts +3 -1
  131. package/src/meeting/in-meeting-actions.ts +12 -0
  132. package/src/meeting/index.ts +205 -44
  133. package/src/meeting/request.ts +42 -0
  134. package/src/meeting/request.type.ts +6 -0
  135. package/src/meeting/util.ts +160 -2
  136. package/src/meetings/index.ts +135 -41
  137. package/src/member/index.ts +10 -0
  138. package/src/member/util.ts +12 -0
  139. package/src/metrics/constants.ts +1 -0
  140. package/src/multistream/mediaRequestManager.ts +4 -54
  141. package/src/multistream/remoteMediaManager.ts +13 -0
  142. package/src/reachability/index.ts +9 -0
  143. package/src/reactions/reactions.type.ts +1 -0
  144. package/src/reconnection-manager/index.ts +0 -1
  145. package/src/webinar/index.ts +162 -5
  146. package/src/webinar/utils.ts +16 -0
  147. package/test/unit/spec/aiEnableRequest/index.ts +981 -0
  148. package/test/unit/spec/aiEnableRequest/utils.ts +130 -0
  149. package/test/unit/spec/annotation/index.ts +69 -7
  150. package/test/unit/spec/hashTree/hashTree.ts +66 -0
  151. package/test/unit/spec/hashTree/hashTreeParser.ts +1869 -189
  152. package/test/unit/spec/interceptors/dataChannelAuthToken.ts +210 -0
  153. package/test/unit/spec/interceptors/utils.ts +75 -0
  154. package/test/unit/spec/locus-info/controlsUtils.js +29 -0
  155. package/test/unit/spec/locus-info/index.js +383 -46
  156. package/test/unit/spec/media/MediaConnectionAwaiter.ts +41 -1
  157. package/test/unit/spec/media/properties.ts +12 -3
  158. package/test/unit/spec/meeting/in-meeting-actions.ts +8 -2
  159. package/test/unit/spec/meeting/index.js +716 -115
  160. package/test/unit/spec/meeting/request.js +70 -0
  161. package/test/unit/spec/meeting/utils.js +438 -26
  162. package/test/unit/spec/meetings/index.js +652 -31
  163. package/test/unit/spec/member/index.js +28 -4
  164. package/test/unit/spec/member/util.js +65 -27
  165. package/test/unit/spec/multistream/mediaRequestManager.ts +2 -85
  166. package/test/unit/spec/multistream/remoteMediaManager.ts +30 -0
  167. package/test/unit/spec/reachability/index.ts +23 -0
  168. package/test/unit/spec/reconnection-manager/index.js +4 -8
  169. package/test/unit/spec/webinar/index.ts +348 -36
  170. package/test/unit/spec/webinar/utils.ts +39 -0
@@ -0,0 +1,43 @@
1
+ /*!
2
+ * Copyright (c) 2015-2026 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+ import { Interceptor } from '@webex/http-core';
5
+ /**
6
+ * @class
7
+ */
8
+ export default class DataChannelAuthTokenInterceptor extends Interceptor {
9
+ private _refreshDataChannelToken;
10
+ private _isDataChannelTokenEnabled;
11
+ constructor(options: any);
12
+ /**
13
+ * @returns {DataChannelAuthTokenInterceptor}
14
+ */
15
+ static create(): DataChannelAuthTokenInterceptor;
16
+ private getRetryKey;
17
+ private getHeader;
18
+ /**
19
+ * Intercepts outgoing requests and refreshes the Data-Channel-Auth-Token
20
+ * if the current JWT token is expired before the request is sent.
21
+ *
22
+ * @param {Object} options - The original request options.
23
+ * @returns {Promise<Object>} Updated request options with refreshed token if needed.
24
+ */
25
+ onRequest(options: any): Promise<any>;
26
+ /**
27
+ * Intercept responses and, on 401/403 with `Data-Channel-Auth-Token` header,
28
+ * attempt to refresh the data channel token and retry the original request once.
29
+ *
30
+ * @param {Object} options
31
+ * @param {Object} reason
32
+ * @returns {Promise<HttpResponse>}
33
+ */
34
+ onResponseError(options: any, reason: any): Promise<unknown>;
35
+ /**
36
+ * Retry the failed data channel request after a delay.
37
+ * Refreshes the Data-Channel-Auth-Token and re-sends the original request.
38
+ *
39
+ * @param {Object} options - Original request options.
40
+ * @returns {Promise<HttpResponse>} - Resolves on successful retry.
41
+ */
42
+ refreshTokenAndRetryWithDelay(options: any): Promise<unknown>;
43
+ }
@@ -1,3 +1,4 @@
1
1
  import LocusRetryStatusInterceptor from './locusRetry';
2
2
  import LocusRouteTokenInterceptor from './locusRouteToken';
3
- export { LocusRetryStatusInterceptor, LocusRouteTokenInterceptor };
3
+ import DataChannelAuthTokenInterceptor from './dataChannelAuthToken';
4
+ export { LocusRetryStatusInterceptor, LocusRouteTokenInterceptor, DataChannelAuthTokenInterceptor };
@@ -0,0 +1 @@
1
+ export declare const isJwtTokenExpired: (token: string) => boolean;
@@ -1,6 +1,6 @@
1
1
  import EventsScope from '../common/events/events-scope';
2
2
  import { LOCUSEVENT } from '../constants';
3
- import HashTreeParser, { DataSet, HashTreeMessage } from '../hashTree/hashTreeParser';
3
+ import HashTreeParser, { DataSet, HashTreeMessage, Metadata } from '../hashTree/hashTreeParser';
4
4
  import { HashTreeObject } from '../hashTree/types';
5
5
  import { Links, LocusDTO } from './types';
6
6
  export type LocusLLMEvent = {
@@ -12,6 +12,19 @@ export type LocusLLMEvent = {
12
12
  export type LocusApiResponseBody = {
13
13
  dataSets?: DataSet[];
14
14
  locus: LocusDTO;
15
+ metadata?: Metadata;
16
+ };
17
+ /**
18
+ * Creates a locus object from the objects received in a hash tree message. It usually will be
19
+ * incomplete, because hash tree messages only contain the parts of locus that have changed,
20
+ * and some updates come separately over Mercury or LLM in separate messages.
21
+ *
22
+ * @param {HashTreeMessage} message hash tree message to created the locus from
23
+ * @returns {Object} the created locus object and metadata if present
24
+ */
25
+ export declare function createLocusFromHashTreeMessage(message: HashTreeMessage): {
26
+ locus: LocusDTO;
27
+ metadata?: Metadata;
15
28
  };
16
29
  /**
17
30
  * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object
@@ -105,6 +118,7 @@ export default class LocusInfo extends EventsScope {
105
118
  trigger: 'join-response';
106
119
  locus: LocusDTO;
107
120
  dataSets?: DataSet[];
121
+ metadata?: Metadata;
108
122
  } | {
109
123
  trigger: 'locus-message';
110
124
  locus?: LocusDTO;
@@ -171,7 +185,9 @@ export default class LocusInfo extends EventsScope {
171
185
  /**
172
186
  * Function for handling full locus when it's using hash trees (so not the "classic" one).
173
187
  *
188
+ * @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes
174
189
  * @param {object} locus locus object
190
+ * @param {object} metadata locus hash trees metadata
175
191
  * @param {string} eventType locus event
176
192
  * @param {DataSet[]} dataSets
177
193
  * @returns {void}
@@ -180,6 +196,7 @@ export default class LocusInfo extends EventsScope {
180
196
  /**
181
197
  * Function for handling full locus when it's the "classic" one (not hash trees)
182
198
  *
199
+ * @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes
183
200
  * @param {object} locus locus object
184
201
  * @param {string} eventType locus event
185
202
  * @returns {void}
@@ -187,13 +204,15 @@ export default class LocusInfo extends EventsScope {
187
204
  private onFullLocusClassic;
188
205
  /**
189
206
  * updates the locus with full locus object
207
+ * @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes
190
208
  * @param {object} locus locus object
191
209
  * @param {string} eventType locus event
192
210
  * @param {DataSet[]} dataSets
211
+ * @param {object} metadata locus hash trees metadata
193
212
  * @returns {object} null
194
213
  * @memberof LocusInfo
195
214
  */
196
- onFullLocus(locus: any, eventType?: string, dataSets?: Array<DataSet>): void;
215
+ onFullLocus(debugText: string, locus: any, eventType?: string, dataSets?: Array<DataSet>, metadata?: Metadata): void;
197
216
  /**
198
217
  * Common part of handling full locus, used by both classic and hash tree based locus handling
199
218
  * @param {object} locus locus object
@@ -20,6 +20,7 @@ export type Links = {
20
20
  };
21
21
  export type LocusDTO = {
22
22
  controls?: any;
23
+ embeddedApps?: any[];
23
24
  fullState?: LocusFullState;
24
25
  host?: {
25
26
  id: string;
@@ -1,5 +1,6 @@
1
1
  export interface MediaConnectionAwaiterProps {
2
2
  webrtcMediaConnection: any;
3
+ correlationId: string;
3
4
  }
4
5
  /**
5
6
  * @class MediaConnectionAwaiter
@@ -10,6 +11,7 @@ export default class MediaConnectionAwaiter {
10
11
  private defer;
11
12
  private retried;
12
13
  private iceConnected;
14
+ private correlationId;
13
15
  private onTimeoutCallback;
14
16
  private peerConnectionStateCallback;
15
17
  private iceConnectionStateCallback;
@@ -17,7 +19,7 @@ export default class MediaConnectionAwaiter {
17
19
  /**
18
20
  * @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps
19
21
  */
20
- constructor({ webrtcMediaConnection }: MediaConnectionAwaiterProps);
22
+ constructor({ webrtcMediaConnection, correlationId }: MediaConnectionAwaiterProps);
21
23
  /**
22
24
  * Returns true if the connection is connected, false otherwise.
23
25
  *
@@ -66,6 +68,13 @@ export default class MediaConnectionAwaiter {
66
68
  * @returns {void}
67
69
  */
68
70
  iceGatheringStateHandler(): void;
71
+ /**
72
+ * sends a metric with some additional info that might help debugging
73
+ * issues where browser doesn't update the RTCPeerConnection's iceConnectionState or connectionState
74
+ *
75
+ * @returns {void}
76
+ */
77
+ sendMetric(): Promise<void>;
69
78
  /**
70
79
  * Function called when the timeout is reached.
71
80
  *
@@ -93,9 +93,10 @@ export default class MediaProperties {
93
93
  /**
94
94
  * Waits for the webrtc media connection to be connected.
95
95
  *
96
+ * @param {string} correlationId
96
97
  * @returns {Promise<void>}
97
98
  */
98
- waitForMediaConnectionConnected(): Promise<void>;
99
+ waitForMediaConnectionConnected(correlationId: string): Promise<void>;
99
100
  /**
100
101
  * Returns ICE transport information:
101
102
  * - selectedCandidatePairChanges - number of times the selected candidate pair was changed, it should be at least 1 for successful connections
@@ -28,6 +28,7 @@ interface IInMeetingActions {
28
28
  canLowerAllHands?: boolean;
29
29
  canLowerSomeoneElsesHand?: boolean;
30
30
  bothLeaveAndEndMeetingAvailable?: boolean;
31
+ requireHostEndMeetingBeforeLeave?: boolean;
31
32
  canEnableClosedCaption?: boolean;
32
33
  canStartTranscribing?: boolean;
33
34
  canStopTranscribing?: boolean;
@@ -112,6 +113,8 @@ interface IInMeetingActions {
112
113
  canMoveToLobby?: boolean;
113
114
  canEnablePollingQA?: boolean;
114
115
  canDisablePollingQA?: boolean;
116
+ canAttendeeRequestAiAssistantEnabled?: boolean;
117
+ isAttendeeRequestAiAssistantDeclinedAll?: boolean;
115
118
  }
116
119
  /**
117
120
  * @class InMeetingActions
@@ -140,6 +143,7 @@ export default class InMeetingActions implements IInMeetingActions {
140
143
  canLowerAllHands: any;
141
144
  canLowerSomeoneElsesHand: any;
142
145
  bothLeaveAndEndMeetingAvailable: any;
146
+ requireHostEndMeetingBeforeLeave: any;
143
147
  canEnableClosedCaption: any;
144
148
  canStartTranscribing: any;
145
149
  canStopTranscribing: any;
@@ -224,6 +228,8 @@ export default class InMeetingActions implements IInMeetingActions {
224
228
  canMoveToLobby: any;
225
229
  canEnablePollingQA: any;
226
230
  canDisablePollingQA: any;
231
+ canAttendeeRequestAiAssistantEnabled: any;
232
+ isAttendeeRequestAiAssistantDeclinedAll: any;
227
233
  /**
228
234
  * Returns all meeting action options
229
235
  * @returns {Object}
@@ -1,8 +1,9 @@
1
1
  /// <reference types="node" />
2
2
  import { StatelessWebexPlugin } from '@webex/webex-core';
3
3
  import { ClientEvent, ClientEventLeaveReason } from '@webex/internal-plugin-metrics';
4
- import { ClientEvent as RawClientEvent } from '@webex/event-dictionary-ts';
4
+ import type { ClientEvent as RawClientEvent } from '@webex/event-dictionary-ts';
5
5
  import { MediaType, StatsAnalyzer, NetworkQualityMonitor, StatsMonitor } from '@webex/internal-media-core';
6
+ import { DataChannelTokenType } from '@webex/internal-plugin-llm';
6
7
  import { LocalStream, LocalCameraStream, LocalDisplayStream, LocalSystemAudioStream, LocalMicrophoneStream } from '@webex/media-helpers';
7
8
  import Roap, { type TurnDiscoverySkipReason } from '../roap/index';
8
9
  import { type TurnServerInfo } from '../roap/types';
@@ -23,7 +24,7 @@ import { LocusMediaRequest } from './locusMediaRequest';
23
24
  import { BrbState } from './brbState';
24
25
  import { SetStageOptions } from './request.type';
25
26
  import { Invitee } from './type';
26
- import { DataSet } from '../hashTree/hashTreeParser';
27
+ import { DataSet, Metadata } from '../hashTree/hashTreeParser';
27
28
  import { LocusDTO } from '../locus-info/types';
28
29
  export type CaptionData = {
29
30
  id: string;
@@ -70,6 +71,7 @@ export type AddMediaOptions = {
70
71
  remoteMediaManagerConfig?: RemoteMediaManagerConfiguration;
71
72
  bundlePolicy?: BundlePolicy;
72
73
  allowMediaInLobby?: boolean;
74
+ allowPublishMediaInLobby?: boolean;
73
75
  additionalMediaOptions?: AdditionalMediaOptions;
74
76
  };
75
77
  export type AdditionalMediaOptions = {
@@ -358,6 +360,7 @@ export default class Meeting extends StatelessWebexPlugin {
358
360
  breakouts: any;
359
361
  simultaneousInterpretation: any;
360
362
  annotation: any;
363
+ aiEnableRequest: any;
361
364
  webinar: any;
362
365
  conversationUrl: string;
363
366
  callStateForMetrics: CallStateForMetrics;
@@ -405,6 +408,10 @@ export default class Meeting extends StatelessWebexPlugin {
405
408
  keepAliveTimerId: NodeJS.Timeout;
406
409
  lastVideoLayoutInfo: any;
407
410
  locusInfo: any;
411
+ isUserUnadmitted?: boolean;
412
+ joinedWith?: any;
413
+ selfId?: string;
414
+ roles: any[];
408
415
  locusMediaRequest?: LocusMediaRequest;
409
416
  mediaProperties: MediaProperties;
410
417
  mediaRequestManagers: {
@@ -438,7 +445,6 @@ export default class Meeting extends StatelessWebexPlugin {
438
445
  endCallInitJoinReq: any;
439
446
  endJoinReqResp: any;
440
447
  endLocalSDPGenRemoteSDPRecvDelay: any;
441
- joinedWith: any;
442
448
  locusId: any;
443
449
  startCallInitJoinReq: any;
444
450
  startJoinReqResp: any;
@@ -453,12 +459,11 @@ export default class Meeting extends StatelessWebexPlugin {
453
459
  permissionTokenReceivedLocalTime: number;
454
460
  resourceId: any;
455
461
  resourceUrl: string;
456
- selfId: string;
457
462
  state: any;
458
463
  localAudioStreamMuteStateHandler: () => void;
459
464
  localVideoStreamMuteStateHandler: () => void;
460
465
  localOutputTrackChangeHandler: () => void;
461
- roles: any[];
466
+ localConstraintsChangeHandler: () => void;
462
467
  environment: string;
463
468
  namespace: string;
464
469
  allowMediaInLobby: boolean;
@@ -1060,6 +1065,7 @@ export default class Meeting extends StatelessWebexPlugin {
1060
1065
  host: object;
1061
1066
  selfId: string;
1062
1067
  dataSets: DataSet[];
1068
+ metadata: Metadata;
1063
1069
  }): void;
1064
1070
  /**
1065
1071
  * Upload logs for the current meeting
@@ -1335,6 +1341,14 @@ export default class Meeting extends StatelessWebexPlugin {
1335
1341
  * @returns {void}
1336
1342
  */
1337
1343
  private clearLLMHealthCheckTimer;
1344
+ /**
1345
+ * Disconnects and cleans up the default LLM session listeners/timers.
1346
+ * @param {Object} options
1347
+ * @param {boolean} [options.removeOnlineListener=true] removes the one-time online listener
1348
+ * @param {boolean} [options.throwOnError=true] rethrows disconnect errors when true
1349
+ * @returns {Promise<void>}
1350
+ */
1351
+ private cleanupLLMConneciton;
1338
1352
  /**
1339
1353
  * Connects to low latency mercury and reconnects if the address has changed
1340
1354
  * It will also disconnect if called when the meeting has ended
@@ -1909,7 +1923,7 @@ export default class Meeting extends StatelessWebexPlugin {
1909
1923
  * @public
1910
1924
  * @memberof Meeting
1911
1925
  */
1912
- clearMeetingData: () => void;
1926
+ clearMeetingData: () => Promise<void>;
1913
1927
  /**
1914
1928
  * starts keepAlives being sent
1915
1929
  * @returns {void}
@@ -2087,5 +2101,23 @@ export default class Meeting extends StatelessWebexPlugin {
2087
2101
  * @memberof Meetings
2088
2102
  */
2089
2103
  cancelSipCallOut(participantId: string): Promise<any>;
2104
+ /**
2105
+ * Method to get new data
2106
+ * @returns {Promise}
2107
+ */
2108
+ refreshDataChannelToken(): Promise<{
2109
+ body: {
2110
+ datachannelToken: any;
2111
+ dataChannelTokenType: DataChannelTokenType;
2112
+ };
2113
+ }>;
2114
+ /**
2115
+ * Determines the current data channel token type based on the meeting state.
2116
+ *
2117
+ * variant should be used when connecting to the LLM data channel.
2118
+ *
2119
+ * @returns {DataChannelTokenType} The token type representing the current session mode.
2120
+ */
2121
+ getDataChannelTokenType(): DataChannelTokenType;
2090
2122
  }
2091
2123
  export {};
@@ -1,5 +1,5 @@
1
1
  import { StatelessWebexPlugin } from '@webex/webex-core';
2
- import { SendReactionOptions, BrbOptions, ToggleReactionsOptions, PostMeetingDataConsentOptions, SynchronizeVideoLayout } from './request.type';
2
+ import { SendReactionOptions, BrbOptions, ToggleReactionsOptions, PostMeetingDataConsentOptions, SynchronizeVideoLayout, fetchDataChannelTokenOptions } from './request.type';
3
3
  import { AnnotationInfo } from '../annotation/annotation.types';
4
4
  import { ClientMediaPreferences } from '../reachability/reachability.types';
5
5
  /**
@@ -364,4 +364,19 @@ export default class MeetingRequest extends StatelessWebexPlugin {
364
364
  * @returns {Promise} The API response
365
365
  */
366
366
  cancelSipCallOut(participantId: any): Promise<any>;
367
+ /**
368
+ * Sends a request to retrieve the datachannel authorization token for a participant.
369
+ *
370
+ * For regular meeting data channel:
371
+ * GET /locus/api/v1/loci/{uuid:lid}/participant/{uuid:pid}/datachannel/token
372
+ *
373
+ * For practice session data channel:
374
+ * GET /locus/api/v1/loci/{uuid:lid}/participant/{uuid:pid}/practiceSession/datachannel/token
375
+ *
376
+ * @param {string} locusUrl - The locus url.
377
+ * @param {string} requestingParticipantId - The participant UUID.
378
+ * @param {boolean} [isPracticeSession=false] - Whether to get the practice session token.
379
+ * @returns {Promise<{datachannelToken: string}>}
380
+ */
381
+ fetchDatachannelToken({ locusUrl, requestingParticipantId, isPracticeSession, }: fetchDataChannelTokenOptions): Promise<any>;
367
382
  }
@@ -94,4 +94,9 @@ export type SetStageVideoLayout = {
94
94
  export type UnsetStageVideoLayout = {
95
95
  overrideDefault: false;
96
96
  };
97
+ export type fetchDataChannelTokenOptions = {
98
+ locusUrl: string;
99
+ requestingParticipantId: string;
100
+ isPracticeSession: boolean;
101
+ };
97
102
  export type SynchronizeVideoLayout = SetStageVideoLayout | UnsetStageVideoLayout;
@@ -2,6 +2,34 @@ import { LocalCameraStream, LocalMicrophoneStream } from '@webex/media-helpers';
2
2
  import { SELF_POLICY, IP_VERSION } from '../constants';
3
3
  declare const MeetingUtil: {
4
4
  parseLocusJoin: (response: any) => any;
5
+ /**
6
+ * Sanitizes a WebSocket URL by extracting only protocol, host, and pathname
7
+ * Returns concatenated protocol + host + pathname for safe logging
8
+ * Note: This is used for logging only; URL matching uses partial matching via _urlsPartiallyMatch
9
+ * @param {string} urlString - The URL to sanitize
10
+ * @returns {string} Sanitized URL or empty string if parsing fails
11
+ */
12
+ sanitizeWebSocketUrl: (urlString: string) => string;
13
+ /**
14
+ * Checks if two URLs partially match using an endsWith approach
15
+ * Combines host and pathname, then checks if one ends with the other
16
+ * This handles cases where one URL goes through a proxy (e.g., /webproxy/) while the other is direct
17
+ * @param {string} url1 - First URL to compare
18
+ * @param {string} url2 - Second URL to compare
19
+ * @returns {boolean} True if one URL path ends with the other (partial match), false otherwise
20
+ */
21
+ _urlsPartiallyMatch: (url1: string, url2: string) => boolean;
22
+ /**
23
+ * Gets socket URL information for metrics, including whether the socket URLs match
24
+ * Uses partial matching to handle proxy URLs (e.g., URLs with /webproxy/ prefix)
25
+ * @param {Object} webex - The webex instance
26
+ * @returns {Object} Object with hasMismatchedSocket, mercurySocketUrl, and deviceSocketUrl properties
27
+ */
28
+ getSocketUrlInfo: (webex: any) => {
29
+ hasMismatchedSocket: boolean;
30
+ mercurySocketUrl: string;
31
+ deviceSocketUrl: string;
32
+ };
5
33
  remoteUpdateAudioVideo: (meeting: any, audioMuted?: boolean, videoMuted?: boolean) => any;
6
34
  hasOwner: (info: any) => any;
7
35
  isOwnerSelf: (owner: any, selfId: any) => boolean;
@@ -59,6 +87,7 @@ declare const MeetingUtil: {
59
87
  canUserLowerAllHands: (displayHints: any) => any;
60
88
  canUserLowerSomeoneElsesHand: (displayHints: any) => any;
61
89
  bothLeaveAndEndMeetingAvailable: (displayHints: any) => any;
90
+ requireHostEndMeetingBeforeLeave: (displayHints: any) => any;
62
91
  canManageBreakout: (displayHints: any) => any;
63
92
  canStartBreakout: (displayHints: any) => boolean;
64
93
  canBroadcastMessageToBreakout: (displayHints: any, policies?: {}) => boolean;
@@ -115,6 +144,8 @@ declare const MeetingUtil: {
115
144
  updateLocusFromApiResponse: (meeting: any, response: any) => any;
116
145
  generateBuildLocusDeltaRequestOptions: (originalMeeting: any) => (originalOptions: any) => any;
117
146
  generateLocusDeltaRequest: (originalMeeting: any) => (originalOptions: any) => any;
147
+ canAttendeeRequestAiAssistantEnabled: (displayHints?: any[], roles?: any[]) => boolean;
148
+ attendeeRequestAiAssistantDeclinedAll: (displayHints?: any[]) => boolean;
118
149
  selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => boolean;
119
150
  parseInterpretationInfo: (meeting: any, meetingInfo: any) => void;
120
151
  /**
@@ -95,6 +95,8 @@ export default class Meetings extends WebexPlugin {
95
95
  preferredWebexSite: any;
96
96
  reachability: Reachability;
97
97
  registered: any;
98
+ registrationPromise: Promise<void>;
99
+ unregistrationPromise: Promise<void>;
98
100
  request: any;
99
101
  geoHintInfo: any;
100
102
  meetingInfo: any;
@@ -150,7 +152,7 @@ export default class Meetings extends WebexPlugin {
150
152
  */
151
153
  private handleLocusEvent;
152
154
  /**
153
- * handles locus events through mercury that are not roap
155
+ * handles locus events through mercury that are not roap or approval request events
154
156
  * @param {Object} envelope
155
157
  * @param {Object} envelope.data
156
158
  * @param {String} envelope.data.eventType
@@ -287,7 +289,7 @@ export default class Meetings extends WebexPlugin {
287
289
  * @public
288
290
  * @memberof Meetings
289
291
  */
290
- unregister(): any;
292
+ unregister(): Promise<void>;
291
293
  /**
292
294
  * Creates a noise reduction effect
293
295
  *
@@ -6,6 +6,7 @@ export type MemberId = string;
6
6
  export default class Member {
7
7
  associatedUser: MemberId | null;
8
8
  associatedUsers: Set<MemberId>;
9
+ canApproveAIEnablement: boolean;
9
10
  canReclaimHost: boolean;
10
11
  id: MemberId;
11
12
  isAudioMuted: any;
@@ -5,6 +5,11 @@ declare const MemberUtil: {
5
5
  * @returns {Boolean}
6
6
  */
7
7
  canReclaimHost: (participant: any) => any;
8
+ /**
9
+ * @param {Object} participant - The locus participant object.
10
+ * @returns {Boolean}
11
+ */
12
+ canApproveAIEnablement: (participant: any) => boolean;
8
13
  /**
9
14
  * @param {Object} participant - The locus participant object.
10
15
  * @returns {[ServerRoleShape]}
@@ -87,5 +87,6 @@ declare const BEHAVIORAL_METRICS: {
87
87
  MEDIA_ISSUE_DETECTED: string;
88
88
  LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH: string;
89
89
  LOCUS_HASH_TREE_UNSUPPORTED_OPERATION: string;
90
+ MEDIA_STILL_NOT_CONNECTED: string;
90
91
  };
91
92
  export { BEHAVIORAL_METRICS as default };
@@ -50,29 +50,12 @@ export declare class MediaRequestManager {
50
50
  private degradationPreferences;
51
51
  private sourceUpdateListener;
52
52
  private debouncedSourceUpdateListener;
53
- private previousStreamRequests;
54
53
  private trimRequestsToNumOfSources;
55
54
  private numTotalSources;
56
55
  private numLiveSources;
57
56
  constructor(sendMediaRequestsCallback: SendMediaRequestsCallback, options: Options);
58
57
  setDegradationPreferences(degradationPreferences: DegradationPreferences): void;
59
58
  private getDegradedClientRequests;
60
- /**
61
- * Returns true if two stream requests are the same, false otherwise.
62
- *
63
- * @param {StreamRequest} streamRequestA - Stream request A for comparison.
64
- * @param {StreamRequest} streamRequestB - Stream request B for comparison.
65
- * @returns {boolean} - Whether they are equal.
66
- */
67
- isEqual(streamRequestA: StreamRequest, streamRequestB: StreamRequest): boolean;
68
- /**
69
- * Compares new stream requests to previous ones and determines
70
- * if they are the same.
71
- *
72
- * @param {StreamRequest[]} newRequests - Array with new requests.
73
- * @returns {boolean} - True if they are equal, false otherwise.
74
- */
75
- private checkIsNewRequestsEqualToPrev;
76
59
  /**
77
60
  * Returns the maxPayloadBitsPerSecond per Stream
78
61
  *
@@ -94,12 +77,6 @@ export declare class MediaRequestManager {
94
77
  * @returns {number} maxMbps
95
78
  */
96
79
  private getH264MaxMbps;
97
- /**
98
- * Clears the previous stream requests.
99
- *
100
- * @returns {void}
101
- */
102
- clearPreviousRequests(): void;
103
80
  /** Modifies the passed in clientRequests and makes sure that in total they don't ask
104
81
  * for more streams than there are available.
105
82
  *
@@ -32,6 +32,7 @@ export declare enum SkinToneType {
32
32
  dark = "dark"
33
33
  }
34
34
  export type Sender = {
35
+ displayName: string;
35
36
  participantId: string;
36
37
  };
37
38
  export type ProcessedReaction = {
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Remove null/undefined/empty string values from an object
3
+ * @param {object} params
4
+ * @returns {object}
5
+ */
6
+ export declare const sanitizeParams: (params: Record<string, any>) => Record<string, any>;