@webex/plugin-meetings 3.8.1 → 3.9.0-webinar5k.1

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 (296) hide show
  1. package/README.md +26 -13
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/constants.js +16 -3
  5. package/dist/constants.js.map +1 -1
  6. package/dist/controls-options-manager/enums.js +1 -0
  7. package/dist/controls-options-manager/enums.js.map +1 -1
  8. package/dist/controls-options-manager/types.js.map +1 -1
  9. package/dist/controls-options-manager/util.js +26 -0
  10. package/dist/controls-options-manager/util.js.map +1 -1
  11. package/dist/hashTree/constants.js +23 -0
  12. package/dist/hashTree/constants.js.map +1 -0
  13. package/dist/hashTree/hashTree.js +516 -0
  14. package/dist/hashTree/hashTree.js.map +1 -0
  15. package/dist/hashTree/hashTreeParser.js +521 -0
  16. package/dist/hashTree/hashTreeParser.js.map +1 -0
  17. package/dist/interpretation/index.js +1 -1
  18. package/dist/interpretation/siLanguage.js +1 -1
  19. package/dist/locus-info/controlsUtils.js +11 -3
  20. package/dist/locus-info/controlsUtils.js.map +1 -1
  21. package/dist/locus-info/index.js +331 -59
  22. package/dist/locus-info/index.js.map +1 -1
  23. package/dist/media/index.js +2 -2
  24. package/dist/media/index.js.map +1 -1
  25. package/dist/meeting/brbState.js +17 -14
  26. package/dist/meeting/brbState.js.map +1 -1
  27. package/dist/meeting/in-meeting-actions.js +5 -1
  28. package/dist/meeting/in-meeting-actions.js.map +1 -1
  29. package/dist/meeting/index.js +264 -125
  30. package/dist/meeting/index.js.map +1 -1
  31. package/dist/meeting/muteState.js +2 -5
  32. package/dist/meeting/muteState.js.map +1 -1
  33. package/dist/meeting/request.js +19 -0
  34. package/dist/meeting/request.js.map +1 -1
  35. package/dist/meeting/request.type.js.map +1 -1
  36. package/dist/meeting/util.js +8 -11
  37. package/dist/meeting/util.js.map +1 -1
  38. package/dist/meetings/index.js +6 -2
  39. package/dist/meetings/index.js.map +1 -1
  40. package/dist/member/types.js.map +1 -1
  41. package/dist/members/collection.js +13 -0
  42. package/dist/members/collection.js.map +1 -1
  43. package/dist/members/index.js +44 -23
  44. package/dist/members/index.js.map +1 -1
  45. package/dist/members/request.js +3 -3
  46. package/dist/members/request.js.map +1 -1
  47. package/dist/members/util.js +18 -6
  48. package/dist/members/util.js.map +1 -1
  49. package/dist/metrics/constants.js +1 -0
  50. package/dist/metrics/constants.js.map +1 -1
  51. package/dist/multistream/sendSlotManager.js +32 -2
  52. package/dist/multistream/sendSlotManager.js.map +1 -1
  53. package/dist/reachability/index.js +5 -10
  54. package/dist/reachability/index.js.map +1 -1
  55. package/dist/types/constants.d.ts +12 -0
  56. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  57. package/dist/types/controls-options-manager/types.d.ts +4 -1
  58. package/dist/types/hashTree/constants.d.ts +8 -0
  59. package/dist/types/hashTree/hashTree.d.ts +128 -0
  60. package/dist/types/hashTree/hashTreeParser.d.ts +152 -0
  61. package/dist/types/locus-info/index.d.ts +93 -3
  62. package/dist/types/meeting/brbState.d.ts +0 -1
  63. package/dist/types/meeting/in-meeting-actions.d.ts +4 -0
  64. package/dist/types/meeting/index.d.ts +36 -3
  65. package/dist/types/meeting/request.d.ts +9 -1
  66. package/dist/types/meeting/request.type.d.ts +74 -0
  67. package/dist/types/meeting/util.d.ts +3 -3
  68. package/dist/types/member/types.d.ts +1 -0
  69. package/dist/types/members/collection.d.ts +6 -0
  70. package/dist/types/members/index.d.ts +15 -3
  71. package/dist/types/members/request.d.ts +1 -1
  72. package/dist/types/members/util.d.ts +5 -2
  73. package/dist/types/metrics/constants.d.ts +1 -0
  74. package/dist/types/multistream/sendSlotManager.d.ts +16 -0
  75. package/dist/types/reachability/index.d.ts +2 -2
  76. package/dist/webinar/index.js +1 -1
  77. package/package.json +26 -25
  78. package/src/constants.ts +16 -0
  79. package/src/controls-options-manager/enums.ts +1 -0
  80. package/src/controls-options-manager/types.ts +6 -1
  81. package/src/controls-options-manager/util.ts +31 -0
  82. package/src/hashTree/constants.ts +12 -0
  83. package/src/hashTree/hashTree.ts +460 -0
  84. package/src/hashTree/hashTreeParser.ts +556 -0
  85. package/src/locus-info/controlsUtils.ts +15 -0
  86. package/src/locus-info/index.ts +434 -58
  87. package/src/media/index.ts +2 -2
  88. package/src/meeting/brbState.ts +13 -9
  89. package/src/meeting/in-meeting-actions.ts +8 -0
  90. package/src/meeting/index.ts +193 -39
  91. package/src/meeting/muteState.ts +2 -6
  92. package/src/meeting/request.ts +16 -0
  93. package/src/meeting/request.type.ts +64 -0
  94. package/src/meeting/util.ts +17 -20
  95. package/src/meetings/index.ts +17 -3
  96. package/src/member/types.ts +1 -0
  97. package/src/members/collection.ts +11 -0
  98. package/src/members/index.ts +33 -7
  99. package/src/members/request.ts +2 -2
  100. package/src/members/util.ts +14 -3
  101. package/src/metrics/constants.ts +1 -0
  102. package/src/multistream/sendSlotManager.ts +34 -2
  103. package/src/reachability/index.ts +5 -13
  104. package/test/unit/spec/controls-options-manager/util.js +58 -0
  105. package/test/unit/spec/hashTree/hashTree.ts +394 -0
  106. package/test/unit/spec/hashTree/hashTreeParser.ts +156 -0
  107. package/test/unit/spec/locus-info/controlsUtils.js +52 -0
  108. package/test/unit/spec/locus-info/index.js +547 -54
  109. package/test/unit/spec/media/index.ts +107 -0
  110. package/test/unit/spec/meeting/brbState.ts +23 -4
  111. package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
  112. package/test/unit/spec/meeting/index.js +647 -46
  113. package/test/unit/spec/meeting/request.js +71 -0
  114. package/test/unit/spec/members/index.js +33 -10
  115. package/test/unit/spec/members/request.js +2 -2
  116. package/test/unit/spec/members/utils.js +27 -7
  117. package/test/unit/spec/multistream/sendSlotManager.ts +59 -0
  118. package/test/unit/spec/reachability/index.ts +2 -6
  119. package/dist/annotation/annotation.types.d.ts +0 -42
  120. package/dist/annotation/constants.d.ts +0 -31
  121. package/dist/annotation/index.d.ts +0 -117
  122. package/dist/breakouts/breakout.d.ts +0 -8
  123. package/dist/breakouts/collection.d.ts +0 -5
  124. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  125. package/dist/breakouts/events.d.ts +0 -8
  126. package/dist/breakouts/index.d.ts +0 -5
  127. package/dist/breakouts/request.d.ts +0 -22
  128. package/dist/breakouts/utils.d.ts +0 -15
  129. package/dist/common/browser-detection.d.ts +0 -9
  130. package/dist/common/collection.d.ts +0 -48
  131. package/dist/common/config.d.ts +0 -2
  132. package/dist/common/errors/captcha-error.d.ts +0 -15
  133. package/dist/common/errors/intent-to-join.d.ts +0 -16
  134. package/dist/common/errors/join-meeting.d.ts +0 -17
  135. package/dist/common/errors/media.d.ts +0 -15
  136. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  137. package/dist/common/errors/parameter.d.ts +0 -15
  138. package/dist/common/errors/password-error.d.ts +0 -15
  139. package/dist/common/errors/permission.d.ts +0 -14
  140. package/dist/common/errors/reclaim-host-role-error.d.ts +0 -60
  141. package/dist/common/errors/reclaim-host-role-error.js +0 -158
  142. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  143. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  144. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  145. package/dist/common/errors/reconnection-in-progress.js +0 -35
  146. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  147. package/dist/common/errors/reconnection.d.ts +0 -15
  148. package/dist/common/errors/stats.d.ts +0 -15
  149. package/dist/common/errors/webex-errors.d.ts +0 -81
  150. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  151. package/dist/common/events/events-scope.d.ts +0 -17
  152. package/dist/common/events/events.d.ts +0 -12
  153. package/dist/common/events/trigger-proxy.d.ts +0 -2
  154. package/dist/common/events/util.d.ts +0 -2
  155. package/dist/common/logs/logger-config.d.ts +0 -2
  156. package/dist/common/logs/logger-proxy.d.ts +0 -2
  157. package/dist/common/logs/request.d.ts +0 -34
  158. package/dist/common/queue.d.ts +0 -32
  159. package/dist/config.d.ts +0 -73
  160. package/dist/constants.d.ts +0 -952
  161. package/dist/controls-options-manager/constants.d.ts +0 -4
  162. package/dist/controls-options-manager/enums.d.ts +0 -5
  163. package/dist/controls-options-manager/index.d.ts +0 -120
  164. package/dist/controls-options-manager/types.d.ts +0 -43
  165. package/dist/controls-options-manager/util.d.ts +0 -7
  166. package/dist/index.d.ts +0 -4
  167. package/dist/interceptors/index.d.ts +0 -2
  168. package/dist/interceptors/locusRetry.d.ts +0 -27
  169. package/dist/interpretation/collection.d.ts +0 -5
  170. package/dist/interpretation/index.d.ts +0 -5
  171. package/dist/interpretation/siLanguage.d.ts +0 -5
  172. package/dist/locus-info/controlsUtils.d.ts +0 -2
  173. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  174. package/dist/locus-info/fullState.d.ts +0 -2
  175. package/dist/locus-info/hostUtils.d.ts +0 -2
  176. package/dist/locus-info/index.d.ts +0 -269
  177. package/dist/locus-info/infoUtils.d.ts +0 -2
  178. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  179. package/dist/locus-info/parser.d.ts +0 -212
  180. package/dist/locus-info/selfUtils.d.ts +0 -2
  181. package/dist/media/index.d.ts +0 -32
  182. package/dist/media/properties.d.ts +0 -108
  183. package/dist/media/util.d.ts +0 -2
  184. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  185. package/dist/mediaQualityMetrics/config.js +0 -513
  186. package/dist/mediaQualityMetrics/config.js.map +0 -1
  187. package/dist/meeting/effectsState.d.ts +0 -42
  188. package/dist/meeting/effectsState.js +0 -260
  189. package/dist/meeting/effectsState.js.map +0 -1
  190. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  191. package/dist/meeting/index.d.ts +0 -1622
  192. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  193. package/dist/meeting/muteState.d.ts +0 -116
  194. package/dist/meeting/request.d.ts +0 -257
  195. package/dist/meeting/request.type.d.ts +0 -11
  196. package/dist/meeting/state.d.ts +0 -9
  197. package/dist/meeting/util.d.ts +0 -2
  198. package/dist/meeting/voicea-meeting.d.ts +0 -16
  199. package/dist/meeting-info/collection.d.ts +0 -20
  200. package/dist/meeting-info/index.d.ts +0 -57
  201. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  202. package/dist/meeting-info/request.d.ts +0 -22
  203. package/dist/meeting-info/util.d.ts +0 -2
  204. package/dist/meeting-info/utilv2.d.ts +0 -2
  205. package/dist/meetings/collection.d.ts +0 -23
  206. package/dist/meetings/index.d.ts +0 -296
  207. package/dist/meetings/meetings.types.d.ts +0 -4
  208. package/dist/meetings/request.d.ts +0 -27
  209. package/dist/meetings/util.d.ts +0 -18
  210. package/dist/member/index.d.ts +0 -148
  211. package/dist/member/member.types.d.ts +0 -11
  212. package/dist/member/member.types.js +0 -18
  213. package/dist/member/member.types.js.map +0 -1
  214. package/dist/member/types.d.ts +0 -32
  215. package/dist/member/util.d.ts +0 -2
  216. package/dist/members/collection.d.ts +0 -24
  217. package/dist/members/index.d.ts +0 -308
  218. package/dist/members/request.d.ts +0 -58
  219. package/dist/members/types.d.ts +0 -25
  220. package/dist/members/util.d.ts +0 -2
  221. package/dist/metrics/config.d.ts +0 -169
  222. package/dist/metrics/config.js +0 -289
  223. package/dist/metrics/config.js.map +0 -1
  224. package/dist/metrics/constants.d.ts +0 -59
  225. package/dist/metrics/index.d.ts +0 -152
  226. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  227. package/dist/multistream/receiveSlot.d.ts +0 -68
  228. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  229. package/dist/multistream/remoteMedia.d.ts +0 -72
  230. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  231. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  232. package/dist/multistream/sendSlotManager.d.ts +0 -69
  233. package/dist/networkQualityMonitor/index.d.ts +0 -70
  234. package/dist/networkQualityMonitor/index.js +0 -226
  235. package/dist/networkQualityMonitor/index.js.map +0 -1
  236. package/dist/peer-connection-manager/index.d.ts +0 -6
  237. package/dist/peer-connection-manager/index.js +0 -671
  238. package/dist/peer-connection-manager/index.js.map +0 -1
  239. package/dist/peer-connection-manager/util.d.ts +0 -6
  240. package/dist/peer-connection-manager/util.js +0 -110
  241. package/dist/peer-connection-manager/util.js.map +0 -1
  242. package/dist/personal-meeting-room/index.d.ts +0 -47
  243. package/dist/personal-meeting-room/request.d.ts +0 -14
  244. package/dist/personal-meeting-room/util.d.ts +0 -2
  245. package/dist/reachability/clusterReachability.d.ts +0 -109
  246. package/dist/reachability/index.d.ts +0 -139
  247. package/dist/reachability/request.d.ts +0 -35
  248. package/dist/reachability/util.d.ts +0 -8
  249. package/dist/reactions/constants.d.ts +0 -3
  250. package/dist/reactions/reactions.d.ts +0 -4
  251. package/dist/reactions/reactions.type.d.ts +0 -32
  252. package/dist/reconnection-manager/index.d.ts +0 -112
  253. package/dist/recording-controller/enums.d.ts +0 -7
  254. package/dist/recording-controller/index.d.ts +0 -193
  255. package/dist/recording-controller/util.d.ts +0 -13
  256. package/dist/roap/collection.d.ts +0 -10
  257. package/dist/roap/collection.js +0 -63
  258. package/dist/roap/collection.js.map +0 -1
  259. package/dist/roap/handler.d.ts +0 -47
  260. package/dist/roap/handler.js +0 -279
  261. package/dist/roap/handler.js.map +0 -1
  262. package/dist/roap/index.d.ts +0 -116
  263. package/dist/roap/request.d.ts +0 -35
  264. package/dist/roap/state.d.ts +0 -9
  265. package/dist/roap/state.js +0 -127
  266. package/dist/roap/state.js.map +0 -1
  267. package/dist/roap/turnDiscovery.d.ts +0 -81
  268. package/dist/roap/util.d.ts +0 -2
  269. package/dist/roap/util.js +0 -76
  270. package/dist/roap/util.js.map +0 -1
  271. package/dist/rtcMetrics/constants.d.ts +0 -4
  272. package/dist/rtcMetrics/constants.js +0 -11
  273. package/dist/rtcMetrics/constants.js.map +0 -1
  274. package/dist/rtcMetrics/index.d.ts +0 -61
  275. package/dist/rtcMetrics/index.js +0 -197
  276. package/dist/rtcMetrics/index.js.map +0 -1
  277. package/dist/statsAnalyzer/global.d.ts +0 -118
  278. package/dist/statsAnalyzer/global.js +0 -127
  279. package/dist/statsAnalyzer/global.js.map +0 -1
  280. package/dist/statsAnalyzer/index.d.ts +0 -193
  281. package/dist/statsAnalyzer/index.js +0 -1019
  282. package/dist/statsAnalyzer/index.js.map +0 -1
  283. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  284. package/dist/statsAnalyzer/mqaUtil.js +0 -181
  285. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  286. package/dist/transcription/index.d.ts +0 -64
  287. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  288. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  289. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  290. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  291. package/dist/types/rtcMetrics/index.d.ts +0 -71
  292. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  293. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  294. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  295. package/dist/webinar/collection.d.ts +0 -16
  296. package/dist/webinar/index.d.ts +0 -5
