@webex/plugin-meetings 3.12.0-next.9 → 3.12.0-next.90

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 (213) hide show
  1. package/AGENTS.md +9 -0
  2. package/dist/aiEnableRequest/index.js +15 -2
  3. package/dist/aiEnableRequest/index.js.map +1 -1
  4. package/dist/breakouts/breakout.js +8 -3
  5. package/dist/breakouts/breakout.js.map +1 -1
  6. package/dist/breakouts/index.js +26 -2
  7. package/dist/breakouts/index.js.map +1 -1
  8. package/dist/config.js +2 -2
  9. package/dist/config.js.map +1 -1
  10. package/dist/constants.js +35 -9
  11. package/dist/constants.js.map +1 -1
  12. package/dist/controls-options-manager/constants.js +11 -1
  13. package/dist/controls-options-manager/constants.js.map +1 -1
  14. package/dist/controls-options-manager/index.js +67 -29
  15. package/dist/controls-options-manager/index.js.map +1 -1
  16. package/dist/controls-options-manager/util.js +91 -0
  17. package/dist/controls-options-manager/util.js.map +1 -1
  18. package/dist/hashTree/constants.js +13 -1
  19. package/dist/hashTree/constants.js.map +1 -1
  20. package/dist/hashTree/hashTreeParser.js +880 -382
  21. package/dist/hashTree/hashTreeParser.js.map +1 -1
  22. package/dist/hashTree/utils.js +42 -0
  23. package/dist/hashTree/utils.js.map +1 -1
  24. package/dist/index.js +7 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/interceptors/dataChannelAuthToken.js +75 -15
  27. package/dist/interceptors/dataChannelAuthToken.js.map +1 -1
  28. package/dist/interceptors/locusRetry.js +23 -8
  29. package/dist/interceptors/locusRetry.js.map +1 -1
  30. package/dist/interpretation/index.js +10 -1
  31. package/dist/interpretation/index.js.map +1 -1
  32. package/dist/interpretation/interpretation.types.js +7 -0
  33. package/dist/interpretation/interpretation.types.js.map +1 -0
  34. package/dist/interpretation/siLanguage.js +1 -1
  35. package/dist/locus-info/controlsUtils.js +4 -1
  36. package/dist/locus-info/controlsUtils.js.map +1 -1
  37. package/dist/locus-info/index.js +303 -88
  38. package/dist/locus-info/index.js.map +1 -1
  39. package/dist/locus-info/infoUtils.js +36 -5
  40. package/dist/locus-info/infoUtils.js.map +1 -1
  41. package/dist/locus-info/types.js +19 -0
  42. package/dist/locus-info/types.js.map +1 -1
  43. package/dist/media/index.js +3 -1
  44. package/dist/media/index.js.map +1 -1
  45. package/dist/media/properties.js +1 -0
  46. package/dist/media/properties.js.map +1 -1
  47. package/dist/meeting/in-meeting-actions.js +5 -1
  48. package/dist/meeting/in-meeting-actions.js.map +1 -1
  49. package/dist/meeting/index.js +1233 -793
  50. package/dist/meeting/index.js.map +1 -1
  51. package/dist/meeting/locusMediaRequest.js +229 -82
  52. package/dist/meeting/locusMediaRequest.js.map +1 -1
  53. package/dist/meeting/muteState.js +10 -1
  54. package/dist/meeting/muteState.js.map +1 -1
  55. package/dist/meeting/request.js +5 -2
  56. package/dist/meeting/request.js.map +1 -1
  57. package/dist/meeting/util.js +35 -2
  58. package/dist/meeting/util.js.map +1 -1
  59. package/dist/meeting-info/meeting-info-v2.js +2 -2
  60. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  61. package/dist/meetings/index.js +231 -118
  62. package/dist/meetings/index.js.map +1 -1
  63. package/dist/meetings/meetings.types.js +6 -1
  64. package/dist/meetings/meetings.types.js.map +1 -1
  65. package/dist/meetings/request.js +39 -0
  66. package/dist/meetings/request.js.map +1 -1
  67. package/dist/meetings/util.js +79 -5
  68. package/dist/meetings/util.js.map +1 -1
  69. package/dist/member/index.js +10 -0
  70. package/dist/member/index.js.map +1 -1
  71. package/dist/member/types.js.map +1 -1
  72. package/dist/member/util.js +30 -0
  73. package/dist/member/util.js.map +1 -1
  74. package/dist/members/index.js +101 -43
  75. package/dist/members/index.js.map +1 -1
  76. package/dist/members/util.js +8 -1
  77. package/dist/members/util.js.map +1 -1
  78. package/dist/metrics/constants.js +5 -1
  79. package/dist/metrics/constants.js.map +1 -1
  80. package/dist/multistream/codec/constants.js +63 -0
  81. package/dist/multistream/codec/constants.js.map +1 -0
  82. package/dist/multistream/mediaRequestManager.js +62 -15
  83. package/dist/multistream/mediaRequestManager.js.map +1 -1
  84. package/dist/multistream/receiveSlot.js +9 -0
  85. package/dist/multistream/receiveSlot.js.map +1 -1
  86. package/dist/reachability/index.js +10 -13
  87. package/dist/reachability/index.js.map +1 -1
  88. package/dist/reachability/reachability.types.js +2 -0
  89. package/dist/reachability/reachability.types.js.map +1 -1
  90. package/dist/reachability/util.js +45 -0
  91. package/dist/reachability/util.js.map +1 -1
  92. package/dist/reactions/reactions.type.js.map +1 -1
  93. package/dist/recording-controller/index.js +1 -3
  94. package/dist/recording-controller/index.js.map +1 -1
  95. package/dist/types/config.d.ts +2 -2
  96. package/dist/types/constants.d.ts +12 -1
  97. package/dist/types/controls-options-manager/constants.d.ts +6 -1
  98. package/dist/types/controls-options-manager/index.d.ts +16 -0
  99. package/dist/types/hashTree/constants.d.ts +2 -0
  100. package/dist/types/hashTree/hashTreeParser.d.ts +146 -17
  101. package/dist/types/hashTree/utils.d.ts +18 -0
  102. package/dist/types/index.d.ts +3 -0
  103. package/dist/types/interceptors/locusRetry.d.ts +4 -4
  104. package/dist/types/interpretation/interpretation.types.d.ts +10 -0
  105. package/dist/types/locus-info/index.d.ts +50 -6
  106. package/dist/types/locus-info/infoUtils.d.ts +8 -0
  107. package/dist/types/locus-info/types.d.ts +21 -1
  108. package/dist/types/media/properties.d.ts +1 -0
  109. package/dist/types/meeting/in-meeting-actions.d.ts +4 -0
  110. package/dist/types/meeting/index.d.ts +94 -7
  111. package/dist/types/meeting/locusMediaRequest.d.ts +12 -0
  112. package/dist/types/meeting/request.d.ts +1 -0
  113. package/dist/types/meeting/util.d.ts +9 -0
  114. package/dist/types/meetings/index.d.ts +30 -18
  115. package/dist/types/meetings/meetings.types.d.ts +15 -0
  116. package/dist/types/meetings/request.d.ts +14 -0
  117. package/dist/types/member/index.d.ts +1 -0
  118. package/dist/types/member/types.d.ts +1 -0
  119. package/dist/types/member/util.d.ts +9 -0
  120. package/dist/types/members/index.d.ts +15 -2
  121. package/dist/types/members/util.d.ts +1 -5
  122. package/dist/types/metrics/constants.d.ts +4 -0
  123. package/dist/types/multistream/codec/constants.d.ts +7 -0
  124. package/dist/types/multistream/mediaRequestManager.d.ts +22 -5
  125. package/dist/types/reachability/index.d.ts +1 -1
  126. package/dist/types/reachability/reachability.types.d.ts +7 -0
  127. package/dist/types/reachability/util.d.ts +17 -0
  128. package/dist/types/reactions/reactions.type.d.ts +3 -0
  129. package/dist/webinar/index.js +305 -159
  130. package/dist/webinar/index.js.map +1 -1
  131. package/package.json +22 -22
  132. package/src/aiEnableRequest/index.ts +16 -0
  133. package/src/breakouts/breakout.ts +3 -1
  134. package/src/breakouts/index.ts +31 -0
  135. package/src/config.ts +2 -2
  136. package/src/constants.ts +20 -3
  137. package/src/controls-options-manager/constants.ts +14 -1
  138. package/src/controls-options-manager/index.ts +87 -28
  139. package/src/controls-options-manager/util.ts +81 -1
  140. package/src/hashTree/constants.ts +16 -0
  141. package/src/hashTree/hashTreeParser.ts +580 -196
  142. package/src/hashTree/utils.ts +36 -0
  143. package/src/index.ts +6 -0
  144. package/src/interceptors/dataChannelAuthToken.ts +88 -12
  145. package/src/interceptors/locusRetry.ts +25 -4
  146. package/src/interpretation/index.ts +27 -9
  147. package/src/interpretation/interpretation.types.ts +11 -0
  148. package/src/locus-info/controlsUtils.ts +3 -1
  149. package/src/locus-info/index.ts +304 -100
  150. package/src/locus-info/infoUtils.ts +41 -6
  151. package/src/locus-info/types.ts +25 -1
  152. package/src/media/index.ts +3 -0
  153. package/src/media/properties.ts +1 -0
  154. package/src/meeting/in-meeting-actions.ts +8 -0
  155. package/src/meeting/index.ts +494 -67
  156. package/src/meeting/locusMediaRequest.ts +106 -6
  157. package/src/meeting/muteState.ts +10 -1
  158. package/src/meeting/request.ts +11 -0
  159. package/src/meeting/util.ts +47 -5
  160. package/src/meeting-info/meeting-info-v2.ts +4 -2
  161. package/src/meetings/index.ts +133 -78
  162. package/src/meetings/meetings.types.ts +19 -0
  163. package/src/meetings/request.ts +43 -0
  164. package/src/meetings/util.ts +97 -1
  165. package/src/member/index.ts +10 -0
  166. package/src/member/types.ts +1 -0
  167. package/src/member/util.ts +29 -0
  168. package/src/members/index.ts +70 -7
  169. package/src/members/util.ts +12 -4
  170. package/src/metrics/constants.ts +4 -0
  171. package/src/multistream/codec/constants.ts +58 -0
  172. package/src/multistream/mediaRequestManager.ts +119 -28
  173. package/src/multistream/receiveSlot.ts +18 -0
  174. package/src/reachability/index.ts +19 -15
  175. package/src/reachability/reachability.types.ts +11 -0
  176. package/src/reachability/util.ts +36 -0
  177. package/src/reactions/reactions.type.ts +3 -0
  178. package/src/recording-controller/index.ts +1 -2
  179. package/src/webinar/index.ts +214 -36
  180. package/test/unit/spec/aiEnableRequest/index.ts +86 -0
  181. package/test/unit/spec/breakouts/breakout.ts +9 -3
  182. package/test/unit/spec/breakouts/index.ts +49 -0
  183. package/test/unit/spec/controls-options-manager/index.js +244 -29
  184. package/test/unit/spec/controls-options-manager/util.js +165 -0
  185. package/test/unit/spec/hashTree/hashTreeParser.ts +1838 -180
  186. package/test/unit/spec/hashTree/utils.ts +125 -1
  187. package/test/unit/spec/interceptors/dataChannelAuthToken.ts +196 -0
  188. package/test/unit/spec/interceptors/locusRetry.ts +205 -4
  189. package/test/unit/spec/interpretation/index.ts +26 -4
  190. package/test/unit/spec/locus-info/controlsUtils.js +172 -57
  191. package/test/unit/spec/locus-info/index.js +499 -81
  192. package/test/unit/spec/locus-info/infoUtils.js +184 -1
  193. package/test/unit/spec/media/index.ts +31 -0
  194. package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
  195. package/test/unit/spec/meeting/index.js +1615 -42
  196. package/test/unit/spec/meeting/locusMediaRequest.ts +302 -4
  197. package/test/unit/spec/meeting/muteState.js +81 -0
  198. package/test/unit/spec/meeting/request.js +12 -0
  199. package/test/unit/spec/meeting/utils.js +157 -1
  200. package/test/unit/spec/meeting-info/meetinginfov2.js +19 -10
  201. package/test/unit/spec/meetings/index.js +363 -36
  202. package/test/unit/spec/meetings/request.js +141 -0
  203. package/test/unit/spec/meetings/utils.js +189 -0
  204. package/test/unit/spec/member/index.js +7 -0
  205. package/test/unit/spec/member/util.js +89 -0
  206. package/test/unit/spec/members/index.js +216 -0
  207. package/test/unit/spec/members/request.js +37 -1
  208. package/test/unit/spec/members/utils.js +63 -0
  209. package/test/unit/spec/multistream/mediaRequestManager.ts +501 -37
  210. package/test/unit/spec/reachability/index.ts +59 -46
  211. package/test/unit/spec/reachability/util.ts +31 -0
  212. package/test/unit/spec/recording-controller/index.js +9 -8
  213. package/test/unit/spec/webinar/index.ts +329 -28
