@webex/plugin-meetings 3.6.0 → 3.7.0-ipv6-multi-turn-urls.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/README.md +2 -1
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/common/errors/join-webinar-error.js +50 -0
  5. package/dist/common/errors/join-webinar-error.js.map +1 -0
  6. package/dist/config.js +4 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.js +54 -4
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controls-options-manager/enums.js +1 -0
  11. package/dist/controls-options-manager/enums.js.map +1 -1
  12. package/dist/controls-options-manager/index.js +10 -3
  13. package/dist/controls-options-manager/index.js.map +1 -1
  14. package/dist/controls-options-manager/types.js.map +1 -1
  15. package/dist/controls-options-manager/util.js +12 -0
  16. package/dist/controls-options-manager/util.js.map +1 -1
  17. package/dist/index.js +7 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/interpretation/index.js +1 -1
  20. package/dist/interpretation/siLanguage.js +1 -1
  21. package/dist/locus-info/controlsUtils.js +28 -4
  22. package/dist/locus-info/controlsUtils.js.map +1 -1
  23. package/dist/locus-info/fullState.js +2 -1
  24. package/dist/locus-info/fullState.js.map +1 -1
  25. package/dist/locus-info/index.js +61 -3
  26. package/dist/locus-info/index.js.map +1 -1
  27. package/dist/locus-info/parser.js +5 -1
  28. package/dist/locus-info/parser.js.map +1 -1
  29. package/dist/media/index.js +29 -1
  30. package/dist/media/index.js.map +1 -1
  31. package/dist/meeting/in-meeting-actions.js +29 -1
  32. package/dist/meeting/in-meeting-actions.js.map +1 -1
  33. package/dist/meeting/index.js +807 -540
  34. package/dist/meeting/index.js.map +1 -1
  35. package/dist/meeting/locusMediaRequest.js +2 -6
  36. package/dist/meeting/locusMediaRequest.js.map +1 -1
  37. package/dist/meeting/muteState.js +5 -2
  38. package/dist/meeting/muteState.js.map +1 -1
  39. package/dist/meeting/request.js +21 -29
  40. package/dist/meeting/request.js.map +1 -1
  41. package/dist/meeting/util.js +98 -61
  42. package/dist/meeting/util.js.map +1 -1
  43. package/dist/meeting-info/meeting-info-v2.js +80 -17
  44. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  45. package/dist/meetings/index.js +29 -2
  46. package/dist/meetings/index.js.map +1 -1
  47. package/dist/members/index.js +3 -2
  48. package/dist/members/index.js.map +1 -1
  49. package/dist/members/util.js +13 -7
  50. package/dist/members/util.js.map +1 -1
  51. package/dist/metrics/constants.js +4 -1
  52. package/dist/metrics/constants.js.map +1 -1
  53. package/dist/multistream/remoteMedia.js +34 -15
  54. package/dist/multistream/remoteMedia.js.map +1 -1
  55. package/dist/reachability/clusterReachability.js +12 -15
  56. package/dist/reachability/clusterReachability.js.map +1 -1
  57. package/dist/reachability/index.js +433 -136
  58. package/dist/reachability/index.js.map +1 -1
  59. package/dist/{rtcMetrics/constants.js → reachability/reachability.types.js} +1 -5
  60. package/dist/reachability/reachability.types.js.map +1 -0
  61. package/dist/reachability/request.js +23 -9
  62. package/dist/reachability/request.js.map +1 -1
  63. package/dist/recording-controller/enums.js +8 -4
  64. package/dist/recording-controller/enums.js.map +1 -1
  65. package/dist/recording-controller/index.js +18 -9
  66. package/dist/recording-controller/index.js.map +1 -1
  67. package/dist/recording-controller/util.js +13 -9
  68. package/dist/recording-controller/util.js.map +1 -1
  69. package/dist/roap/index.js +5 -7
  70. package/dist/roap/index.js.map +1 -1
  71. package/dist/roap/request.js +45 -79
  72. package/dist/roap/request.js.map +1 -1
  73. package/dist/roap/turnDiscovery.js +3 -6
  74. package/dist/roap/turnDiscovery.js.map +1 -1
  75. package/dist/{common/errors/parameter.d.ts → types/common/errors/join-webinar-error.d.ts} +4 -5
  76. package/dist/types/config.d.ts +3 -0
  77. package/dist/types/constants.d.ts +43 -0
  78. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  79. package/dist/types/controls-options-manager/index.d.ts +2 -1
  80. package/dist/types/controls-options-manager/types.d.ts +2 -0
  81. package/dist/types/index.d.ts +2 -1
  82. package/dist/types/locus-info/index.d.ts +9 -0
  83. package/dist/types/meeting/in-meeting-actions.d.ts +28 -0
  84. package/dist/types/meeting/index.d.ts +34 -3
  85. package/dist/types/meeting/locusMediaRequest.d.ts +2 -3
  86. package/dist/types/meeting/muteState.d.ts +2 -1
  87. package/dist/types/meeting/request.d.ts +2 -2
  88. package/dist/types/meeting/util.d.ts +2 -2
  89. package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
  90. package/dist/types/meetings/index.d.ts +13 -1
  91. package/dist/types/members/index.d.ts +2 -1
  92. package/dist/types/members/util.d.ts +5 -1
  93. package/dist/types/metrics/constants.d.ts +3 -0
  94. package/dist/types/multistream/remoteMedia.d.ts +1 -0
  95. package/dist/types/reachability/clusterReachability.d.ts +1 -10
  96. package/dist/types/reachability/index.d.ts +74 -35
  97. package/dist/types/reachability/reachability.types.d.ts +64 -0
  98. package/dist/types/reachability/request.d.ts +5 -1
  99. package/dist/types/recording-controller/enums.d.ts +5 -2
  100. package/dist/types/recording-controller/index.d.ts +1 -0
  101. package/dist/types/recording-controller/util.d.ts +2 -1
  102. package/dist/types/roap/request.d.ts +1 -13
  103. package/dist/webinar/index.js +382 -19
  104. package/dist/webinar/index.js.map +1 -1
  105. package/package.json +22 -22
  106. package/src/common/errors/join-webinar-error.ts +24 -0
  107. package/src/config.ts +3 -0
  108. package/src/constants.ts +52 -0
  109. package/src/controls-options-manager/enums.ts +1 -0
  110. package/src/controls-options-manager/index.ts +19 -2
  111. package/src/controls-options-manager/types.ts +2 -0
  112. package/src/controls-options-manager/util.ts +12 -0
  113. package/src/index.ts +2 -0
  114. package/src/locus-info/controlsUtils.ts +46 -2
  115. package/src/locus-info/fullState.ts +1 -0
  116. package/src/locus-info/index.ts +60 -0
  117. package/src/locus-info/parser.ts +8 -1
  118. package/src/media/index.ts +15 -0
  119. package/src/meeting/in-meeting-actions.ts +58 -0
  120. package/src/meeting/index.ts +268 -32
  121. package/src/meeting/locusMediaRequest.ts +4 -8
  122. package/src/meeting/muteState.ts +6 -2
  123. package/src/meeting/request.ts +4 -11
  124. package/src/meeting/util.ts +31 -6
  125. package/src/meeting-info/meeting-info-v2.ts +63 -0
  126. package/src/meetings/index.ts +74 -40
  127. package/src/members/index.ts +4 -2
  128. package/src/members/util.ts +4 -1
  129. package/src/metrics/constants.ts +3 -0
  130. package/src/multistream/remoteMedia.ts +33 -15
  131. package/src/reachability/clusterReachability.ts +5 -15
  132. package/src/reachability/index.ts +285 -77
  133. package/src/reachability/reachability.types.ts +85 -0
  134. package/src/reachability/request.ts +55 -30
  135. package/src/recording-controller/enums.ts +5 -2
  136. package/src/recording-controller/index.ts +17 -4
  137. package/src/recording-controller/util.ts +20 -5
  138. package/src/roap/index.ts +4 -5
  139. package/src/roap/request.ts +32 -44
  140. package/src/roap/turnDiscovery.ts +2 -4
  141. package/src/webinar/index.ts +223 -17
  142. package/test/unit/spec/controls-options-manager/index.js +56 -32
  143. package/test/unit/spec/controls-options-manager/util.js +44 -0
  144. package/test/unit/spec/locus-info/controlsUtils.js +80 -4
  145. package/test/unit/spec/locus-info/index.js +88 -2
  146. package/test/unit/spec/meeting/in-meeting-actions.ts +31 -1
  147. package/test/unit/spec/meeting/index.js +407 -82
  148. package/test/unit/spec/meeting/locusMediaRequest.ts +18 -11
  149. package/test/unit/spec/meeting/muteState.js +8 -4
  150. package/test/unit/spec/meeting/request.js +3 -26
  151. package/test/unit/spec/meeting/utils.js +71 -14
  152. package/test/unit/spec/meeting-info/meetinginfov2.js +42 -0
  153. package/test/unit/spec/meetings/index.js +41 -6
  154. package/test/unit/spec/members/index.js +25 -2
  155. package/test/unit/spec/members/request.js +37 -3
  156. package/test/unit/spec/members/utils.js +110 -1
  157. package/test/unit/spec/multistream/remoteMedia.ts +27 -9
  158. package/test/unit/spec/reachability/clusterReachability.ts +7 -0
  159. package/test/unit/spec/reachability/index.ts +265 -1
  160. package/test/unit/spec/reachability/request.js +56 -15
  161. package/test/unit/spec/recording-controller/index.js +61 -5
  162. package/test/unit/spec/recording-controller/util.js +39 -3
  163. package/test/unit/spec/roap/index.ts +1 -1
  164. package/test/unit/spec/roap/request.ts +51 -109
  165. package/test/unit/spec/roap/turnDiscovery.ts +202 -147
  166. package/test/unit/spec/webinar/index.ts +443 -14
  167. package/dist/annotation/annotation.types.d.ts +0 -42
  168. package/dist/annotation/constants.d.ts +0 -31
  169. package/dist/annotation/index.d.ts +0 -117
  170. package/dist/breakouts/breakout.d.ts +0 -8
  171. package/dist/breakouts/collection.d.ts +0 -5
  172. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  173. package/dist/breakouts/events.d.ts +0 -8
  174. package/dist/breakouts/index.d.ts +0 -5
  175. package/dist/breakouts/request.d.ts +0 -22
  176. package/dist/breakouts/utils.d.ts +0 -15
  177. package/dist/common/browser-detection.d.ts +0 -9
  178. package/dist/common/collection.d.ts +0 -48
  179. package/dist/common/config.d.ts +0 -2
  180. package/dist/common/errors/captcha-error.d.ts +0 -15
  181. package/dist/common/errors/intent-to-join.d.ts +0 -16
  182. package/dist/common/errors/join-meeting.d.ts +0 -17
  183. package/dist/common/errors/media.d.ts +0 -15
  184. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  185. package/dist/common/errors/password-error.d.ts +0 -15
  186. package/dist/common/errors/permission.d.ts +0 -14
  187. package/dist/common/errors/reclaim-host-role-error.js +0 -149
  188. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  189. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  190. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  191. package/dist/common/errors/reconnection-in-progress.js +0 -33
  192. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  193. package/dist/common/errors/reconnection.d.ts +0 -15
  194. package/dist/common/errors/stats.d.ts +0 -15
  195. package/dist/common/errors/webex-errors.d.ts +0 -93
  196. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  197. package/dist/common/events/events-scope.d.ts +0 -17
  198. package/dist/common/events/events.d.ts +0 -12
  199. package/dist/common/events/trigger-proxy.d.ts +0 -2
  200. package/dist/common/events/util.d.ts +0 -2
  201. package/dist/common/logs/logger-config.d.ts +0 -2
  202. package/dist/common/logs/logger-proxy.d.ts +0 -2
  203. package/dist/common/logs/request.d.ts +0 -36
  204. package/dist/common/queue.d.ts +0 -34
  205. package/dist/config.d.ts +0 -72
  206. package/dist/constants.d.ts +0 -1088
  207. package/dist/controls-options-manager/constants.d.ts +0 -4
  208. package/dist/controls-options-manager/enums.d.ts +0 -15
  209. package/dist/controls-options-manager/index.d.ts +0 -136
  210. package/dist/controls-options-manager/types.d.ts +0 -43
  211. package/dist/controls-options-manager/util.d.ts +0 -1
  212. package/dist/index.d.ts +0 -7
  213. package/dist/interceptors/index.d.ts +0 -2
  214. package/dist/interceptors/locusRetry.d.ts +0 -27
  215. package/dist/interpretation/collection.d.ts +0 -5
  216. package/dist/interpretation/index.d.ts +0 -5
  217. package/dist/interpretation/siLanguage.d.ts +0 -5
  218. package/dist/locus-info/controlsUtils.d.ts +0 -2
  219. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  220. package/dist/locus-info/fullState.d.ts +0 -2
  221. package/dist/locus-info/hostUtils.d.ts +0 -2
  222. package/dist/locus-info/index.d.ts +0 -322
  223. package/dist/locus-info/infoUtils.d.ts +0 -2
  224. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  225. package/dist/locus-info/parser.d.ts +0 -272
  226. package/dist/locus-info/selfUtils.d.ts +0 -2
  227. package/dist/media/index.d.ts +0 -34
  228. package/dist/media/properties.d.ts +0 -93
  229. package/dist/media/util.d.ts +0 -2
  230. package/dist/mediaQualityMetrics/config.d.ts +0 -241
  231. package/dist/mediaQualityMetrics/config.js +0 -502
  232. package/dist/mediaQualityMetrics/config.js.map +0 -1
  233. package/dist/meeting/effectsState.js +0 -260
  234. package/dist/meeting/effectsState.js.map +0 -1
  235. package/dist/meeting/in-meeting-actions.d.ts +0 -167
  236. package/dist/meeting/index.d.ts +0 -1825
  237. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  238. package/dist/meeting/muteState.d.ts +0 -178
  239. package/dist/meeting/request.d.ts +0 -295
  240. package/dist/meeting/request.type.d.ts +0 -11
  241. package/dist/meeting/state.d.ts +0 -9
  242. package/dist/meeting/util.d.ts +0 -119
  243. package/dist/meeting/voicea-meeting.d.ts +0 -16
  244. package/dist/meeting-info/collection.d.ts +0 -20
  245. package/dist/meeting-info/index.d.ts +0 -69
  246. package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
  247. package/dist/meeting-info/request.d.ts +0 -22
  248. package/dist/meeting-info/util.d.ts +0 -2
  249. package/dist/meeting-info/utilv2.d.ts +0 -2
  250. package/dist/meetings/collection.d.ts +0 -40
  251. package/dist/meetings/index.d.ts +0 -390
  252. package/dist/meetings/meetings.types.d.ts +0 -4
  253. package/dist/meetings/request.d.ts +0 -27
  254. package/dist/meetings/util.d.ts +0 -18
  255. package/dist/member/index.d.ts +0 -160
  256. package/dist/member/member.types.js +0 -17
  257. package/dist/member/member.types.js.map +0 -1
  258. package/dist/member/types.d.ts +0 -32
  259. package/dist/member/util.d.ts +0 -2
  260. package/dist/members/collection.d.ts +0 -29
  261. package/dist/members/index.d.ts +0 -353
  262. package/dist/members/request.d.ts +0 -114
  263. package/dist/members/types.d.ts +0 -25
  264. package/dist/members/util.d.ts +0 -215
  265. package/dist/metrics/config.js +0 -276
  266. package/dist/metrics/config.js.map +0 -1
  267. package/dist/metrics/constants.d.ts +0 -70
  268. package/dist/metrics/index.d.ts +0 -45
  269. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  270. package/dist/multistream/receiveSlot.d.ts +0 -68
  271. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  272. package/dist/multistream/remoteMedia.d.ts +0 -72
  273. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  274. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  275. package/dist/multistream/sendSlotManager.d.ts +0 -69
  276. package/dist/networkQualityMonitor/index.d.ts +0 -70
  277. package/dist/networkQualityMonitor/index.js +0 -221
  278. package/dist/networkQualityMonitor/index.js.map +0 -1
  279. package/dist/peer-connection-manager/index.js +0 -671
  280. package/dist/peer-connection-manager/index.js.map +0 -1
  281. package/dist/peer-connection-manager/util.js +0 -109
  282. package/dist/peer-connection-manager/util.js.map +0 -1
  283. package/dist/personal-meeting-room/index.d.ts +0 -47
  284. package/dist/personal-meeting-room/request.d.ts +0 -14
  285. package/dist/personal-meeting-room/util.d.ts +0 -2
  286. package/dist/reachability/clusterReachability.d.ts +0 -109
  287. package/dist/reachability/index.d.ts +0 -105
  288. package/dist/reachability/request.d.ts +0 -39
  289. package/dist/reachability/util.d.ts +0 -8
  290. package/dist/reactions/constants.d.ts +0 -3
  291. package/dist/reactions/reactions.d.ts +0 -4
  292. package/dist/reactions/reactions.type.d.ts +0 -52
  293. package/dist/reconnection-manager/index.d.ts +0 -136
  294. package/dist/recording-controller/enums.d.ts +0 -7
  295. package/dist/recording-controller/index.d.ts +0 -207
  296. package/dist/recording-controller/util.d.ts +0 -14
  297. package/dist/roap/collection.js +0 -62
  298. package/dist/roap/collection.js.map +0 -1
  299. package/dist/roap/handler.js +0 -275
  300. package/dist/roap/handler.js.map +0 -1
  301. package/dist/roap/index.d.ts +0 -86
  302. package/dist/roap/request.d.ts +0 -39
  303. package/dist/roap/state.js +0 -126
  304. package/dist/roap/state.js.map +0 -1
  305. package/dist/roap/turnDiscovery.d.ts +0 -155
  306. package/dist/roap/util.js +0 -75
  307. package/dist/roap/util.js.map +0 -1
  308. package/dist/rtcMetrics/constants.d.ts +0 -4
  309. package/dist/rtcMetrics/constants.js.map +0 -1
  310. package/dist/rtcMetrics/index.d.ts +0 -61
  311. package/dist/rtcMetrics/index.js +0 -197
  312. package/dist/rtcMetrics/index.js.map +0 -1
  313. package/dist/statsAnalyzer/global.d.ts +0 -36
  314. package/dist/statsAnalyzer/global.js +0 -126
  315. package/dist/statsAnalyzer/global.js.map +0 -1
  316. package/dist/statsAnalyzer/index.d.ts +0 -217
  317. package/dist/statsAnalyzer/index.js +0 -1013
  318. package/dist/statsAnalyzer/index.js.map +0 -1
  319. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
  320. package/dist/statsAnalyzer/mqaUtil.js +0 -179
  321. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  322. package/dist/transcription/index.d.ts +0 -64
  323. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  324. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  325. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  326. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  327. package/dist/types/rtcMetrics/index.d.ts +0 -71
  328. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  329. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  330. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  331. package/dist/webinar/collection.d.ts +0 -16
  332. package/dist/webinar/index.d.ts +0 -5