@@ -0,0 +1,152 @@
1
+ import HashTree from './hashTree';
2
+ import { Enum } from '../constants';
3
+ export interface DataSet {
4
+ url: string;
5
+ root: string;
6
+ version: number;
7
+ leafCount: number;
8
+ name: string;
9
+ idleMs: number;
10
+ backoff: {
11
+ maxMs: number;
12
+ exponent: number;
13
+ };
14
+ }
15
+ export declare const ObjectType: {
16
+ readonly participant: "participant";
17
+ readonly self: "self";
18
+ readonly locus: "locus";
19
+ };
20
+ export type ObjectType = Enum<typeof ObjectType>;
21
+ export interface HtMeta {
22
+ elementId: {
23
+ type: ObjectType;
24
+ id: number;
25
+ version: number;
26
+ };
27
+ dataSetNames: string[];
28
+ }
29
+ export interface HashTreeObject {
30
+ htMeta: HtMeta;
31
+ data: Record<string, any>;
32
+ }
33
+ export interface RootHashMessage {
34
+ dataSets: Array<DataSet>;
35
+ }
36
+ export interface HashTreeMessage {
37
+ dataSets: Array<DataSet>;
38
+ locusStateElements?: Array<HashTreeObject>;
39
+ locusSessionId?: string;
40
+ locusUrl?: string;
41
+ }
42
+ interface InternalDataSet extends DataSet {
43
+ hashTree: HashTree;
44
+ timer?: ReturnType<typeof setTimeout>;
45
+ }
46
+ type WebexRequestMethod = (options: Record<string, any>) => Promise<any>;
47
+ export declare const LocusInfoUpdateType: {
48
+ readonly OBJECTS_UPDATED: "OBJECTS_UPDATED";
49
+ readonly MEETING_ENDED: "MEETING_ENDED";
50
+ };
51
+ export type LocusInfoUpdateType = Enum<typeof LocusInfoUpdateType>;
52
+ export type LocusInfoUpdateCallback = (updateType: LocusInfoUpdateType, data?: {
53
+ updatedObjects: HashTreeObject[];
54
+ }) => void;
55
+ /**
56
+ * Parses hash tree eventing locus data
57
+ */
58
+ declare class HashTreeParser {
59
+ dataSets: Record<string, InternalDataSet>;
60
+ webexRequest: WebexRequestMethod;
61
+ locusInfoUpdateCallback: LocusInfoUpdateCallback;
62
+ debugId: string;
63
+ /**
64
+ * Constructor for HashTreeParser
65
+ * @param {Object} options
66
+ * @param {Object} options.initialLocus The initial locus data containing the hash tree information
67
+ */
68
+ constructor(options: {
69
+ initialLocus: {
70
+ dataSets: Array<DataSet>;
71
+ locus: any;
72
+ };
73
+ webexRequest: WebexRequestMethod;
74
+ locusInfoUpdateCallback: LocusInfoUpdateCallback;
75
+ debugId: string;
76
+ });
77
+ /**
78
+ * Each dataset exists at a different place in the dto
79
+ * iterate recursively over the locus and if it has a htMeta key,
80
+ * create an object with the type, id and version and add it to the appropriate leafData array
81
+ *
82
+ * @param {any} locus - The current part of the locus being processed
83
+ * @returns {any} - An object mapping dataset names to arrays of leaf data
84
+ */
85
+ private analyzeLocusHtMeta;
86
+ /**
87
+ * Checks if the provided hash tree message indicates the end of the meeting and that there won't be any more updates.
88
+ *
89
+ * @param {HashTreeMessage} message - The hash tree message to check
90
+ * @returns {boolean} - Returns true if the message indicates the end of the meeting, false otherwise
91
+ */
92
+ private isEndMessage;
93
+ /**
94
+ * Handles the root hash heartbeat message
95
+ *
96
+ * @param {RootHashMessage} message - The root hash heartbeat message
97
+ * @returns {void}
98
+ */
99
+ handleRootHashHeartBeatMessage(message: RootHashMessage): void;
100
+ /**
101
+ * This method should be called when we receive a partial locus DTO that contains dataSets and htMeta information
102
+ * It updates the hash trees with the new leaf data based on the received Locus
103
+ *
104
+ * @param {Object} update - The locus update containing data sets and locus information
105
+ * @returns {void}
106
+ */
107
+ handleLocusUpdate(update: {
108
+ dataSets?: Array<DataSet>;
109
+ locus: any;
110
+ }): void;
111
+ /**
112
+ * Handles incoming hash tree messages, updates the hash trees and calls locusInfoUpdateCallback
113
+ *
114
+ * @param {HashTreeMessage} message - The hash tree message containing data sets and objects to be processed
115
+ * @returns {void}
116
+ */
117
+ handleMessage(message: HashTreeMessage): void;
118
+ /**
119
+ * Calculates a weighted backoff time that should be used for syncs
120
+ *
121
+ * @param {Object} backoff - The backoff configuration containing maxMs and exponent
122
+ * @returns {number} - A weighted backoff time based on the provided configuration, using algorithm supplied by Locus team
123
+ */
124
+ private getWeightedBackoffTime;
125
+ /**
126
+ * Runs the sync algorithm for the given data set.
127
+ *
128
+ * @param {DataSet} receivedDataSet - The data set to run the sync algorithm for.
129
+ * @returns {void}
130
+ */
131
+ private runSyncAlgorithm;
132
+ /**
133
+ * Stops all timers for the data sets to prevent any further sync attempts.
134
+ * @returns {void}
135
+ */
136
+ stopAllTimers(): void;
137
+ /**
138
+ * Gets the current hashes from the locus for a specific data set.
139
+ * @param {string} dataSetName
140
+ * @returns {string[]}
141
+ */
142
+ private getHashesFromLocus;
143
+ /**
144
+ * Sends a sync request to Locus for the specified data set.
145
+ *
146
+ * @param {InternalDataSet} dataSet The data set to sync.
147
+ * @param {Record<number, LeafDataItem[]>} mismatchedLeavesData The mismatched leaves data to include in the sync request.
148
+ * @returns {Promise<HashTreeObject[]>}
149
+ */
150
+ private sendSyncRequestToLocus;
151
+ }
152
+ export default HashTreeParser;
@@ -1,4 +1,59 @@
1
1
  import EventsScope from '../common/events/events-scope';