@@ -58,17 +58,17 @@ declare const _default: {
58
58
  enableExtmap: boolean;
59
59
  enableAutomaticLLM: boolean;
60
60
  installedOrgID: any;
61
+ multipartSitePrefixList: string[];
61
62
  experimental: {
62
63
  enableMediaNegotiatedEvent: boolean;
63
64
  enableUnifiedMeetings: boolean;
64
65
  enableAdhocMeetings: boolean;
65
- enableTcpReachability: boolean;
66
- enableTlsReachability: boolean;
67
66
  storeLocusHashTreeEventsForDebugging: boolean;
68
67
  };
69
68
  degradationPreferences: {
70
69
  maxMacroblocksLimit: number;
71
70
  };
71
+ enableAv1SlidesSupport: boolean;
72
72
  iceCandidatesGatheringTimeout: any;
73
73
  backendIpv6NativeSupport: boolean;
74
74
  enableReachabilityChecks: boolean;
@@ -1,3 +1,4 @@
1
+ export { LLM_DEFAULT_SESSION, LLM_PRACTICE_SESSION } from '@webex/internal-plugin-llm';
1
2
  export type Enum<T extends Record<string, unknown>> = T[keyof T];
2
3
  export declare const AUDIO = "audio";
3
4
  export declare const AUDIO_STATUS = "audioStatus";
@@ -31,7 +32,6 @@ export declare const LOCAL = "local";
31
32
  export declare const LOCI = "loci";
32
33
  export declare const LOCUS_URL = "locusUrl";
33
34
  export declare const END = "end";
34
- export declare const LLM_PRACTICE_SESSION = "llm-practice-session";
35
35
  export declare const MAX_RANDOM_DELAY_FOR_MEETING_INFO: number;
36
36
  export declare const MEETINGINFO = "meetingInfo";
37
37
  export declare const MEET = "meet";
@@ -293,6 +293,7 @@ export declare const EVENT_TRIGGERS: {
293
293
  MEETING_CAPTION_RECEIVED: string;
294
294
  MEETING_PARTICIPANT_REASON_CHANGED: string;
295
295
  MEETING_AI_ENABLE_REQUEST: string;
296
+ MEETING_SRTP_CIPHER_UPDATED: string;
296
297
  };
297
298
  export declare const EVENT_TYPES: {
298
299
  SELF: string;
@@ -566,6 +567,12 @@ export declare const INTERPRETATION: {
566
567
  DECLINED: string;
567
568
  };
568
569
  RESOURCE_TYPE: string;
570
+ CAPABILITIES: {
571
+ HOST_CONTROL_SI_SUPPORTED: string;
572
+ INTERPRETER_CONTROL_SI_SUPPORTED: string;
573
+ SI_HANDOVER_SUPPORTED: string;
574
+ SIGN_INTERPRETER_SUPPORTED: string;
575
+ };
569
576
  };
570
577
  export declare const LOCUSINFO: {
571
578
  EVENTS: {
@@ -849,6 +856,8 @@ export declare const DISPLAY_HINTS: {
849
856
  DISABLE_BREAKOUT_START: string;
850
857
  DISABLE_VIEW_THE_PARTICIPANT_LIST: string;
851
858
  ENABLE_VIEW_THE_PARTICIPANT_LIST: string;
859
+ VIEW_THE_PARTICIPANT_LIST: string;
860
+ CAN_VIEW_THE_PARTICIPANT_LIST: string;
852
861
  DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST: string;
853
862
  ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST: string;
854
863
  DISABLE_SHOW_ATTENDEE_COUNT: string;
@@ -884,6 +893,7 @@ export declare const DISPLAY_HINTS: {
884
893
  DISABLE_ATTENDEE_START_POLLING_QA: string;
885
894
  ATTENDEE_REQUEST_AI_ASSISTANT_ENABLED: string;
886
895
  ATTENDEE_REQUEST_AI_ASSISTANT_DECLINED_ALL: string;
896
+ ANONYMOUS_DISPLAY_NAMES_ENABLED: string;
887
897
  };
888
898
  export declare const INTERSTITIAL_DISPLAY_HINTS: string[];
889
899
  export declare const SELF_ROLES: {
@@ -891,6 +901,7 @@ export declare const SELF_ROLES: {
891
901
  MODERATOR: string;
892
902
  ATTENDEE: string;
893
903
  PANELIST: string;
904
+ PRESENTER: string;
894
905
  };
895
906
  export declare const MEETING_STATE: {
896
907
  STATES: {
@@ -1,4 +1,9 @@
1
1
  declare const ENABLED = "enabled";
2
2
  declare const CAN_SET = "canSet";
3
3
  declare const CAN_UNSET = "canUnset";
4
- export { ENABLED, CAN_SET, CAN_UNSET };
4
+ /**
5
+ * Body keys that represent audio controls. These do not support cross-locus
6
+ * authorization and must be sent directly to the current locus URL.
7
+ */
8
+ declare const AUDIO_CONTROL_BODY_KEYS: ReadonlySet<string>;
9
+ export { ENABLED, CAN_SET, CAN_UNSET, AUDIO_CONTROL_BODY_KEYS };
@@ -43,6 +43,8 @@ export default class ControlsOptionsManager {
43
43
  * @memberof ControlsOptionsManager
44
44
  */
45
45
  private mainLocusUrl;
46
+ private getControls;
47
+ private isWebinar;
46
48
  /**
47
49
  * @param {MeetingRequest} request
48
50
  * @param {Object} options
@@ -52,6 +54,8 @@ export default class ControlsOptionsManager {
52
54
  constructor(request: MeetingRequest, options?: {
53
55
  locusUrl: string;
54
56
  displayHints?: Array<string>;
57
+ getControls?: () => Record<string, any>;
58
+ isWebinar?: () => boolean;
55
59
  });
56
60
  /**
57
61
  * @param {MeetingRequest} request
@@ -69,6 +73,8 @@ export default class ControlsOptionsManager {
69
73
  set(options?: {
70
74
  locusUrl: string;
71
75
  displayHints?: Array<string>;
76
+ getControls?: () => Record<string, any>;
77
+ isWebinar?: () => boolean;
72
78
  }): void;
73
79
  /**
74
80
  * @param {string} url
@@ -118,6 +124,16 @@ export default class ControlsOptionsManager {
118
124
  * @returns {Promise}
119
125
  */
120
126
  private setControls;
127
+ /**
128
+ * Sends a controls request to Locus. When authorizingLocusUrl is present in the body,
129
+ * we use a plain request() because the response contains the main session Locus DTO
130
+ * instead of the breakout we're in, so we don't want to parse it as a delta.
131
+ * Otherwise we use locusDeltaRequest() for normal delta processing.
132
+ *
133
+ * @param {Object} requestParams - The request parameters from getControlsRequestParams.
134
+ * @returns {Promise<any>}
135
+ */
136
+ private sendControlsRequest;
121
137
  /**
122
138
  * @public
123
139
  * @param {boolean} enabled
@@ -7,3 +7,5 @@ export declare const DataSetNames: {
7
7
  SELF: string;
8
8
  UNJOINED: string;
9
9
  };
10
+ export declare const DATA_SET_INIT_PRIORITY: string[];
11
+ export declare const LLM_DATASET_NAMES: string[];
@@ -2,6 +2,11 @@ import HashTree from './hashTree';
2
2
  import { Enum } from '../constants';
3
3
  import { HtMeta, HashTreeObject } from './types';
4
4
  import { LocusDTO } from '../locus-info/types';
5
+ export declare enum SyncAllBackoffType {
6
+ NONE = "none",
7
+ ONLY_LLM = "onlyLLM",
8
+ ALL = "all"
9
+ }
5
10
  export interface DataSet {
6
11
  url: string;
7
12
  root: string;
@@ -13,9 +18,11 @@ export interface DataSet {
13
18
  maxMs: number;
14
19
  exponent: number;
15
20
  };
21
+ heartbeatIntervalMs?: number;
16
22
  }
17
23
  export interface RootHashMessage {
18
24
  dataSets: Array<DataSet>;
25
+ heartbeatIntervalMs?: number;
19
26
  }
20
27
  export interface HashTreeMessage {
21
28
  dataSets: Array<DataSet>;
@@ -38,22 +45,41 @@ interface InternalDataSet extends DataSet {
38
45
  hashTree?: HashTree;
39
46
  timer?: ReturnType<typeof setTimeout>;
40
47
  heartbeatWatchdogTimer?: ReturnType<typeof setTimeout>;
48
+ syncAbortController?: AbortController;
41
49
  }
42
50
  type WebexRequestMethod = (options: Record<string, any>) => Promise<any>;
43
51
  export declare const LocusInfoUpdateType: {
44
52
  readonly OBJECTS_UPDATED: "OBJECTS_UPDATED";
45
53
  readonly MEETING_ENDED: "MEETING_ENDED";
54
+ readonly LOCUS_NOT_FOUND: "LOCUS_NOT_FOUND";
46
55
  };
47
56
  export type LocusInfoUpdateType = Enum<typeof LocusInfoUpdateType>;
48
- export type LocusInfoUpdateCallback = (updateType: LocusInfoUpdateType, data?: {
49
- updatedObjects: HashTreeObject[];
50
- }) => void;
57
+ interface LocusUpdatePayloads {
58
+ [LocusInfoUpdateType.OBJECTS_UPDATED]: {
59
+ updatedObjects: HashTreeObject[];
60
+ };
61
+ [LocusInfoUpdateType.MEETING_ENDED]: unknown;
62
+ [LocusInfoUpdateType.LOCUS_NOT_FOUND]: unknown;
63
+ }
64
+ export type LocusInfoUpdate = {
65
+ [K in keyof LocusUpdatePayloads]: {
66
+ updateType: K;
67
+ } & LocusUpdatePayloads[K];
68
+ }[keyof LocusUpdatePayloads];
69
+ export type LocusInfoUpdateCallback = (update: LocusInfoUpdate) => void;
51
70
  /**
52
71
  * This error is thrown if we receive information that the meeting has ended while we're processing some hash messages.
53
72
  * It's handled internally by HashTreeParser and results in MEETING_ENDED being sent up.
54
73
  */
55
74
  export declare class MeetingEndedError extends Error {
56
75
  }
76
+ /**
77
+ * This error is thrown when a 404 is received from Locus hash tree endpoints, indicating that the locus URL
78
+ * is no longer valid (e.g. participant moved to a breakout room, or meeting ended).
79
+ * It's handled internally by HashTreeParser and results in LOCUS_NOT_FOUND being sent up.
80
+ */
81
+ export declare class LocusNotFoundError extends Error {
82
+ }
57
83
  /**
58
84
  * Parses hash tree eventing locus data
59
85
  */
@@ -64,9 +90,14 @@ declare class HashTreeParser {
64
90
  locusInfoUpdateCallback: LocusInfoUpdateCallback;
65
91
  visibleDataSets: VisibleDataSetInfo[];
66
92
  debugId: string;
67
- heartbeatIntervalMs?: number;
68
93
  private excludedDataSets;
69
94
  state: 'active' | 'stopped';
95
+ private syncQueue;
96
+ private isSyncInProgress;
97
+ private syncAllBackoffType;
98
+ private dataSetsSyncedDuringBackoff;
99
+ private syncQueueProcessingPromise;
100
+ private topLevelHeartbeatIntervalMs?;
70
101
  /**
71
102
  * Constructor for HashTreeParser
72
103
  * @param {Object} options
@@ -120,14 +151,6 @@ declare class HashTreeParser {
120
151
  * @returns {Promise}
121
152
  */
122
153
  private initializeNewVisibleDataSet;
123
- /**
124
- * Sends a special sync request to Locus with all leaves empty - this is a way to get all the data for a given dataset.
125
- *
126
- * @param {string} datasetName - name of the dataset for which to send the request
127
- * @param {string} debugText - text to include in logs
128
- * @returns {Promise}
129
- */
130
- private sendInitializationSyncRequestToLocus;
131
154
  /**
132
155
  * Queries Locus for all up-to-date information about all visible data sets
133
156
  *
@@ -193,6 +216,13 @@ declare class HashTreeParser {
193
216
  * @returns {void}
194
217
  */
195
218
  private handleRootHashHeartBeatMessage;
219
+ /**
220
+ * Handles known errors that can happen during syncs
221
+ *
222
+ * @param {any} error - The error to handle
223
+ * @returns {boolean} true if the error was recognized and handled, false otherwise
224
+ */
225
+ private handleSyncErrors;
196
226
  /**
197
227
  * Asynchronously initializes new visible data sets
198
228
  *
@@ -228,6 +258,14 @@ declare class HashTreeParser {
228
258
  * @returns {void}
229
259
  */
230
260
  private updateDataSetInfo;
261
+ /**
262
+ * Updates the leaf count for a data set, resizing its hash tree accordingly.
263
+ *
264
+ * @param {InternalDataSet} dataSet - The data set to update
265
+ * @param {number} newLeafCount - The new leaf count
266
+ * @returns {void}
267
+ */
268
+ private updateDataSetLeafCount;
231
269
  /**
232
270
  * Checks for changes in the visible data sets based on the updated objects.
233
271
  * @param {HashTreeObject[]} updatedObjects - The list of updated hash tree objects.
@@ -298,11 +336,88 @@ declare class HashTreeParser {
298
336
  * Performs a sync for the given data set.
299
337
  *
300
338
  * @param {InternalDataSet} dataSet - The data set to sync
301
- * @param {string} rootHash - Our current root hash for this data set
302
339
  * @param {string} reason - The reason for the sync (used for logging)
340
+ * @param {boolean} [isInitialization] - Whether this is an initialization sync (sends empty leaves data instead of comparing hashes)
303
341
  * @returns {Promise<void>}
304
342
  */
305
343
  private performSync;
344
+ /**
345
+ * Cancels any pending or in-flight syncs for the specified data sets.
346
+ * This removes matching entries from the sync queue and aborts any in-flight sync HTTP requests.
347
+ *
348
+ * @param {string[]} dataSetNames - The names of the data sets to cancel syncs for
349
+ * @returns {void}
350
+ */
351
+ private cancelPendingSyncsForDataSets;
352
+ /**
353
+ * If a syncAllDatasets backoff sleep is in progress, marks the given data sets to be skipped
354
+ * after the sleep completes.
355
+ *
356
+ * @param {string[]} dataSetNames - The names of the data sets to mark
357
+ * @returns {void}
358
+ */
359
+ private markDataSetsForSyncAllBackoffSkip;
360
+ /**
361
+ * Aborts any in-flight sync HTTP requests for the specified data sets.
362
+ *
363
+ * @param {string[]} dataSetNames - The names of the data sets whose syncs should be aborted
364
+ * @returns {void}
365
+ */
366
+ private abortInFlightSyncs;
367
+ /**
368
+ * Enqueues a sync for the given data set. If the data set is already in the queue, the request is ignored.
369
+ * This ensures that all syncs are executed sequentially and no more than 1 sync runs at a time.
370
+ *
371
+ * @param {string} dataSetName - The name of the data set to sync
372
+ * @param {string} reason - The reason for the sync (used for logging)
373
+ * @param {boolean} [isInitialization=false] - Whether this is an initialization sync (uses empty leaves data instead of hash comparison)
374
+ * @returns {void}
375
+ */
376
+ private enqueueSyncForDataset;
377
+ /**
378
+ * Processes the sync queue sequentially. Only one instance of this method runs at a time.
379
+ *
380
+ * @returns {Promise<void>}
381
+ */
382
+ private processSyncQueue;
383
+ /**
384
+ * sets the backoff type for syncAllDatasets calls, which determines the scope of datasets that will be synced after the backoff delay.
385
+ *
386
+ * @param {boolean} onlyLLM - Whether the backoff is for a syncAllDatasets call that is syncing only LLM datasets
387
+ * @returns {void}
388
+ */
389
+ private setSyncAllBackoffType;
390
+ /**
391
+ * Checks if a syncAll backoff is already in progress. If so, upgrades the scope from
392
+ * onlyLLM to all datasets when the new call has a broader scope.
393
+ *
394
+ * @param {boolean} onlyLLM - Whether the current call is for LLM datasets only
395
+ * @returns {boolean} true if a backoff is already pending (caller should return early)
396
+ */
397
+ private tryUpgradePendingBackoff;
398
+ /**
399
+ * Syncs all data sets that have hash trees, one by one in sequence, using the priority order
400
+ * provided by sortByInitPriority().
401
+ *
402
+ * If a call is already waiting in the backoff delay phase, a new call with a broader scope
403
+ * (onlyLLM=false) will upgrade the pending scope, and the dataset list will be computed after
404
+ * the backoff using the upgraded scope. After the backoff, the sync queue handles deduplication
405
+ * so no guard is needed.
406
+ *
407
+ * @param {Object} [options={}] - Options for syncing
408
+ * @param {boolean} [options.onlyLLM=false] - Whether to sync only LLM based data sets
409
+ * @returns {Promise<void>}
410
+ */
411
+ syncAllDatasets(options?: {
412
+ onlyLLM?: boolean;
413
+ }): Promise<void>;
414
+ /**
415
+ * Returns the list of data sets that have hash trees, sorted by the priority order provided by sortByInitPriority().
416
+ *
417
+ * @param {boolean} onlyLLM - Whether to include only LLM based data sets
418
+ * @returns {Array<{name: string, backoff: {maxMs: number, exponent: number}}>} The sorted list of data sets with their backoff configurations
419
+ */
420
+ private getSortedDataSetsWithHashTrees;
306
421
  /**
307
422
  * Runs the sync algorithm for the given data set.
308
423
  *
@@ -333,24 +448,38 @@ declare class HashTreeParser {
333
448
  */
334
449
  stop(): void;
335
450
  /**
336
- * Resumes the HashTreeParser that was previously stopped.
451
+ * Cleans up the HashTreeParser, stopping all timers and clearing all internal state.
452
+ * After calling this, the parser should not be used anymore.
453
+ * @returns {void}
454
+ */
455
+ cleanUp(): void;
456
+ /**
457
+ * Resumes the HashTreeParser that was previously stopped, using a hash tree message.
337
458
  * @param {HashTreeMessage} message - The message to resume with, it must contain metadata with visible data sets info
338
459
  * @returns {void}
339
460
  */
340
- resume(message: HashTreeMessage): void;
461
+ resumeFromMessage(message: HashTreeMessage): void;
462
+ /**
463
+ * Resumes the HashTreeParser that was previously stopped, using a Locus API response.
464
+ * Unlike resumeFromMessage(), this does not require metadata/dataSets in the input,
465
+ * as it fetches all necessary information from Locus via initializeFromGetLociResponse.
466
+ * @param {LocusDTO} locus - locus object from an API response
467
+ * @returns {Promise}
468
+ */
469
+ resumeFromApiResponse(locus: LocusDTO): Promise<void>;
341
470
  private checkForSentinelHttpResponse;
342
471
  /**
343
472
  * Gets the current hashes from the locus for a specific data set.
344
473
  * @param {string} dataSetName
345
474
  * @param {string} currentRootHash
346
- * @returns {string[]}
475
+ * @returns {Object|null} An object containing the hashes and leaf count, or null if the hashes match and no sync is needed
347
476
  */
348
477
  private getHashesFromLocus;
349
478
  /**
350
479
  * Sends a sync request to Locus for the specified data set.
351
480
  *
352
481
  * @param {InternalDataSet} dataSet The data set to sync.
353
- * @param {Record<number, LeafDataItem[]>} mismatchedLeavesData The mismatched leaves data to include in the sync request.
482
+ * @param {Object} options Either `{ isInitialization: true }` for init syncs (uses leafCount=1 with empty leaf data) or `{ mismatchedLeavesData }` for normal syncs.
354
483
  * @returns {Promise<HashTreeMessage|null>}
355
484
  */
356
485
  private sendSyncRequestToLocus;
@@ -20,3 +20,21 @@ export declare function isMetadata(object: HashTreeObject): boolean;
20
20
  * @returns {void}
21
21
  */
22
22
  export declare const deleteNestedObjectsWithHtMeta: (currentLocusPart: any, parent?: any, currentKey?: string | number) => void;
23
+ /**
24
+ * Reorders items so that those matching the given priority list come first (in priority order),
25
+ * followed by everything else in their original order.
26
+ *
27
+ * @param {Array<T>} items - The items to reorder
28
+ * @param {string[]} priority - Ordered list of names that should come first
29
+ * @returns {Array<T>} A new array with prioritized items first
30
+ */
31
+ export declare function sortByInitPriority<T extends {
32
+ name: string;
33
+ }>(items: T[], priority: string[]): T[];
34
+ /**
35
+ * Sleeps for the specified amount of milliseconds
36
+ *
37
+ * @param {number} ms amount of milliseconds to sleep
38
+ * @returns {Promise<void>} A promise that resolves after the specified delay
39
+ */
40
+ export declare function sleep(ms: number): Promise<void>;
@@ -16,6 +16,9 @@ export * as REACTIONS from './reactions/reactions';
16
16
  export * as sdkAnnotationTypes from './annotation/annotation.types';
17
17
  export * as MeetingInfoV2 from './meeting-info/meeting-info-v2';
18
18
  export { type Reaction } from './reactions/reactions.type';
19
+ export { SitePreferenceSelectOption } from './meetings/meetings.types';
20
+ export type { FetchSitePreferencesMeViaSiteOptions, SitePreferencesResponse, } from './meetings/meetings.types';
21
+ export type { Interpreter, InterpreterUsingResource } from './interpretation/interpretation.types';
19
22
  export { CaptchaError, IntentToJoinError, JoinMeetingError, PasswordError, PermissionError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError, ReclaimHostEmptyWrongKeyError, Meeting, MeetingInfoUtil, JoinWebinarError, SdpResponseTimeoutError, };
20
23
  export { RemoteMedia } from './multistream/remoteMedia';
21
24
  export { default as TriggerProxy } from './common/events/trigger-proxy';
@@ -11,11 +11,11 @@ export default class LocusRetryStatusInterceptor extends Interceptor {
11
11
  */
12
12
  static create(): LocusRetryStatusInterceptor;
13
13
  /**
14
- * Handle response errors
15
- * @param {Object} options
16
- * @param {WebexHttpError} reason
17
- * @returns {Promise<WebexHttpError>}
14
+ * Check whether a URI is a Locus /hashtree or /sync endpoint.
15
+ * @param {string} uri
16
+ * @returns {boolean}
18
17
  */
18
+ private static isLocusHashtreeOrSync;
19
19
  onResponseError(options: any, reason: any): Promise<unknown>;
20
20
  /**
21
21
  * Handle retries for locus service unavailable errors
@@ -0,0 +1,10 @@
1
+ export type InterpreterUsingResource = {
2
+ id: string;
3
+ email?: string;
4
+ };
5
+ export type Interpreter = {
6
+ order: number;
7
+ sourceLanguage: string;
8
+ targetLanguage: string;
9
+ usingResource: InterpreterUsingResource;
10
+ };
@@ -25,10 +25,9 @@ export type HashTreeParserEntry = {
25
25
  *
26
26
  * @param {HashTreeMessage} message - The hash tree message to find the meeting for
27
27
  * @param {MeetingCollection} meetingCollection - The collection of meetings to search
28
- * @param {string} deviceUrl - The URL of the user's device
29
28
  * @returns {any} The meeting if found, otherwise undefined
30
29
  */
31
- export declare function findMeetingForHashTreeMessage(message: HashTreeMessage, meetingCollection: MeetingCollection, deviceUrl: string): any;
30
+ export declare function findMeetingForHashTreeMessage(message: HashTreeMessage | undefined, meetingCollection: MeetingCollection): any;
32
31
  /**
33
32
  * Creates a locus object from the objects received in a hash tree message. It usually will be
34
33
  * incomplete, because hash tree messages only contain the parts of locus that have changed,
@@ -130,6 +129,7 @@ export default class LocusInfo extends EventsScope {
130
129
  private createHashTreeParser;
131
130
  /**
132
131
  * @param {Object} data - data to initialize locus info with. It may be from a join or GET /loci response or from a Mercury event that triggers a creation of meeting object
132
+ * @param {Function} [onLocusSynced] - optional callback that will be called at the end of initial setup, when locus info is fully synced. It will be called with the full locus snapshot as an argument (which may be null if we haven't received any full locus DTOs during the initial setup, for example in case we receive only hash tree messages without full locus DTOs)
133
133
  * @returns {undefined}
134
134
  * @memberof LocusInfo
135
135
  */
@@ -145,7 +145,13 @@ export default class LocusInfo extends EventsScope {
145
145
  } | {
146
146
  trigger: 'get-loci-response';
147
147
  locus?: LocusDTO;
148
- }): Promise<void>;
148
+ }, onLocusSynced?: (locus: LocusDTO) => void): Promise<void>;
149
+ /**
150
+ * Builds a full locus DTO snapshot from current internal locus state.
151
+ *
152
+ * @returns {LocusDTO}
153
+ */
154
+ private getCurrentLocusSnapshot;
149
155
  /**
150
156
  * Handles HTTP response from Locus API call.
151
157
  * @param {Meeting} meeting meeting object
@@ -167,6 +173,28 @@ export default class LocusInfo extends EventsScope {
167
173
  * @returns {void}
168
174
  */
169
175
  sendClassicVsHashTreeMismatchMetric(meeting: any, message: string): void;
176
+ /**
177
+ * Helper that handles the common logic for reactivating a stopped HashTreeParser when
178
+ * a newer "replaces" is detected. Used by both the message and API response parser switch methods.
179
+ *
180
+ * @param {string} callerName - name of the calling method, used in log messages
181
+ * @param {string} locusUrl - the locus URL of the stopped parser
182
+ * @param {HashTreeParserEntry} stoppedEntry - the stopped parser entry
183
+ * @param {ReplacesInfo} replaces - replacement info extracted from self
184
+ * @param {Function} resumeCallback - callback to invoke after reactivation to resume the parser
185
+ * @returns {void}
186
+ */
187
+ private resumeStoppedParser;
188
+ /**
189
+ * Handles an API response whose locusUrl doesn't match any active HashTreeParser
190
+ * (either no entry exists, or the existing entry is stopped).
191
+ * Creates a new parser or reactivates a stopped one using initializeFromGetLociResponse.
192
+ *
193
+ * @param {string} locusUrl - the locus URL from the API response
194
+ * @param {LocusDTO} locus - the locus DTO from the API response
195
+ * @returns {void}
196
+ */
197
+ private handleHashTreeParserSwitchForAPIResponse;
170
198
  /**
171
199
  * Checks if the hash tree message should trigger a switch to a different HashTreeParser
172
200
  *
@@ -183,13 +211,23 @@ export default class LocusInfo extends EventsScope {
183
211
  * @returns {void}
184
212
  */
185
213
  private handleHashTreeMessage;
214
+ /**
215
+ * Triggers a sync of all hash tree datasets for all hash tree parsers associated with this meeting.
216
+ * The syncs are executed sequentially within each parser.
217
+ *
218
+ * @param {Object} [options={}] - Options for syncing
219
+ * @param {boolean} [options.onlyLLM=false] - Whether to sync only LLM based data sets
220
+ * @returns {Promise<void>}
221
+ */
222
+ syncAllHashTreeDatasets(options?: {
223
+ onlyLLM?: boolean;
224
+ }): Promise<void>;
186
225
  /**
187
226
  * Callback registered with HashTreeParser to receive locus info updates.
188
227
  * Updates our locus info based on the data parsed by the hash tree parser.
189
228
  *
190
229
  * @param {string} locusUrl - the locus URL for which the update is received
191
- * @param {LocusInfoUpdateType} updateType - The type of update received.
192
- * @param {Object} [data] - Additional data for the update, if applicable.
230
+ * @param {LocusInfoUpdate} update - Details about the update.
193
231
  * @returns {void}
194
232
  */
195
233
  private updateFromHashTree;
@@ -214,8 +252,8 @@ export default class LocusInfo extends EventsScope {
214
252
  * @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes
215
253
  * @param {object} locus locus object
216
254
  * @param {object} metadata locus hash trees metadata
217
- * @param {string} eventType locus event
218
255
  * @param {DataSet[]} dataSets
256
+ * @param {string} eventType locus event
219
257
  * @returns {void}
220
258
  */
221
259
  private onFullLocusWithHashTrees;
@@ -444,4 +482,10 @@ export default class LocusInfo extends EventsScope {
444
482
  * @memberof LocusInfo
445
483
  */
446
484
  clearMainSessionLocusCache(): void;
485
+ /**
486
+ * Cleans up all hash tree parsers and clears internal maps.
487
+ * @returns {void}
488
+ * @memberof LocusInfo
489
+ */
490
+ cleanUp(): void;
447
491
  }
@@ -1,2 +1,10 @@
1
+ export declare enum DisplayHintSection {
2
+ JOINED = "joined",
3
+ MODERATOR = "moderator",
4
+ COHOST = "coHost",
5
+ PRESENTER = "presenter",
6
+ PANELIST = "panelist",
7
+ ATTENDEE = "attendee"
8
+ }
1
9
  declare const InfoUtils: any;
2
10
  export default InfoUtils;
@@ -1,14 +1,30 @@
1
+ import { Enum } from '../constants';
1
2
  import { HtMeta } from '../hashTree/types';
3
+ export declare const EndMeetingReason: {
4
+ readonly maxMeetingDuration: "MAX_MEETING_DURATION";
5
+ readonly allParticipantsLeft: "ALL_PARTICIPANTS_LEFT";
6
+ readonly sipHostLeft: "SIP_HOST_LEFT";
7
+ readonly noHost: "NO_HOST";
8
+ readonly waitingForMpsEndMeetingTimeout: "WAITING_FOR_MPS_END_MEETING_TIMEOUT";
9
+ readonly fraudDetection: "FRAUD_DETECTION";
10
+ readonly meetingEndedByHost: "MEETING_ENDED_BY_HOST";
11
+ readonly meetingUpdated: "MEETING_UPDATED";
12
+ readonly meetingCancelled: "MEETING_CANCELLED";
13
+ readonly autoEndWithSingleParticipant: "AUTO_END_WITH_SINGLE_PARTICIPANT";
14
+ readonly breakoutEnded: "BREAKOUT_ENDED";
15
+ };
16
+ export type EndMeetingReason = Enum<typeof EndMeetingReason>;
2
17
  export type LocusFullState = {
3
18
  active: boolean;
4
19
  count: number;
5
20
  lastActive: string;
6
21
  locked: boolean;
7
22
  sessionId: string;
8
- seessionIds: string[];
23
+ sessionIds: string[];
9
24
  startTime: number;
10
25
  state: string;
11
26
  type: string;
27
+ endMeetingReason?: EndMeetingReason;
12
28
  };
13
29
  export type Links = {
14
30
  services: Record<'breakout' | 'record', {
@@ -59,3 +75,7 @@ export type ReplacesInfo = {
59
75
  replacedAt: string;
60
76
  sessionId: string;
61
77
  };
78
+ export declare const LocusErrorCodes: {
79
+ readonly LOCUS_INACTIVE: 2403004;
80
+ };
81
+ export type LocusErrorCodes = Enum<typeof LocusErrorCodes>;
@@ -26,6 +26,7 @@ export default class MediaProperties {
26
26
  shareAudioStream?: LocalSystemAudioStream;
27
27
  videoDeviceId: any;
28
28
  videoStream?: LocalCameraStream;
29
+ srtpCipher: string | undefined;
29
30
  namespace: string;
30
31
  mediaIssueCounters: {
31
32
  [key: string]: number;
@@ -115,6 +115,8 @@ interface IInMeetingActions {
115
115
  canDisablePollingQA?: boolean;
116
116
  canAttendeeRequestAiAssistantEnabled?: boolean;
117
117
  isAttendeeRequestAiAssistantDeclinedAll?: boolean;
118
+ isAnonymizeDisplayNamesEnabled?: boolean;
119
+ canViewTheParticipantList?: boolean;
118
120
  }
119
121
  /**
120
122
  * @class InMeetingActions
@@ -230,6 +232,8 @@ export default class InMeetingActions implements IInMeetingActions {
230
232
  canDisablePollingQA: any;
231
233
  canAttendeeRequestAiAssistantEnabled: any;
232
234
  isAttendeeRequestAiAssistantDeclinedAll: any;
235
+ isAnonymizeDisplayNamesEnabled: any;
236
+ canViewTheParticipantList: any;
233
237
  /**
234
238
  * Returns all meeting action options
235
239
  * @returns {Object}