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

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
@@ -9,6 +9,9 @@ describe('plugin-meetings', () => {
9
9
  moderator: ['HINT_1', 'HINT_2'],
10
10
  joined: ['HINT_3', 'VOIP_IS_ENABLED'],
11
11
  coHost: ['HINT_4'],
12
+ presenter: ['HINT_5'],
13
+ panelist: ['HINT_6'],
14
+ attendee: ['HINT_7'],
12
15
  },
13
16
  };
14
17
 
@@ -30,6 +33,9 @@ describe('plugin-meetings', () => {
30
33
  policy: {HINT_3: true, VOIP_IS_ENABLED: true},
31
34
  moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
32
35
  coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
36
+ presenter: {HINT_5: true},
37
+ panelist: {HINT_6: true},
38
+ attendee: {HINT_7: true},
33
39
  userDisplayHints: [
34
40
  'HINT_3',
35
41
  'VOIP_IS_ENABLED',
@@ -43,6 +49,9 @@ describe('plugin-meetings', () => {
43
49
  policy: {HINT_3: true, VOIP_IS_ENABLED: true},
44
50
  moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
45
51
  coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
52
+ presenter: {HINT_5: true},
53
+ panelist: {HINT_6: true},
54
+ attendee: {HINT_7: true},
46
55
  userDisplayHints: [
47
56
  'HINT_3',
48
57
  'VOIP_IS_ENABLED',
@@ -57,6 +66,9 @@ describe('plugin-meetings', () => {
57
66
  policy: {HINT_3: true, VOIP_IS_ENABLED: true},
58
67
  moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
59
68
  coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
69
+ presenter: {HINT_5: true},
70
+ panelist: {HINT_6: true},
71
+ attendee: {HINT_7: true},
60
72
  userDisplayHints: ['HINT_3', 'VOIP_IS_ENABLED', 'HINT_4', 'LOWER_SOMEONE_ELSES_HAND'],
61
73
  });
62
74
 
@@ -64,15 +76,21 @@ describe('plugin-meetings', () => {
64
76
  policy: {HINT_3: true, VOIP_IS_ENABLED: true},
65
77
  moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
66
78
  coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
79
+ presenter: {HINT_5: true},
80
+ panelist: {HINT_6: true},
81
+ attendee: {HINT_7: true},
67
82
  userDisplayHints: ['HINT_3', 'VOIP_IS_ENABLED'],
68
83
  });
69
84
  });
70
85
 
71
- it('only includes interstitial display hints when user has not joined the meeting', () => {
86
+ it('only includes interstitial display (VOIP_IS_ENABLED) hints when user has not joined the meeting', () => {
72
87
  assert.deepEqual(InfoUtils.parse(info, ['MODERATOR'], false), {
73
88
  policy: {HINT_3: true, VOIP_IS_ENABLED: true},
74
89
  moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
75
90
  coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
91
+ presenter: {HINT_5: true},
92
+ panelist: {HINT_6: true},
93
+ attendee: {HINT_7: true},
76
94
  userDisplayHints: ['VOIP_IS_ENABLED', 'HINT_1', 'HINT_2', 'LOWER_SOMEONE_ELSES_HAND'],
77
95
  });
78
96
 
@@ -80,6 +98,9 @@ describe('plugin-meetings', () => {
80
98
  policy: {HINT_3: true, VOIP_IS_ENABLED: true},
81
99
  moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
82
100
  coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
101
+ presenter: {HINT_5: true},
102
+ panelist: {HINT_6: true},
103
+ attendee: {HINT_7: true},
83
104
  userDisplayHints: [
84
105
  'HINT_3',
85
106
  'VOIP_IS_ENABLED',
@@ -90,10 +111,145 @@ describe('plugin-meetings', () => {
90
111
  });
91
112
  });
92
113
 
114
+ it('only includes interstitial display (ANONYMOUS_DISPLAY_NAMES_ENABLED) hints when user has not joined the meeting', () => {
115
+ const interstitialInfo = {
116
+ displayHints: {
117
+ moderator: ['HINT_1', 'HINT_2'],
118
+ joined: [
119
+ 'HINT_3',
120
+ 'ANONYMOUS_DISPLAY_NAMES_ENABLED',
121
+ ],
122
+ coHost: ['HINT_4'],
123
+ presenter: ['HINT_5'],
124
+ panelist: ['HINT_6'],
125
+ attendee: ['HINT_7'],
126
+ },
127
+ };
128
+
129
+ assert.deepEqual(InfoUtils.parse(interstitialInfo, ['MODERATOR'], false), {
130
+ policy: {HINT_3: true, ANONYMOUS_DISPLAY_NAMES_ENABLED: true},
131
+ moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
132
+ coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
133
+ presenter: {HINT_5: true},
134
+ panelist: {HINT_6: true},
135
+ attendee: {HINT_7: true},
136
+ userDisplayHints: ['ANONYMOUS_DISPLAY_NAMES_ENABLED', 'HINT_1', 'HINT_2', 'LOWER_SOMEONE_ELSES_HAND'],
137
+ });
138
+
139
+ assert.deepEqual(InfoUtils.parse(interstitialInfo, ['MODERATOR'], true), {
140
+ policy: {HINT_3: true, ANONYMOUS_DISPLAY_NAMES_ENABLED: true},
141
+ moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
142
+ coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
143
+ presenter: {HINT_5: true},
144
+ panelist: {HINT_6: true},
145
+ attendee: {HINT_7: true},
146
+ userDisplayHints: [
147
+ 'HINT_3',
148
+ 'ANONYMOUS_DISPLAY_NAMES_ENABLED',
149
+ 'HINT_1',
150
+ 'HINT_2',
151
+ 'LOWER_SOMEONE_ELSES_HAND',
152
+ ],
153
+ });
154
+ });
155
+
156
+ it('includes all interstitial display hints (VOIP_IS_ENABLED and ANONYMOUS_DISPLAY_NAMES_ENABLED) when user has not joined the meeting', () => {
157
+ const interstitialInfo = {
158
+ displayHints: {
159
+ moderator: ['HINT_1', 'HINT_2'],
160
+ joined: [
161
+ 'HINT_3',
162
+ 'VOIP_IS_ENABLED',
163
+ 'ANONYMOUS_DISPLAY_NAMES_ENABLED',
164
+ 'HINT_NON_INTERSTITIAL',
165
+ ],
166
+ coHost: ['HINT_4'],
167
+ presenter: ['HINT_5'],
168
+ panelist: ['HINT_6'],
169
+ attendee: ['HINT_7'],
170
+ },
171
+ };
172
+
173
+ assert.deepEqual(InfoUtils.parse(interstitialInfo, [], false), {
174
+ policy: {
175
+ HINT_3: true,
176
+ VOIP_IS_ENABLED: true,
177
+ ANONYMOUS_DISPLAY_NAMES_ENABLED: true,
178
+ HINT_NON_INTERSTITIAL: true,
179
+ },
180
+ moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
181
+ coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
182
+ presenter: {HINT_5: true},
183
+ panelist: {HINT_6: true},
184
+ attendee: {HINT_7: true},
185
+ userDisplayHints: ['VOIP_IS_ENABLED', 'ANONYMOUS_DISPLAY_NAMES_ENABLED'],
186
+ });
187
+
188
+ assert.deepEqual(InfoUtils.parse(interstitialInfo, ['MODERATOR'], false), {
189
+ policy: {
190
+ HINT_3: true,
191
+ VOIP_IS_ENABLED: true,
192
+ ANONYMOUS_DISPLAY_NAMES_ENABLED: true,
193
+ HINT_NON_INTERSTITIAL: true,
194
+ },
195
+ moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
196
+ coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
197
+ presenter: {HINT_5: true},
198
+ panelist: {HINT_6: true},
199
+ attendee: {HINT_7: true},
200
+ userDisplayHints: [
201
+ 'VOIP_IS_ENABLED',
202
+ 'ANONYMOUS_DISPLAY_NAMES_ENABLED',
203
+ 'HINT_1',
204
+ 'HINT_2',
205
+ 'LOWER_SOMEONE_ELSES_HAND',
206
+ ],
207
+ });
208
+ });
209
+
210
+ it('merges presenter hints when user has PRESENTER role', () => {
211
+ assert.deepEqual(InfoUtils.parse(info, ['PRESENTER']), {
212
+ policy: {HINT_3: true, VOIP_IS_ENABLED: true},
213
+ moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
214
+ coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
215
+ presenter: {HINT_5: true},
216
+ panelist: {HINT_6: true},
217
+ attendee: {HINT_7: true},
218
+ userDisplayHints: ['HINT_3', 'VOIP_IS_ENABLED', 'HINT_5'],
219
+ });
220
+ });
221
+
222
+ it('merges panelist hints when user has PANELIST role', () => {
223
+ assert.deepEqual(InfoUtils.parse(info, ['PANELIST']), {
224
+ policy: {HINT_3: true, VOIP_IS_ENABLED: true},
225
+ moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
226
+ coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
227
+ presenter: {HINT_5: true},
228
+ panelist: {HINT_6: true},
229
+ attendee: {HINT_7: true},
230
+ userDisplayHints: ['HINT_3', 'VOIP_IS_ENABLED', 'HINT_6'],
231
+ });
232
+ });
233
+
234
+ it('merges attendee hints when user has ATTENDEE role', () => {
235
+ assert.deepEqual(InfoUtils.parse(info, ['ATTENDEE']), {
236
+ policy: {HINT_3: true, VOIP_IS_ENABLED: true},
237
+ moderator: {HINT_1: true, HINT_2: true, LOWER_SOMEONE_ELSES_HAND: true},
238
+ coHost: {HINT_4: true, LOWER_SOMEONE_ELSES_HAND: true},
239
+ presenter: {HINT_5: true},
240
+ panelist: {HINT_6: true},
241
+ attendee: {HINT_7: true},
242
+ userDisplayHints: ['HINT_3', 'VOIP_IS_ENABLED', 'HINT_7'],
243
+ });
244
+ });
245
+
93
246
  it('only adds datachannel url when present', () => {
94
247
  assert.deepEqual(InfoUtils.parse({datachannelUrl: 'some url'}, []), {
95
248
  coHost: {LOWER_SOMEONE_ELSES_HAND: true},
96
249
  moderator: {LOWER_SOMEONE_ELSES_HAND: true},
250
+ presenter: {},
251
+ panelist: {},
252
+ attendee: {},
97
253
  datachannelUrl: 'some url',
98
254
  policy: {},
99
255
  userDisplayHints: [],
@@ -102,6 +258,9 @@ describe('plugin-meetings', () => {
102
258
  assert.deepEqual(InfoUtils.parse({}, []), {
103
259
  coHost: {LOWER_SOMEONE_ELSES_HAND: true},
104
260
  moderator: {LOWER_SOMEONE_ELSES_HAND: true},
261
+ presenter: {},
262
+ panelist: {},
263
+ attendee: {},
105
264
  policy: {},
106
265
  userDisplayHints: [],
107
266
  });
@@ -171,6 +330,30 @@ describe('plugin-meetings', () => {
171
330
  LOWER_SOMEONE_ELSES_HAND: true,
172
331
  });
173
332
  });
333
+
334
+ it('parsePresenter calls parseDisplayHintSection correctly and returns the result', () => {
335
+ const result = InfoUtils.parsePresenter(info);
336
+
337
+ assert.calledWith(parseDisplayHintSectionSpy, info, 'presenter');
338
+
339
+ assert.deepEqual(result, parseDisplayHintSectionSpy.firstCall.returnValue);
340
+ });
341
+
342
+ it('parsePanelist calls parseDisplayHintSection correctly and returns the result', () => {
343
+ const result = InfoUtils.parsePanelist(info);
344
+
345
+ assert.calledWith(parseDisplayHintSectionSpy, info, 'panelist');
346
+
347
+ assert.deepEqual(result, parseDisplayHintSectionSpy.firstCall.returnValue);
348
+ });
349
+
350
+ it('parseAttendee calls parseDisplayHintSection correctly and returns the result', () => {
351
+ const result = InfoUtils.parseAttendee(info);
352
+
353
+ assert.calledWith(parseDisplayHintSectionSpy, info, 'attendee');
354
+
355
+ assert.deepEqual(result, parseDisplayHintSectionSpy.firstCall.returnValue);
356
+ });
174
357
  });
175
358
  });
176
359
  });
@@ -295,6 +295,7 @@ describe('createMediaConnection', () => {
295
295
  bundlePolicy: 'max-bundle',
296
296
  disableAudioMainDtx: false,
297
297
  disableAudioTwcc: false,
298
+ enableAV1SlidesSupport: false,
298
299
  },
299
300
  'meeting id'
300
301
  );
@@ -322,6 +323,26 @@ describe('createMediaConnection', () => {
322
323
  assert.calledOnce(rtcMetrics.sendMetricsInQueue);
323
324
  });
324
325
 
326
+ it('passes enableAV1SlidesSupport: true to MultistreamRoapMediaConnection when enableAv1SlidesSupport is set', () => {
327
+ const multistreamRoapMediaConnectionConstructorStub = sinon
328
+ .stub(InternalMediaCoreModule, 'MultistreamRoapMediaConnection')
329
+ .returns(fakeRoapMediaConnection);
330
+
331
+ Media.createMediaConnection(true, 'some debug id', 'meeting id', {
332
+ enableAv1SlidesSupport: true,
333
+ });
334
+ assert.calledOnce(multistreamRoapMediaConnectionConstructorStub);
335
+ assert.calledWith(
336
+ multistreamRoapMediaConnectionConstructorStub,
337
+ sinon.match({
338
+ iceServers: [],
339
+ disableAudioTwcc: true,
340
+ enableAV1SlidesSupport: true,
341
+ }),
342
+ 'meeting id'
343
+ );
344
+ });
345
+
325
346
  it('multistream non-firefox does not care about stopIceGatheringAfterFirstRelayCandidate', () => {
326
347
  const multistreamRoapMediaConnectionConstructorStub = sinon
327
348
  .stub(InternalMediaCoreModule, 'MultistreamRoapMediaConnection')
@@ -336,6 +357,7 @@ describe('createMediaConnection', () => {
336
357
  {
337
358
  iceServers: [],
338
359
  disableAudioTwcc: true,
360
+ enableAV1SlidesSupport: false,
339
361
  },
340
362
  'meeting id'
341
363
  );
@@ -359,6 +381,7 @@ describe('createMediaConnection', () => {
359
381
  doFullIce: true,
360
382
  stopIceGatheringAfterFirstRelayCandidate: true,
361
383
  disableAudioTwcc: true,
384
+ enableAV1SlidesSupport: false,
362
385
  },
363
386
  'meeting id'
364
387
  );
@@ -382,6 +405,7 @@ describe('createMediaConnection', () => {
382
405
  doFullIce: true,
383
406
  stopIceGatheringAfterFirstRelayCandidate: false,
384
407
  disableAudioTwcc: true,
408
+ enableAV1SlidesSupport: false,
385
409
  },
386
410
  'meeting id'
387
411
  );
@@ -418,6 +442,7 @@ describe('createMediaConnection', () => {
418
442
  {
419
443
  iceServers: [],
420
444
  disableAudioTwcc: true,
445
+ enableAV1SlidesSupport: false,
421
446
  },
422
447
  'meeting id'
423
448
  );
@@ -448,6 +473,7 @@ describe('createMediaConnection', () => {
448
473
  {
449
474
  iceServers: [],
450
475
  disableAudioTwcc: true,
476
+ enableAV1SlidesSupport: false,
451
477
  },
452
478
  'meeting id'
453
479
  );
@@ -477,6 +503,7 @@ describe('createMediaConnection', () => {
477
503
  {
478
504
  iceServers: [],
479
505
  disableAudioTwcc: true,
506
+ enableAV1SlidesSupport: false,
480
507
  },
481
508
  'meeting id'
482
509
  );
@@ -505,6 +532,7 @@ describe('createMediaConnection', () => {
505
532
  {
506
533
  iceServers: [],
507
534
  disableAudioTwcc: true,
535
+ enableAV1SlidesSupport: false,
508
536
  },
509
537
  'meeting id'
510
538
  );
@@ -591,6 +619,7 @@ describe('createMediaConnection', () => {
591
619
  {
592
620
  iceServers: [],
593
621
  disableAudioTwcc: true,
622
+ enableAV1SlidesSupport: false,
594
623
  enableInboundAudioLevelMonitoring: true,
595
624
  }
596
625
  );
@@ -602,6 +631,7 @@ describe('createMediaConnection', () => {
602
631
  {
603
632
  iceServers: [],
604
633
  disableAudioTwcc: true,
634
+ enableAV1SlidesSupport: false,
605
635
  enableInboundAudioLevelMonitoring: true,
606
636
  }
607
637
  );
@@ -613,6 +643,7 @@ describe('createMediaConnection', () => {
613
643
  {
614
644
  iceServers: [],
615
645
  disableAudioTwcc: true,
646
+ enableAV1SlidesSupport: false,
616
647
  doFullIce: true,
617
648
  stopIceGatheringAfterFirstRelayCandidate: undefined,
618
649
  }
@@ -114,6 +114,8 @@ describe('plugin-meetings', () => {
114
114
  canDisablePollingQA: null,
115
115
  canAttendeeRequestAiAssistantEnabled: null,
116
116
  isAttendeeRequestAiAssistantDeclinedAll: null,
117
+ isAnonymizeDisplayNamesEnabled: null,
118
+ canViewTheParticipantList: null,
117
119
 
118
120
  ...expected,
119
121
  };
@@ -234,6 +236,8 @@ describe('plugin-meetings', () => {
234
236
  'canDisablePollingQA',
235
237
  'canAttendeeRequestAiAssistantEnabled',
236
238
  'isAttendeeRequestAiAssistantDeclinedAll',
239
+ 'isAnonymizeDisplayNamesEnabled',
240
+ 'canViewTheParticipantList',
237
241
  ].forEach((key) => {
238
242
  it(`get and set for ${key} work as expected`, () => {
239
243
  const inMeetingActions = new InMeetingActions();