2
+ import HashTreeParser, { DataSet, HashTreeMessage, HashTreeObject, HtMeta } from '../hashTree/hashTreeParser';
3
+ export type LocusLLMEvent = {
4
+ data: {
5
+ eventType: 'locus.state_message';
6
+ stateElementsMessage: HashTreeMessage;
7
+ };
8
+ };
9
+ export type LocusDTO = {
10
+ controls?: any;
11
+ fullState?: {
12
+ active: boolean;
13
+ count: number;
14
+ lastActive: string;
15
+ locked: boolean;
16
+ sessionId: string;
17
+ seessionIds: string[];
18
+ startTime: number;
19
+ state: string;
20
+ type: string;
21
+ };
22
+ host?: {
23
+ id: string;
24
+ incomingCallProtocols: any[];
25
+ isExternal: boolean;
26
+ name: string;
27
+ orgId: string;
28
+ };
29
+ htMeta?: HtMeta;
30
+ info?: any;
31
+ jsSdkMeta?: {
32
+ removedParticipantIds: string[];
33
+ };
34
+ links?: any;
35
+ mediaShares?: any[];
36
+ meetings?: any[];
37
+ participants: any[];
38
+ replaces?: any[];
39
+ self?: any;
40
+ sequence?: {
41
+ dirtyParticipants: number;
42
+ entries: number[];
43
+ rangeEnd: number;
44
+ rangeStart: number;
45
+ sequenceHash: number;
46
+ sessionToken: string;
47
+ since: string;
48
+ totalParticipants: number;
49
+ };
50
+ syncUrl?: string;
51
+ url?: string;
52
+ };
53
+ export type LocusApiResponseBody = {
54
+ dataSets?: DataSet[];
55
+ locus: LocusDTO;
56
+ };
2
57
  /**
3
58
  * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object
4
59
  * @export
@@ -38,6 +93,8 @@ export default class LocusInfo extends EventsScope {
38
93
  resources: any;
39
94
  mainSessionLocusCache: any;
40
95
  self: any;
96
+ hashTreeParser?: HashTreeParser;
97
+ hashTreeObjectId2ParticipantId: Map<number, string>;
41
98
  /**
42
99
  * Constructor
43
100
  * @param {function} updateMeeting callback to update the meeting object from an object
@@ -78,10 +135,41 @@ export default class LocusInfo extends EventsScope {
78
135
  init(locus?: any): void;
79
136
  /**
80
137
  * @param {Object} locus
138
+ * @param {DataSet[]} [dataSets=[]] - Array of data sets
81
139
  * @returns {undefined}
82
140
  * @memberof LocusInfo
83
141
  */