@@ -2,6 +2,7 @@ import {assert, expect} from '@webex/test-helper-chai';
2
2
  import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
3
3
  import Webinar from '@webex/plugin-meetings/src/webinar';
4
4
  import MockWebex from '@webex/test-helper-mock-webex';
5
+ import uuid from 'uuid';
5
6
  import sinon from 'sinon';
6
7
 
7
8
  describe('plugin-meetings', () => {
@@ -9,18 +10,28 @@ describe('plugin-meetings', () => {
9
10
 
10
11
  let webex;
11
12
  let webinar;
13
+ let uuidStub;
14
+ let getUserTokenStub;
12
15
 
13
16
  beforeEach(() => {
14
17
  // @ts-ignore
18
+ getUserTokenStub = sinon.stub().resolves('test-token');
19
+ uuidStub = sinon.stub(uuid,'v4').returns('test-uuid');
15
20
  webex = new MockWebex({});
16
21
  webex.internal.mercury.on = sinon.stub();
17
22
  webinar = new Webinar({}, {parent: webex});
18
23
  webinar.locusUrl = 'locusUrl';
24
+ webinar.webcastInstanceUrl = 'webcastInstanceUrl';
19
25
  webex.request = sinon.stub().returns(Promise.resolve('REQUEST_RETURN_VALUE'));
20
26
  webex.meetings = {};
27
+ webex.credentials.getUserToken = getUserTokenStub;
21
28
  webex.meetings.getMeetingByType = sinon.stub();
22
29
  });
23
30
 
31
+ afterEach(() => {
32
+ sinon.restore();
33
+ });
34
+
24
35
  describe('#locusUrlUpdate', () => {
25
36
  it('sets the locus url', () => {
26
37
  webinar.locusUrlUpdate('newUrl');
@@ -29,32 +40,450 @@ describe('plugin-meetings', () => {
29
40
  });
30
41
  });
31
42
 
32
- describe('#webcastUrlUpdate', () => {
33
- it('sets the webcast url', () => {
34
- webinar.webcastUrlUpdate('newUrl');
43
+ describe('#updateWebcastUrl', () => {
44
+ it('sets the webcast instance url', () => {
45
+ webinar.updateWebcastUrl({resources: {webcastInstance: {url:'newUrl'}}});
35
46
 
36
- assert.equal(webinar.webcastUrl, 'newUrl');
47
+ assert.equal(webinar.webcastInstanceUrl, 'newUrl');
37
48
  });
38
49
  });
39
50
 
40
- describe('#webinarAttendeesSearchingUrlUpdate', () => {
41
- it('sets the webinarAttendeesSearching url', () => {
42
- webinar.webinarAttendeesSearchingUrlUpdate('newUrl');
43
51
 
44
- assert.equal(webinar.webinarAttendeesSearchingUrl, 'newUrl');
52
+ describe('#updateCanManageWebcast', () => {
53
+ it('sets the webcast instance url when valid', () => {
54
+ webinar.updateWebcastUrl({resources: {webcastInstance: {url:'newUrl'}}});
55
+ assert.equal(webinar.webcastInstanceUrl, 'newUrl', 'webcast instance URL should be updated');
56
+ });
57
+
58
+ it('handles missing resources gracefully', () => {
59
+ webinar.updateWebcastUrl({});
60
+ assert.isUndefined(webinar.webcastInstanceUrl, 'webcast instance URL should be undefined');
61
+ });
62
+
63
+ it('handles missing webcastInstance gracefully', () => {
64
+ webinar.updateWebcastUrl({resources: {}});
65
+ assert.isUndefined(webinar.webcastInstanceUrl, 'webcast instance URL should be undefined');
66
+ });
67
+
68
+ it('handles missing URL gracefully', () => {
69
+ webinar.updateWebcastUrl({resources: {webcastInstance: {}}});
70
+ assert.isUndefined(webinar.webcastInstanceUrl, 'webcast instance URL should be undefined');
71
+ });
72
+ });
73
+
74
+ describe('#updateRoleChanged', () => {
75
+ it('updates roles when promoted from attendee to panelist', () => {
76
+ const payload = {
77
+ oldRoles: ['ATTENDEE'],
78
+ newRoles: ['PANELIST']
79
+ };
80
+
81
+ const result = webinar.updateRoleChanged(payload);
82
+
83
+ assert.equal(webinar.selfIsPanelist, true, 'self should be a panelist');
84
+ assert.equal(webinar.selfIsAttendee, false, 'self should not be an attendee');
85
+ assert.equal(webinar.canManageWebcast, false, 'self should not have manage webcast capability');
86
+ assert.equal(result.isPromoted, true, 'should indicate promotion');
87
+ assert.equal(result.isDemoted, false, 'should not indicate demotion');
88
+ });
89
+
90
+ it('updates roles when demoted from panelist to attendee', () => {
91
+ const payload = {
92
+ oldRoles: ['PANELIST'],
93
+ newRoles: ['ATTENDEE']
94
+ };
95
+
96
+ const result = webinar.updateRoleChanged(payload);
97
+
98
+ assert.equal(webinar.selfIsPanelist, false, 'self should not be a panelist');
99
+ assert.equal(webinar.selfIsAttendee, true, 'self should be an attendee');
100
+ assert.equal(webinar.canManageWebcast, false, 'self should not have manage webcast capability');
101
+ assert.equal(result.isPromoted, false, 'should not indicate promotion');
102
+ assert.equal(result.isDemoted, true, 'should indicate demotion');
103
+ });
104
+
105
+ it('updates roles when promoted to moderator', () => {
106
+ const payload = {
107
+ oldRoles: ['PANELIST'],
108
+ newRoles: ['MODERATOR']
109
+ };
110
+
111
+ const result = webinar.updateRoleChanged(payload);
112
+
113
+ assert.equal(webinar.selfIsPanelist, false, 'self should not be a panelist');
114
+ assert.equal(webinar.selfIsAttendee, false, 'self should not be an attendee');
115
+ assert.equal(webinar.canManageWebcast, true, 'self should have manage webcast capability');
116
+ assert.equal(result.isPromoted, false, 'should not indicate promotion');
117
+ assert.equal(result.isDemoted, false, 'should not indicate demotion');
118
+ });
119
+
120
+ it('updates roles when unchanged (remains as panelist)', () => {
121
+ const payload = {
122
+ oldRoles: ['PANELIST'],
123
+ newRoles: ['PANELIST']
124
+ };
125
+
126
+ const result = webinar.updateRoleChanged(payload);
127
+
128
+ assert.equal(webinar.selfIsPanelist, true, 'self should remain a panelist');
129
+ assert.equal(webinar.selfIsAttendee, false, 'self should not be an attendee');
130
+ assert.equal(webinar.canManageWebcast, false, 'self should not have manage webcast capability');
131
+ assert.equal(result.isPromoted, false, 'should not indicate promotion');
132
+ assert.equal(result.isDemoted, false, 'should not indicate demotion');
133
+ });
134
+ });
135
+
136
+ describe("#setPracticeSessionState", () => {
137
+ [true, false].forEach((enabled) => {
138
+ it(`sends a PATCH request to ${enabled ? "enable" : "disable"} the practice session`, async () => {
139
+ const result = await webinar.setPracticeSessionState(enabled);
140
+ assert.calledOnce(webex.request);
141
+ assert.calledWith(webex.request, {
142
+ method: "PATCH",
143
+ uri: `${webinar.locusUrl}/controls`,
144
+ body: {
145
+ practiceSession: { enabled }
146
+ }
45
147
  });
148
+ assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
149
+ });
46
150
  });
47
151
 
48
- describe('#updateCanManageWebcast', () => {
49
- it('update canManageWebcast', () => {
50
- webinar.updateCanManageWebcast(true);
152
+ it('handles API call failures gracefully', async () => {
153
+ webex.request.rejects(new Error('API_ERROR'));
154
+ const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
155
+
156
+ try {
157
+ await webinar.setPracticeSessionState(true);
158
+ assert.fail('setPracticeSessionState should throw an error');
159
+ } catch (error) {
160
+ assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
161
+ assert.calledOnce(errorLogger);
162
+ assert.calledWith(errorLogger, 'Meeting:webinar#setPracticeSessionState failed', sinon.match.instanceOf(Error));
163
+ }
51
164
 
52
- assert.equal(webinar.canManageWebcast, true);
165
+ errorLogger.restore();
166
+ });
167
+ });
168
+
169
+ describe('#updatePracticeSessionStatus', () => {
170
+ it('sets PS state true', () => {
171
+ webinar.updatePracticeSessionStatus({enabled: true});
53
172
 
54
- webinar.updateCanManageWebcast(false);
173
+ assert.equal(webinar.practiceSessionEnabled, true);
174
+ });
175
+ it('sets PS state true', () => {
176
+ webinar.updatePracticeSessionStatus({enabled: false});
55
177
 
56
- assert.equal(webinar.canManageWebcast, false);
178
+ assert.equal(webinar.practiceSessionEnabled, false);
179
+ });
180
+ });
181
+
182
+ describe("#startWebcast", () => {
183
+ const meeting = {
184
+ locusId: 'locusId',
185
+ correlationId: 'correlationId',
186
+ }
187
+ const layout = {
188
+ videoLayout: 'Prominent',
189
+ contentLayout: 'Prominent',
190
+ syncStageLayout: false,
191
+ syncStageInMeeting: false,
192
+ }
193
+ it(`sends a PUT request to start the webcast`, async () => {
194
+ const result = await webinar.startWebcast(meeting, layout);
195
+ assert.calledOnce(webex.request);
196
+ assert.calledWith(webex.request, {
197
+ method: "PUT",
198
+ uri: `${webinar.webcastInstanceUrl}/streaming`,
199
+ headers: {
200
+ authorization: 'test-token',
201
+ trackingId: 'webex-js-sdk_test-uuid',
202
+ 'Content-Type': 'application/json'
203
+ },
204
+ body: {
205
+ action: 'start',
206
+ meetingInfo: {
207
+ locusId: meeting.locusId,
208
+ correlationId: meeting.correlationId,
209
+ },
210
+ layout,
211
+ }
212
+ });
213
+ assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
214
+ });
215
+
216
+ it('should handle undefined meeting parameter', async () => {
217
+ const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
218
+
219
+ try {
220
+ await webinar.startWebcast(undefined, layout);
221
+ assert.fail('startWebcast should throw an error');
222
+ } catch (error) {
223
+ assert.equal(error.message, 'Meeting parameter does not meet expectations', 'should throw the correct error');
224
+ assert.calledOnce(errorLogger);
225
+ assert.calledWith(errorLogger, `Meeting:webinar#startWebcast failed --> meeting parameter : ${undefined}`);
226
+ } finally {
227
+ errorLogger.restore();
228
+ }
229
+ });
230
+
231
+ it('handles API call failures gracefully', async () => {
232
+ webex.request.rejects(new Error('API_ERROR'));
233
+ const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
234
+
235
+ try {
236
+ await webinar.startWebcast(meeting, layout);
237
+ assert.fail('startWebcast should throw an error');
238
+ } catch (error) {
239
+ assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
240
+ assert.calledOnce(errorLogger);
241
+ assert.calledWith(errorLogger, 'Meeting:webinar#startWebcast failed', sinon.match.instanceOf(Error));
242
+ } finally {
243
+ errorLogger.restore();
244
+ }
245
+ });
246
+ });
247
+
248
+ describe("#stopWebcast", () => {
249
+ it(`sends a PUT request to stop the webcast`, async () => {
250
+ const result = await webinar.stopWebcast();
251
+ assert.calledOnce(webex.request);
252
+ assert.calledWith(webex.request, {
253
+ method: "PUT",
254
+ uri: `${webinar.webcastInstanceUrl}/streaming`,
255
+ headers: {
256
+ authorization: 'test-token',
257
+ trackingId: 'webex-js-sdk_test-uuid',
258
+ 'Content-Type': 'application/json'
259
+ },
260
+ body: {
261
+ action: 'stop',
262
+ }
263
+ });
264
+ assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
265
+ });
266
+
267
+ it('handles API call failures gracefully', async () => {
268
+ webex.request.rejects(new Error('API_ERROR'));
269
+ const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
270
+
271
+ try {
272
+ await webinar.stopWebcast();
273
+ assert.fail('stopWebcast should throw an error');
274
+ } catch (error) {
275
+ assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
276
+ assert.calledOnce(errorLogger);
277
+ assert.calledWith(errorLogger, 'Meeting:webinar#stopWebcast failed', sinon.match.instanceOf(Error));
278
+ } finally {
279
+ errorLogger.restore();
280
+ }
281
+ });
282
+ });
283
+
284
+
285
+ describe("#queryWebcastLayout", () => {
286
+ it(`sends a GET request to query the webcast layout`, async () => {
287
+ const result = await webinar.queryWebcastLayout();
288
+ assert.calledOnce(webex.request);
289
+ assert.calledWith(webex.request, {
290
+ method: "GET",
291
+ uri: `${webinar.webcastInstanceUrl}/layout`,
292
+ headers: {
293
+ authorization: 'test-token',
294
+ trackingId: 'webex-js-sdk_test-uuid',
295
+ },
296
+ });
297
+ assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
298
+ });
299
+
300
+ it('handles API call failures gracefully', async () => {
301
+ webex.request.rejects(new Error('API_ERROR'));
302
+ const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
303
+
304
+ try {
305
+ await webinar.queryWebcastLayout();
306
+ assert.fail('queryWebcastLayout should throw an error');
307
+ } catch (error) {
308
+ assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
309
+ assert.calledOnce(errorLogger);
310
+ assert.calledWith(errorLogger, 'Meeting:webinar#queryWebcastLayout failed', sinon.match.instanceOf(Error));
311
+ } finally {
312
+ errorLogger.restore();
313
+ }
314
+ });
315
+ });
316
+
317
+ describe("#updateWebcastLayout", () => {
318
+ const layout = {
319
+ videoLayout: 'Prominent',
320
+ contentLayout: 'Prominent',
321
+ syncStageLayout: false,
322
+ syncStageInMeeting: false,
323
+ }
324
+ it(`sends a PUT request to update the webcast layout`, async () => {
325
+ const result = await webinar.updateWebcastLayout(layout);
326
+ assert.calledOnce(webex.request);
327
+ assert.calledWith(webex.request, {
328
+ method: "PUT",
329
+ uri: `${webinar.webcastInstanceUrl}/layout`,
330
+ headers: {
331
+ authorization: 'test-token',
332
+ trackingId: 'webex-js-sdk_test-uuid',
333
+ 'Content-Type': 'application/json'
334
+ },
335
+ body: {
336
+ ...layout
337
+ }
338
+ });
339
+ assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
340
+ });
341
+
342
+ it('handles API call failures gracefully', async () => {
343
+ webex.request.rejects(new Error('API_ERROR'));
344
+ const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
345
+
346
+ try {
347
+ await webinar.updateWebcastLayout(layout);
348
+ assert.fail('updateWebcastLayout should throw an error');
349
+ } catch (error) {
350
+ assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
351
+ assert.calledOnce(errorLogger);
352
+ assert.calledWith(errorLogger, 'Meeting:webinar#updateWebcastLayout failed', sinon.match.instanceOf(Error));
353
+ } finally {
354
+ errorLogger.restore();
355
+ }
356
+ });
357
+ });
358
+
359
+ describe("#searchWebcastAttendees", () => {
360
+ const queryString = 'queryString';
361
+ const specialCharsQuery = 'query@string!';
362
+ const emptyQuery = '';
363
+
364
+ it("sends a GET request to search the webcast attendees", async () => {
365
+ const result = await webinar.searchWebcastAttendees(queryString);
366
+ assert.calledOnce(webex.request);
367
+ assert.calledWith(webex.request, {
368
+ method: "GET",
369
+ uri: `${webinar.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(queryString)}`,
370
+ headers: {
371
+ authorization: 'test-token',
372
+ trackingId: 'webex-js-sdk_test-uuid',
373
+ },
57
374
  });
375
+ assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
376
+ });
377
+
378
+ it('handles API call failures gracefully', async () => {
379
+ webex.request.rejects(new Error('API_ERROR'));
380
+ const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
381
+
382
+ try {
383
+ await webinar.searchWebcastAttendees(queryString);
384
+ assert.fail('searchWebcastAttendees should throw an error');
385
+ } catch (error) {
386
+ assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
387
+ assert.calledOnce(errorLogger);
388
+ assert.calledWith(errorLogger, 'Meeting:webinar#searchWebcastAttendees failed', sinon.match.instanceOf(Error));
389
+ } finally {
390
+ errorLogger.restore();
391
+ }
392
+ });
393
+
394
+ it("should handle empty query string", async () => {
395
+ const result = await webinar.searchWebcastAttendees(emptyQuery);
396
+ assert.calledOnce(webex.request);
397
+ assert.calledWith(webex.request, {
398
+ method: "GET",
399
+ uri: `${webinar.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(emptyQuery)}`,
400
+ headers: {
401
+ authorization: 'test-token',
402
+ trackingId: 'webex-js-sdk_test-uuid',
403
+ },
404
+ });
405
+ assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
406
+ });
407
+
408
+ it("should handle query string with special characters", async () => {
409
+ const result = await webinar.searchWebcastAttendees(specialCharsQuery);
410
+ assert.calledOnce(webex.request);
411
+ assert.calledWith(webex.request, {
412
+ method: "GET",
413
+ uri: `${webinar.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(specialCharsQuery)}`,
414
+ headers: {
415
+ authorization: 'test-token',
416
+ trackingId: 'webex-js-sdk_test-uuid',
417
+ },
418
+ });
419
+ assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
420
+ });
421
+ });
422
+
423
+
424
+ describe("#viewAllWebcastAttendees", () => {
425
+ it(`sends a GET request to view all the webcast attendees`, async () => {
426
+ const result = await webinar.viewAllWebcastAttendees();
427
+ assert.calledOnce(webex.request);
428
+ assert.calledWith(webex.request, {
429
+ method: "GET",
430
+ uri: `${webinar.webcastInstanceUrl}/attendees`,
431
+ headers: {
432
+ authorization: 'test-token',
433
+ trackingId: 'webex-js-sdk_test-uuid',
434
+ },
435
+ });
436
+ assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
437
+ });
438
+
439
+ it('handles API call failures gracefully', async () => {
440
+ webex.request.rejects(new Error('API_ERROR'));
441
+ const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
442
+
443
+ try {
444
+ await webinar.viewAllWebcastAttendees();
445
+ assert.fail('viewAllWebcastAttendees should throw an error');
446
+ } catch (error) {
447
+ assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
448
+ assert.calledOnce(errorLogger);
449
+ assert.calledWith(errorLogger, 'Meeting:webinar#viewAllWebcastAttendees failed', sinon.match.instanceOf(Error));
450
+ } finally {
451
+ errorLogger.restore();
452
+ }
453
+ });
454
+ });
455
+
456
+ describe("#expelWebcastAttendee", () => {
457
+ const participantId = 'participantId'
458
+ it(`sends a DELETE request to expel the webcast attendee`, async () => {
459
+ const result = await webinar.expelWebcastAttendee(participantId);
460
+ assert.calledOnce(webex.request);
461
+ assert.calledWith(webex.request, {
462
+ method: "DELETE",
463
+ uri: `${webinar.webcastInstanceUrl}/attendees/${participantId}`,
464
+ headers: {
465
+ authorization: 'test-token',
466
+ trackingId: 'webex-js-sdk_test-uuid',
467
+ },
468
+ });
469
+ assert.equal(result, "REQUEST_RETURN_VALUE", "should return the resolved value from the request");
470
+ });
471
+
472
+ it('handles API call failures gracefully', async () => {
473
+ webex.request.rejects(new Error('API_ERROR'));
474
+ const errorLogger = sinon.stub(LoggerProxy.logger, 'error');
475
+
476
+ try {
477
+ await webinar.expelWebcastAttendee(participantId);
478
+ assert.fail('expelWebcastAttendee should throw an error');
479
+ } catch (error) {
480
+ assert.equal(error.message, 'API_ERROR', 'should throw the correct error');
481
+ assert.calledOnce(errorLogger);
482
+ assert.calledWith(errorLogger, 'Meeting:webinar#expelWebcastAttendee failed', sinon.match.instanceOf(Error));
483
+ } finally {
484
+ errorLogger.restore();
485
+ }
58
486
  });
487
+ });
59
488
  })
60
489
  })
@@ -1,42 +0,0 @@
1
- import { ANNOTATION_POLICY } from './constants';
2
- /**
3
- * Type for an StrokeData Object
4
- */
5
- type StrokeData = {
6
- deviceId: string;
7
- toUserId: string;
8
- requesterId: string;
9
- content: string;
10
- shareInstanceId: string;
11
- encryptionKeyUrl: string;
12
- version: string;
13
- };
14
- type RequestData = {
15
- toUserId: string;
16
- toDeviceUrl: string;
17
- shareInstanceId: string;
18
- };
19
- type CommandRequestBody = {
20
- actionType: string;
21
- resourceType: string;
22
- shareInstanceId: string;
23
- receivers?: any[];
24
- };
25
- /**
26
- * Type for an annotation Object include annotation version and privilege
27
- */
28
- type AnnotationInfo = {
29
- version: string;
30
- policy: ANNOTATION_POLICY;
31
- };
32
- interface IAnnotationChannel {
33
- acceptRequest: (approval: any) => undefined | Promise<void>;
34
- declineRequest: (approval: any) => undefined | Promise<void>;
35
- closeAnnotation: (requestData: RequestData) => undefined | Promise<void>;
36
- approveAnnotation: (requestData: RequestData) => undefined | Promise<void>;
37
- cancelApproveAnnotation: (requestData: RequestData, approval: any) => undefined | Promise<void>;
38
- sendStrokeData: (strokeData: StrokeData) => void;
39
- approvalUrlUpdate: (approvalUrl: string) => void;
40
- locusUrlUpdate: (locusUrl: string) => void;
41
- }
42
- export type { StrokeData, RequestData, CommandRequestBody, IAnnotationChannel, AnnotationInfo };
@@ -1,31 +0,0 @@
1
- export declare const EVENT_TRIGGERS: {
2
- ANNOTATION_STROKE_DATA: string;
3
- ANNOTATION_COMMAND: string;
4
- };
5
- export declare const ANNOTATION_RESOURCE_TYPE = "AnnotationOnShare";
6
- export declare const ANNOTATION_RELAY_TYPES: {
7
- ANNOTATION_CLIENT: string;
8
- };
9
- export declare const ANNOTATION_STATUS: {
10
- NO_ANNOTATION: string;
11
- RUNNING_ANNOTATION: string;
12
- };
13
- export declare enum ANNOTATION_POLICY {
14
- ANYONE_CAN_ANNOTATE = "AnyoneCanAnnotate",
15
- APPROVAL = "Approval",
16
- ANNOTATION_NOT_ALLOWED = "AnnotationNotAllowed"
17
- }
18
- export declare const ANNOTATION_REQUEST_TYPE: {
19
- ANNOTATION_MESSAGE: string;
20
- };
21
- export declare const enum ANNOTATION_ACTION_TYPE {
22
- REQUESTED = "REQUESTED",
23
- ACCEPTED = "ACCEPTED",
24
- DECLINED = "DECLINED",
25
- OFFERED = "OFFERED",
26
- CANCELED = "CANCELED",
27
- EXPIRED = "EXPIRED",
28
- REVOKED = "REVOKED",
29
- CLOSED = "CLOSED"
30
- }
31
- export declare const ANNOTATION = "annotation";
@@ -1,117 +0,0 @@
1
- import { WebexPlugin } from '@webex/webex-core';
2
- import { StrokeData, RequestData, IAnnotationChannel } from './annotation.types';
3
- /**
4
- * @description Annotation to handle LLM and Mercury message and locus API
5
- * @class
6
- */
7
- declare class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
8
- namespace: string;
9
- private seqNum;
10
- hasSubscribedToEvents: boolean;
11
- approvalUrl: string;
12
- locusUrl: string;
13
- deviceUrl: string;
14
- /**
15
- * Initializes annotation module
16
- */
17
- constructor(...args: any[]);
18
- /**
19
- * Process Stroke Data
20
- * @param {object} data
21
- * @returns {void}
22
- */
23
- private processStrokeMessage;
24
- /** bind all events from mercury
25
- * @param {Object} e
26
- * @returns {undefined}
27
- */
28
- private eventCommandProcessor;
29
- /** bind all events from llm
30
- * @param {Object} e
31
- * @returns {undefined}
32
- */
33
- private eventDataProcessor;
34
- /**
35
- * Listen to websocket messages
36
- * @returns {undefined}
37
- */
38
- private listenToEvents;
39
- /**
40
- * set locusUrl
41
- * @param {string} locusUrl
42
- * @returns {void}
43
- */
44
- locusUrlUpdate(locusUrl: string): void;
45
- /**
46
- * set approved url
47
- * @param {string} approvalUrl
48
- * @returns {void}
49
- */
50
- approvalUrlUpdate(approvalUrl: string): void;
51
- /**
52
- * accept request
53
- * @param {object} approval
54
- * @returns {Promise}
55
- */
56
- acceptRequest(approval: any): any;
57
- /**
58
- * presenter declined request annotation
59
- * @param {approval} approval
60
- * @returns {Promise}
61
- */
62
- declineRequest(approval: any): any;
63
- /**
64
- * request approved annotation
65
- * @param {RequestData} requestData
66
- * @returns {Promise}
67
- */
68
- approveAnnotation(requestData: RequestData): Promise<void>;
69
- /**
70
- * cancel approved annotation
71
- * @param {object} requestData
72
- * @param {object} approval
73
- * @returns {Promise}
74
- */
75
- cancelApproveAnnotation(requestData: RequestData, approval: any): any;
76
- /**
77
- * close annotation
78
- * @param {object} requestData
79
- * @returns {Promise}
80
- */
81
- closeAnnotation(requestData: RequestData): Promise<void>;
82
- /**
83
- * send annotation command
84
- * @param {ANNOTATION_ACTION_TYPE} actionType
85
- * @param {RequestData} requestData
86
- * @returns {Promise}
87
- */
88
- private sendAnnotationAction;
89
- /**
90
- * decrypt data
91
- * @param {string} encryptionKeyUrl
92
- * @param {string} content encrypted content
93
- * @returns {string} decrypted content
94
- */
95
- private decryptContent;
96
- /**
97
- * encrypt data
98
- * @param {string} encryptionKeyUrl
99
- * @param {string} content original content
100
- * @returns {string} encrypted content
101
- */
102
- private encryptContent;
103
- /**
104
- * Sends stroke data to presenter
105
- * @param {StrokeData} strokeData
106
- * @returns {void}
107
- */
108
- sendStrokeData: (strokeData: StrokeData) => void;
109
- /**
110
- * private encrypted the strokes data
111
- * @param {string} encryptedContent
112
- * @param {StrokeData} strokeData
113
- * @returns {void}
114
- */
115
- private publishEncrypted;
116
- }
117
- export default AnnotationChannel;