84
- initialSetup(locus: object): void;
142
+ initialSetup(locus: object, dataSets?: DataSet[]): void;
143
+ /**
144
+ *
145
+ * @param {HashTreeObject} object data set object
146
+ * @param {any} locus
147
+ * @returns {void}
148
+ */
149
+ updateHashTreeObjectInLocus(object: HashTreeObject, locus: LocusDTO): LocusDTO;
150
+ /**
151
+ * Handles HTTP response from Locus API call when hash tree update.
152
+ * @param {Meeting} meeting meeting object
153
+ * @param {LocusApiResponseBody} responseBody body of the http reponse from Locus API call
154
+ * @returns {void}
155
+ */
156
+ handleLocusAPIResponse(meeting: any, responseBody: LocusApiResponseBody): void;
157
+ /**
158
+ * Handles a hash tree message received from Locus.
159
+ *
160
+ * @param {Meeting} meeting - The meeting object
161
+ * @param {HashTreeMessage} message incoming hash tree message
162
+ * @returns {void}
163
+ */
164
+ private handleHashTreeMessage;
165
+ /**
166
+ * Updates our locus info based on the data parsed by the hash tree parser.
167
+ *
168
+ * @param {LocusInfoUpdateType} updateType - The type of update received.
169
+ * @param {Object} [data] - Additional data for the update, if applicable.
170
+ * @returns {void}
171
+ */
172
+ private updateFromHashTree;
85
173
  /**
86
174
  * @param {Meeting} meeting
87
175
  * @param {Object} data
@@ -101,10 +189,11 @@ export default class LocusInfo extends EventsScope {
101
189
  * updates the locus with full locus object
102
190
  * @param {object} locus locus object
103
191
  * @param {string} eventType particulat locus event
192
+ * @param {DataSet[]} dataSets
104
193
  * @returns {object} null
105
194
  * @memberof LocusInfo
106
195
  */
107
- onFullLocus(locus: any, eventType?: string): void;
196
+ onFullLocus(locus: any, eventType?: string, dataSets?: Array<DataSet>): void;
108
197
  /**
109
198
  * @param {String} eventType
110
199
  * @returns {undefined}
@@ -159,11 +248,12 @@ export default class LocusInfo extends EventsScope {
159
248
  /**
160
249
  * update meeting's members
161
250
  * @param {Object} participants new participants object
251
+ * @param {Array} removedParticipantIds list of removed participants
162
252
  * @param {Boolean} isReplace is replace the whole members
163
253
  * @returns {Array} updatedParticipants
164
254
  * @memberof LocusInfo
165
255
  */
166
- updateParticipants(participants: object, isReplace?: boolean): void;
256
+ updateParticipants(participants: object, removedParticipantIds: string[], isReplace?: boolean): void;
167
257
  /**
168
258
  * @param {Object} controls
169
259
  * @param {Object} self
@@ -40,7 +40,6 @@ export declare class BrbState {
40
40
  /**
41
41
  * Send the local brb state to the server
42
42
  *
43
- * @param {SendSlotManager} sendSlotManager
44
43
  * @returns {Promise}
45
44
  */
46
45
  private sendLocalBrbStateToServer;
@@ -103,6 +103,8 @@ interface IInMeetingActions {
103
103
  canEnableRemoteDesktopControl?: boolean;
104
104
  canDisableRemoteDesktopControl?: boolean;
105
105
  canMoveToLobby?: boolean;
106
+ canEnablePollingQA?: boolean;
107
+ canDisablePollingQA?: boolean;
106
108
  }
107
109
  /**
108
110
  * @class InMeetingActions
@@ -206,6 +208,8 @@ export default class InMeetingActions implements IInMeetingActions {
206
208
  canEnableRemoteDesktopControl: any;
207
209
  canDisableRemoteDesktopControl: any;
208
210
  canMoveToLobby: any;
211
+ canEnablePollingQA: any;
212
+ canDisablePollingQA: any;
209
213
  /**
210
214
  * Returns all meeting action options
211
215
  * @returns {Object}
@@ -8,6 +8,7 @@ import Roap, { type TurnDiscoverySkipReason } from '../roap/index';
8
8
  import { type TurnServerInfo } from '../roap/types';
9
9
  import { type BundlePolicy } from '../media';
10
10
  import MediaProperties from '../media/properties';
11
+ import { LocusDTO } from '../locus-info';
11
12
  import ReconnectionManager from '../reconnection-manager';
12
13
  import MeetingRequest from './request';
13
14
  import Members from '../members/index';
@@ -21,6 +22,8 @@ import RecordingController from '../recording-controller';
21
22
  import ControlsOptionsManager from '../controls-options-manager';
22
23
  import { LocusMediaRequest } from './locusMediaRequest';
23
24
  import { BrbState } from './brbState';
25
+ import { SetStageOptions } from './request.type';
26
+ import { DataSet } from '../hashTree/hashTreeParser';
24
27
  export type CaptionData = {
25
28
  id: string;
26
29
  isFinal: boolean;
@@ -66,6 +69,13 @@ export type AddMediaOptions = {
66
69
  remoteMediaManagerConfig?: RemoteMediaManagerConfiguration;
67
70
  bundlePolicy?: BundlePolicy;
68
71
  allowMediaInLobby?: boolean;
72
+ additionalMediaOptions?: AdditionalMediaOptions;
73
+ };
74
+ export type AdditionalMediaOptions = {
75
+ sendVideo?: boolean;
76
+ receiveVideo?: boolean;
77
+ sendAudio?: boolean;
78
+ receiveAudio?: boolean;
69
79
  };
70
80
  export type CallStateForMetrics = {
71
81
  correlationId?: string;
@@ -881,15 +891,17 @@ export default class Meeting extends StatelessWebexPlugin {
881
891
  phoneNumber: string;
882
892
  }): any;
883
893
  /**
884
- * Cancel an SIP call invitation made during a meeting
894
+ * Cancel an SIP/phone call invitation made during a meeting
885
895
  * @param {Object} invitee
886
896
  * @param {String} invitee.memberId
887
- * @returns {Promise} see #members.cancelSIPInvite
897
+ * @param {Boolean} [invitee.isInternalNumber] - When cancel phone invitation, if the number is internal
898
+ * @returns {Promise} see #members.cancelInviteByMemberId
888
899
  * @public
889
900
  * @memberof Meeting
890
901
  */
891
- cancelSIPInvite(invitee: {
902
+ cancelInviteByMemberId(invitee: {
892
903
  memberId: string;
904
+ isInternalNumber?: boolean;
893
905
  }): any;
894
906
  /**
895
907
  * Admit the guest(s) to the call once they are waiting.
@@ -1030,11 +1042,13 @@ export default class Meeting extends StatelessWebexPlugin {
1030
1042
  * @memberof Meeting
1031
1043
  */
1032
1044
  setLocus(locus: {
1045
+ locus: LocusDTO;
1033
1046
  mediaConnections: Array<any>;
1034
1047
  locusUrl: string;
1035
1048
  locusId: string;
1036
1049
  mediaId: string;
1037
1050
  host: object;
1051
+ dataSets: DataSet[];
1038
1052
  } | any): void;
1039
1053
  /**
1040
1054
  * Upload logs for the current meeting
@@ -1252,6 +1266,12 @@ export default class Meeting extends StatelessWebexPlugin {
1252
1266
  startTranscription(options?: {
1253
1267
  spokenLanguage?: string;
1254
1268
  }): Promise<void>;
1269
+ /** Handles Locus LLM events
1270
+ *
1271
+ * @param {LocusLLMEvent} event - The Locus LLM event to process
1272
+ * @returns {void}
1273
+ */
1274
+ private processLocusLLMEvent;
1255
1275
  /**
1256
1276
  * Callback called when a relay event is received from meeting LLM Connection
1257
1277
  * @param {RelayEvent} e Event object coming from LLM Connection
@@ -1993,5 +2013,18 @@ export default class Meeting extends StatelessWebexPlugin {
1993
2013
  * @returns {Promise<MediaReachabilityMetrics>}
1994
2014
  */
1995
2015
  private getMediaReachabilityMetricFields;
2016
+ /**
2017
+ * Set the stage for the meeting
2018
+ *
2019
+ * @param {SetStageOptions} options Options to use when setting the stage
2020
+ * @returns {Promise} The locus request
2021
+ */
2022
+ setStage({ activeSpeakerProportion, customBackground, customLogo, customNameLabel, importantParticipants, lockAttendeeViewOnStage, showActiveSpeaker, }?: SetStageOptions): Promise<any>;
2023
+ /**
2024
+ * Unset the stage for the meeting
2025
+ *
2026
+ * @returns {Promise} The locus request
2027
+ */
2028
+ unsetStage(): Promise<any>;
1996
2029
  }
1997
2030
  export {};
@@ -1,5 +1,5 @@
1
1
  import { StatelessWebexPlugin } from '@webex/webex-core';
2
- import { SendReactionOptions, BrbOptions, ToggleReactionsOptions, PostMeetingDataConsentOptions } from './request.type';
2
+ import { SendReactionOptions, BrbOptions, ToggleReactionsOptions, PostMeetingDataConsentOptions, SynchronizeVideoLayout } from './request.type';
3
3
  import { AnnotationInfo } from '../annotation/annotation.types';
4
4
  import { ClientMediaPreferences } from '../reachability/reachability.types';
5
5
  /**
@@ -314,4 +314,12 @@ export default class MeetingRequest extends StatelessWebexPlugin {
314
314
  * @returns {Promise}
315
315
  */
316
316
  setPostMeetingDataConsent({ postMeetingDataConsent, locusUrl, deviceUrl, selfId, }: PostMeetingDataConsentOptions): Promise<any>;
317
+ /**
318
+ * Synchronize the stage for a meeting
319
+ *
320
+ * @param {LocusUrl} locusUrl The locus URL
321
+ * @param {SetStageVideoLayout} videoLayout The video layout to synchronize
322
+ * @returns {Promise} The locus request
323
+ */
324
+ synchronizeStage(locusUrl: string, videoLayout: SynchronizeVideoLayout): Promise<any>;
317
325
  }
@@ -21,3 +21,77 @@ export type PostMeetingDataConsentOptions = {
21
21
  deviceUrl: string;
22
22
  selfId: string;
23
23
  };
24
+ export type StageCustomLogoPositions = 'LowerLeft' | 'LowerMiddle' | 'LowerRight' | 'UpperLeft' | 'UpperMiddle' | 'UpperRight';
25
+ export type StageNameLabelType = 'Primary' | 'PrimaryInverted' | 'Secondary' | 'SecondaryInverted';
26
+ export type StageCustomBackground = {
27
+ url: string;
28
+ [others: string]: unknown;
29
+ };
30
+ export type StageCustomLogo = {
31
+ url: string;
32
+ position: StageCustomLogoPositions;
33
+ [others: string]: unknown;
34
+ };
35
+ export type StageCustomNameLabel = {
36
+ accentColor: string;
37
+ background: {
38
+ color: string;
39
+ };
40
+ border: {
41
+ color: string;
42
+ };
43
+ content: {
44
+ displayName: {
45
+ color: string;
46
+ };
47
+ subtitle: {
48
+ color: string;
49
+ };
50
+ };
51
+ decoration: {
52
+ color: string;
53
+ };
54
+ fadeOut?: {
55
+ delay: number;
56
+ };
57
+ type: StageNameLabelType;
58
+ [others: string]: unknown;
59
+ };
60
+ export type SetStageOptions = {
61
+ activeSpeakerProportion?: number;
62
+ customBackground?: StageCustomBackground;
63
+ customLogo?: StageCustomLogo;
64
+ customNameLabel?: StageCustomNameLabel;
65
+ importantParticipants?: {
66
+ mainCsi: number;
67
+ participantId: string;
68
+ }[];
69
+ lockAttendeeViewOnStage?: boolean;
70
+ showActiveSpeaker?: boolean;
71
+ };
72
+ export type SetStageVideoLayout = {
73
+ overrideDefault: true;
74
+ lockAttendeeViewOnStageOnly: boolean;
75
+ stageParameters: {
76
+ importantParticipants?: {
77
+ participantId: string;
78
+ mainCsi: number;
79
+ order: number;
80
+ }[];
81
+ showActiveSpeaker: {
82
+ show: boolean;
83
+ order: number;
84
+ };
85
+ activeSpeakerProportion: number;
86
+ stageManagerType: number;
87
+ };
88
+ customLayouts?: {
89
+ background?: StageCustomBackground;
90
+ logo?: StageCustomLogo;
91
+ };
92
+ nameLabelStyle?: StageCustomNameLabel;
93
+ };
94
+ export type UnsetStageVideoLayout = {
95
+ overrideDefault: false;
96
+ };
97
+ export type SynchronizeVideoLayout = SetStageVideoLayout | UnsetStageVideoLayout;
@@ -92,14 +92,14 @@ declare const MeetingUtil: {
92
92
  */
93
93
  addSequence: (meeting: any, requestBody: any) => void;
94
94
  /**
95
- * Updates the locus info for the meeting with the delta locus
96
- * returned from requests that include the sequence information
95
+ * Updates the locus info for the meeting with the locus
96
+ * information returned from API requests made to Locus
97
97
  * Returns the original response object
98
98
  * @param {Object} meeting The meeting object
99
99
  * @param {Object} response The response of the http request
100
100
  * @returns {Object}
101
101
  */
102
- updateLocusWithDelta: (meeting: any, response: any) => any;
102
+ updateLocusFromApiResponse: (meeting: any, response: any) => any;
103
103
  generateBuildLocusDeltaRequestOptions: (originalMeeting: any) => (originalOptions: any) => any;
104
104
  generateLocusDeltaRequest: (originalMeeting: any) => (originalOptions: any) => any;
105
105
  selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => boolean;
@@ -95,4 +95,5 @@ export interface Participant {
95
95
  status: ParticipantMediaStatus;
96
96
  type: string;
97
97
  url: ParticipantUrl;
98
+ isRemoved: boolean;
98
99
  }
@@ -22,6 +22,12 @@ export default class MembersCollection {
22
22
  * @memberof MembersCollection
23
23
  */
24
24
  getAll(): Record<string, Member>;
25
+ /**
26
+ * Removes a member from the collection
27
+ * @param {String} id
28
+ * @returns {void}
29
+ */
30
+ remove(id: string): void;
25
31
  /**
26
32
  * @returns {void}
27
33
  * reset members
@@ -84,6 +84,7 @@ export default class Members extends StatelessWebexPlugin {
84
84
  locusParticipantsUpdate(payload: {
85
85
  participants: object;
86
86
  isReplace?: boolean;
87
+ removedParticipantIds?: Array<string>;
87
88
  }): void;
88
89
  /**
89
90
  * Internal update the content id
@@ -126,6 +127,12 @@ export default class Members extends StatelessWebexPlugin {
126
127
  * @memberof Members
127
128
  */
128
129
  private handleMembersUpdate;
130
+ /**
131
+ * removes members from the collection
132
+ * @param {Array<string>} removedMembers removed members ids
133
+ * @returns {void}
134
+ */
135
+ private removeMembers;
129
136
  /**
130
137
  * set members to the member collection from each updated/added lists as passed in
131
138
  * @param {Array} list
@@ -226,12 +233,17 @@ export default class Members extends StatelessWebexPlugin {
226
233
  */
227
234
  cancelPhoneInvite(invitee: any): any;
228
235
  /**
229
- * Cancels an SIP call to the associated meeting
230
- * @param {String} invitee
236
+ * Cancels an SIP/phone call to the associated meeting
237
+ * @param {Object} invitee
238
+ * @param {String} invitee.memberId - The memberId of the invitee
239
+ * @param {Boolean} [invitee.isInternalNumber] - When cancel phone invitation, if the number is internal
231
240
  * @returns {Promise}
232
241
  * @memberof Members
233
242
  */
234
- cancelSIPInvite(invitee: any): any;
243
+ cancelInviteByMemberId(invitee: {
244
+ memberId: string;
245
+ isInternalNumber?: boolean;
246
+ }): any;
235
247
  /**
236
248
  * Admits waiting members (invited guests to meeting)
237
249
  * @param {Array} memberIds
@@ -136,5 +136,5 @@ export default class MembersRequest extends StatelessWebexPlugin {
136
136
  * @throws {Error} if the options are not valid and complete, must have invitee with memberId AND locusUrl
137
137
  * @memberof MembersRequest
138
138
  */
139
- cancelSIPInvite(options: any): Promise<any>;
139
+ cancelInviteByMemberId(options: any): Promise<any>;
140
140
  }
@@ -26,6 +26,7 @@ declare const MembersUtil: {
26
26
  */
27
27
  getAddMemberBody: (options: any) => {
28
28
  invitees: {
29
+ isInternalNumber?: any;
29
30
  roles?: any;
30
31
  address: any;
31
32
  }[];
@@ -55,6 +56,7 @@ declare const MembersUtil: {
55
56
  uri: any;
56
57
  body: {
57
58
  invitees: {
59
+ isInternalNumber?: any;
58
60
  roles?: any;
59
61
  address: any;
60
62
  }[];
@@ -228,16 +230,17 @@ declare const MembersUtil: {
228
230
  }[];
229
231
  };
230
232
  };
231
- cancelSIPInviteOptions: (invitee: any, locusUrl: any) => {
233
+ cancelInviteByMemberIdOptions: (invitee: any, locusUrl: any) => {
232
234
  invitee: any;
233
235
  locusUrl: any;
234
236
  };
235
- generateCancelSIPInviteRequestParams: (options: any) => {
237
+ generateCancelInviteByMemberIdRequestParams: (options: any) => {
236
238
  method: string;
237
239
  uri: any;
238
240
  body: {
239
241
  actionType: string;
240
242
  invitees: {
243
+ isInternalNumber?: any;
241
244
  address: any;
242
245
  }[];
243
246
  };
@@ -69,6 +69,7 @@ declare const BEHAVIORAL_METRICS: {
69
69
  MEETING_INFO_POLICY_ERROR: string;
70
70
  LOCUS_DELTA_SYNC_FAILED: string;
71
71
  LOCUS_DELTA_OUT_OF_ORDER: string;
72
+ LOCUS_SYNC_HANDLING_FAILED: string;
72
73
  PERMISSION_TOKEN_REFRESH: string;
73
74
  PERMISSION_TOKEN_REFRESH_ERROR: string;
74
75
  TURN_DISCOVERY_LATENCY: string;
@@ -1,7 +1,17 @@
1
1
  import { SendSlot, MediaType, LocalStream, MultistreamRoapMediaConnection, NamedMediaGroup, StreamState } from '@webex/internal-media-core';
2
+ /**
3
+ * This class is used to manage the sendSlots for the given media types.
4
+ */
2
5
  export default class SendSlotManager {
3
6
  private readonly slots;
4
7
  private readonly LoggerProxy;
8
+ private readonly sourceStateOverrides;
9
+ /**
10
+ * Constructor for SendSlotManager
11
+ *
12
+ * @param {any} LoggerProxy is used to log the messages
13
+ * @constructor
14
+ */
5
15
  constructor(LoggerProxy: any);
6
16
  /**
7
17
  * This method is used to create a sendSlot for the given mediaType and returns the created sendSlot
@@ -32,6 +42,12 @@ export default class SendSlotManager {
32
42
  * @returns {void}
33
43
  */
34
44
  setSourceStateOverride(mediaType: MediaType, state: StreamState | null): void;
45
+ /**
46
+ * Gets the source state override for the given media type.
47
+ * @param {MediaType} mediaType - The type of media to get the source state override for.
48
+ * @returns {StreamState | null} - The current source state override or null if not set.
49
+ */
50
+ private getSourceStateOverride;
35
51
  /**
36
52
  * This method publishes the given stream to the sendSlot for the given mediaType
37
53
  * @param {MediaType} mediaType MediaType of the sendSlot to which a stream needs to be published (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)