@webex/plugin-meetings 3.0.0-beta.24 → 3.0.0-beta.241

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 (360) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +841 -19
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +28 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/queue.js +24 -9
  25. package/dist/common/queue.js.map +1 -1
  26. package/dist/config.js +5 -10
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +190 -27
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +319 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +106 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +366 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +91 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +357 -62
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/infoUtils.js +7 -1
  53. package/dist/locus-info/infoUtils.js.map +1 -1
  54. package/dist/locus-info/mediaSharesUtils.js +43 -1
  55. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  56. package/dist/locus-info/parser.js +219 -63
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.js +89 -14
  59. package/dist/locus-info/selfUtils.js.map +1 -1
  60. package/dist/media/index.js +49 -106
  61. package/dist/media/index.js.map +1 -1
  62. package/dist/media/properties.js +29 -90
  63. package/dist/media/properties.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +90 -2
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +2593 -2558
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +292 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +228 -123
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +255 -195
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/util.js +601 -417
  75. package/dist/meeting/util.js.map +1 -1
  76. package/dist/meeting-info/index.js +48 -7
  77. package/dist/meeting-info/index.js.map +1 -1
  78. package/dist/meeting-info/meeting-info-v2.js +171 -51
  79. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  80. package/dist/meeting-info/util.js +1 -1
  81. package/dist/meeting-info/util.js.map +1 -1
  82. package/dist/meeting-info/utilv2.js +36 -36
  83. package/dist/meeting-info/utilv2.js.map +1 -1
  84. package/dist/meetings/collection.js +22 -0
  85. package/dist/meetings/collection.js.map +1 -1
  86. package/dist/meetings/index.js +370 -90
  87. package/dist/meetings/index.js.map +1 -1
  88. package/dist/meetings/meetings.types.js +7 -0
  89. package/dist/meetings/meetings.types.js.map +1 -0
  90. package/dist/meetings/request.js +2 -0
  91. package/dist/meetings/request.js.map +1 -1
  92. package/dist/meetings/util.js +88 -1
  93. package/dist/meetings/util.js.map +1 -1
  94. package/dist/member/index.js +49 -0
  95. package/dist/member/index.js.map +1 -1
  96. package/dist/member/types.js +25 -0
  97. package/dist/member/types.js.map +1 -0
  98. package/dist/member/util.js +121 -25
  99. package/dist/member/util.js.map +1 -1
  100. package/dist/members/collection.js +10 -0
  101. package/dist/members/collection.js.map +1 -1
  102. package/dist/members/index.js +86 -5
  103. package/dist/members/index.js.map +1 -1
  104. package/dist/members/request.js +106 -38
  105. package/dist/members/request.js.map +1 -1
  106. package/dist/members/types.js +15 -0
  107. package/dist/members/types.js.map +1 -0
  108. package/dist/members/util.js +316 -233
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/constants.js +4 -5
  111. package/dist/metrics/constants.js.map +1 -1
  112. package/dist/metrics/index.js +1 -468
  113. package/dist/metrics/index.js.map +1 -1
  114. package/dist/multistream/mediaRequestManager.js +238 -49
  115. package/dist/multistream/mediaRequestManager.js.map +1 -1
  116. package/dist/multistream/receiveSlot.js +49 -16
  117. package/dist/multistream/receiveSlot.js.map +1 -1
  118. package/dist/multistream/receiveSlotManager.js +52 -34
  119. package/dist/multistream/receiveSlotManager.js.map +1 -1
  120. package/dist/multistream/remoteMedia.js +44 -18
  121. package/dist/multistream/remoteMedia.js.map +1 -1
  122. package/dist/multistream/remoteMediaGroup.js +60 -3
  123. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  124. package/dist/multistream/remoteMediaManager.js +213 -62
  125. package/dist/multistream/remoteMediaManager.js.map +1 -1
  126. package/dist/reachability/index.js +81 -30
  127. package/dist/reachability/index.js.map +1 -1
  128. package/dist/reachability/request.js +16 -7
  129. package/dist/reachability/request.js.map +1 -1
  130. package/dist/reconnection-manager/index.js +199 -154
  131. package/dist/reconnection-manager/index.js.map +1 -1
  132. package/dist/recording-controller/index.js +21 -2
  133. package/dist/recording-controller/index.js.map +1 -1
  134. package/dist/recording-controller/util.js +9 -8
  135. package/dist/recording-controller/util.js.map +1 -1
  136. package/dist/roap/index.js +23 -29
  137. package/dist/roap/index.js.map +1 -1
  138. package/dist/roap/request.js +112 -89
  139. package/dist/roap/request.js.map +1 -1
  140. package/dist/roap/turnDiscovery.js +96 -36
  141. package/dist/roap/turnDiscovery.js.map +1 -1
  142. package/dist/rtcMetrics/constants.js +12 -0
  143. package/dist/rtcMetrics/constants.js.map +1 -0
  144. package/dist/rtcMetrics/index.js +117 -0
  145. package/dist/rtcMetrics/index.js.map +1 -0
  146. package/dist/statsAnalyzer/index.js +51 -34
  147. package/dist/statsAnalyzer/index.js.map +1 -1
  148. package/dist/statsAnalyzer/mqaUtil.js +6 -6
  149. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  150. package/dist/types/annotation/annotation.types.d.ts +42 -0
  151. package/dist/types/annotation/constants.d.ts +31 -0
  152. package/dist/types/annotation/index.d.ts +117 -0
  153. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  154. package/dist/types/breakouts/events.d.ts +8 -0
  155. package/dist/types/breakouts/request.d.ts +22 -0
  156. package/dist/types/breakouts/utils.d.ts +15 -0
  157. package/dist/types/common/errors/webex-errors.d.ts +13 -1
  158. package/dist/types/common/queue.d.ts +9 -7
  159. package/dist/types/config.d.ts +1 -6
  160. package/dist/types/constants.d.ts +154 -21
  161. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  162. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  163. package/dist/types/controls-options-manager/index.d.ts +136 -0
  164. package/dist/types/controls-options-manager/types.d.ts +43 -0
  165. package/dist/types/controls-options-manager/util.d.ts +1 -0
  166. package/dist/types/index.d.ts +6 -4
  167. package/dist/types/interpretation/collection.d.ts +5 -0
  168. package/dist/types/interpretation/index.d.ts +5 -0
  169. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  170. package/dist/types/locus-info/index.d.ts +57 -4
  171. package/dist/types/locus-info/parser.d.ts +65 -6
  172. package/dist/types/media/index.d.ts +2 -0
  173. package/dist/types/media/properties.d.ts +22 -36
  174. package/dist/types/meeting/in-meeting-actions.d.ts +90 -2
  175. package/dist/types/meeting/index.d.ts +297 -491
  176. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  177. package/dist/types/meeting/muteState.d.ts +98 -22
  178. package/dist/types/meeting/request.d.ts +72 -43
  179. package/dist/types/meeting/util.d.ts +101 -1
  180. package/dist/types/meeting-info/index.d.ts +6 -1
  181. package/dist/types/meeting-info/meeting-info-v2.d.ts +30 -1
  182. package/dist/types/meetings/collection.d.ts +8 -0
  183. package/dist/types/meetings/index.d.ts +76 -12
  184. package/dist/types/meetings/meetings.types.d.ts +4 -0
  185. package/dist/types/member/index.d.ts +13 -0
  186. package/dist/types/member/types.d.ts +32 -0
  187. package/dist/types/members/collection.d.ts +5 -0
  188. package/dist/types/members/index.d.ts +35 -2
  189. package/dist/types/members/request.d.ts +73 -9
  190. package/dist/types/members/types.d.ts +24 -0
  191. package/dist/types/members/util.d.ts +209 -1
  192. package/dist/types/metrics/constants.d.ts +3 -4
  193. package/dist/types/metrics/index.d.ts +4 -119
  194. package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
  195. package/dist/types/multistream/receiveSlot.d.ts +16 -12
  196. package/dist/types/multistream/receiveSlotManager.d.ts +19 -4
  197. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  198. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  199. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  200. package/dist/types/reachability/index.d.ts +15 -3
  201. package/dist/types/reachability/request.d.ts +7 -3
  202. package/dist/types/reconnection-manager/index.d.ts +9 -0
  203. package/dist/types/recording-controller/index.d.ts +15 -1
  204. package/dist/types/recording-controller/util.d.ts +5 -4
  205. package/dist/types/roap/request.d.ts +15 -11
  206. package/dist/types/roap/turnDiscovery.d.ts +18 -1
  207. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  208. package/dist/types/rtcMetrics/index.d.ts +47 -0
  209. package/dist/types/statsAnalyzer/index.d.ts +6 -1
  210. package/package.json +23 -20
  211. package/src/annotation/annotation.types.ts +50 -0
  212. package/src/annotation/constants.ts +36 -0
  213. package/src/annotation/index.ts +328 -0
  214. package/src/breakouts/README.md +44 -14
  215. package/src/breakouts/breakout.ts +87 -9
  216. package/src/breakouts/edit-lock-error.ts +25 -0
  217. package/src/breakouts/events.ts +56 -0
  218. package/src/breakouts/index.ts +710 -10
  219. package/src/breakouts/request.ts +55 -0
  220. package/src/breakouts/utils.ts +57 -0
  221. package/src/common/errors/webex-errors.ts +27 -2
  222. package/src/common/logs/logger-proxy.ts +1 -1
  223. package/src/common/queue.ts +22 -8
  224. package/src/config.ts +4 -9
  225. package/src/constants.ts +175 -18
  226. package/src/controls-options-manager/constants.ts +5 -0
  227. package/src/controls-options-manager/enums.ts +18 -0
  228. package/src/controls-options-manager/index.ts +278 -0
  229. package/src/controls-options-manager/types.ts +59 -0
  230. package/src/controls-options-manager/util.ts +300 -0
  231. package/src/index.ts +39 -0
  232. package/src/interpretation/README.md +60 -0
  233. package/src/interpretation/collection.ts +19 -0
  234. package/src/interpretation/index.ts +332 -0
  235. package/src/interpretation/siLanguage.ts +18 -0
  236. package/src/locus-info/controlsUtils.ts +108 -0
  237. package/src/locus-info/index.ts +381 -59
  238. package/src/locus-info/infoUtils.ts +10 -2
  239. package/src/locus-info/mediaSharesUtils.ts +48 -0
  240. package/src/locus-info/parser.ts +224 -39
  241. package/src/locus-info/selfUtils.ts +81 -5
  242. package/src/media/index.ts +89 -109
  243. package/src/media/properties.ts +48 -87
  244. package/src/meeting/in-meeting-actions.ts +179 -3
  245. package/src/meeting/index.ts +2086 -2151
  246. package/src/meeting/locusMediaRequest.ts +313 -0
  247. package/src/meeting/muteState.ts +227 -130
  248. package/src/meeting/request.ts +171 -120
  249. package/src/meeting/util.ts +588 -395
  250. package/src/meeting-info/index.ts +54 -8
  251. package/src/meeting-info/meeting-info-v2.ts +148 -14
  252. package/src/meeting-info/util.ts +1 -1
  253. package/src/meeting-info/utilv2.ts +23 -23
  254. package/src/meetings/collection.ts +20 -0
  255. package/src/meetings/index.ts +407 -108
  256. package/src/meetings/meetings.types.ts +12 -0
  257. package/src/meetings/request.ts +2 -0
  258. package/src/meetings/util.ts +103 -4
  259. package/src/member/index.ts +49 -0
  260. package/src/member/types.ts +38 -0
  261. package/src/member/util.ts +127 -25
  262. package/src/members/collection.ts +8 -0
  263. package/src/members/index.ts +107 -6
  264. package/src/members/request.ts +97 -17
  265. package/src/members/types.ts +28 -0
  266. package/src/members/util.ts +319 -240
  267. package/src/metrics/constants.ts +3 -4
  268. package/src/metrics/index.ts +1 -490
  269. package/src/multistream/mediaRequestManager.ts +289 -79
  270. package/src/multistream/receiveSlot.ts +55 -18
  271. package/src/multistream/receiveSlotManager.ts +46 -24
  272. package/src/multistream/remoteMedia.ts +27 -2
  273. package/src/multistream/remoteMediaGroup.ts +59 -0
  274. package/src/multistream/remoteMediaManager.ts +150 -32
  275. package/src/reachability/index.ts +69 -17
  276. package/src/reachability/request.ts +16 -7
  277. package/src/reconnection-manager/index.ts +81 -54
  278. package/src/recording-controller/index.ts +20 -3
  279. package/src/recording-controller/util.ts +26 -9
  280. package/src/roap/index.ts +23 -30
  281. package/src/roap/request.ts +104 -95
  282. package/src/roap/turnDiscovery.ts +50 -25
  283. package/src/rtcMetrics/constants.ts +3 -0
  284. package/src/rtcMetrics/index.ts +100 -0
  285. package/src/statsAnalyzer/index.ts +73 -35
  286. package/src/statsAnalyzer/mqaUtil.ts +8 -10
  287. package/test/integration/spec/converged-space-meetings.js +233 -0
  288. package/test/integration/spec/journey.js +336 -259
  289. package/test/integration/spec/space-meeting.js +76 -3
  290. package/test/unit/spec/annotation/index.ts +418 -0
  291. package/test/unit/spec/breakouts/breakout.ts +142 -24
  292. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  293. package/test/unit/spec/breakouts/events.ts +89 -0
  294. package/test/unit/spec/breakouts/index.ts +1545 -48
  295. package/test/unit/spec/breakouts/request.ts +104 -0
  296. package/test/unit/spec/breakouts/utils.js +72 -0
  297. package/test/unit/spec/common/queue.js +31 -2
  298. package/test/unit/spec/controls-options-manager/index.js +287 -0
  299. package/test/unit/spec/controls-options-manager/util.js +582 -0
  300. package/test/unit/spec/fixture/locus.js +1 -0
  301. package/test/unit/spec/interpretation/collection.ts +15 -0
  302. package/test/unit/spec/interpretation/index.ts +589 -0
  303. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  304. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  305. package/test/unit/spec/locus-info/index.js +1169 -36
  306. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  307. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  308. package/test/unit/spec/locus-info/parser.js +62 -22
  309. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  310. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  311. package/test/unit/spec/media/index.ts +138 -28
  312. package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
  313. package/test/unit/spec/meeting/index.js +3514 -1746
  314. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  315. package/test/unit/spec/meeting/muteState.js +370 -208
  316. package/test/unit/spec/meeting/request.js +440 -45
  317. package/test/unit/spec/meeting/utils.js +671 -54
  318. package/test/unit/spec/meeting-info/index.js +181 -0
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  320. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  321. package/test/unit/spec/meetings/collection.js +14 -0
  322. package/test/unit/spec/meetings/index.js +939 -150
  323. package/test/unit/spec/meetings/utils.js +206 -2
  324. package/test/unit/spec/member/index.js +58 -4
  325. package/test/unit/spec/member/util.js +479 -35
  326. package/test/unit/spec/members/index.js +319 -1
  327. package/test/unit/spec/members/request.js +206 -27
  328. package/test/unit/spec/members/utils.js +184 -0
  329. package/test/unit/spec/metrics/index.js +1 -50
  330. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  331. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  332. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  333. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  334. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  335. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  336. package/test/unit/spec/reachability/index.ts +185 -7
  337. package/test/unit/spec/reachability/request.js +68 -0
  338. package/test/unit/spec/reconnection-manager/index.js +80 -6
  339. package/test/unit/spec/recording-controller/index.js +294 -218
  340. package/test/unit/spec/recording-controller/util.js +223 -96
  341. package/test/unit/spec/roap/index.ts +31 -51
  342. package/test/unit/spec/roap/request.ts +202 -85
  343. package/test/unit/spec/roap/turnDiscovery.ts +45 -10
  344. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  345. package/test/unit/spec/stats-analyzer/index.js +29 -2
  346. package/test/utils/constants.js +9 -0
  347. package/test/utils/integrationTestUtils.js +46 -0
  348. package/test/utils/testUtils.js +0 -45
  349. package/test/utils/webex-config.js +4 -0
  350. package/test/utils/webex-test-users.js +6 -3
  351. package/dist/meeting/effectsState.js +0 -262
  352. package/dist/meeting/effectsState.js.map +0 -1
  353. package/dist/metrics/config.js +0 -299
  354. package/dist/metrics/config.js.map +0 -1
  355. package/dist/types/meeting/effectsState.d.ts +0 -42
  356. package/dist/types/metrics/config.d.ts +0 -178
  357. package/src/index.js +0 -16
  358. package/src/meeting/effectsState.ts +0 -211
  359. package/src/metrics/config.ts +0 -495
  360. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -1,14 +1,19 @@
1
1
  import { StatelessWebexPlugin } from '@webex/webex-core';
2
+ import { IP_VERSION } from '../constants';
3
+ import { LocusMediaRequest } from '../meeting/locusMediaRequest';
2
4
  /**
3
5
  * @class RoapRequest
4
6
  */
5
7
  export default class RoapRequest extends StatelessWebexPlugin {
6
8
  /**
7
- * Joins a meeting via ROAP
9
+ * Returns reachability data.
8
10
  * @param {Object} localSdp
9
- * @returns {Promise} returns a promise that resolves/rejects whatever the request does
11
+ * @returns {Object}
10
12
  */
11
- attachRechabilityData(localSdp: any): Promise<any>;
13
+ attachReachabilityData(localSdp: any): Promise<{
14
+ localSdp: any;
15
+ joinCookie: any;
16
+ }>;
12
17
  /**
13
18
  * Sends a ROAP message
14
19
  * @param {Object} options
@@ -16,20 +21,19 @@ export default class RoapRequest extends StatelessWebexPlugin {
16
21
  * @param {String} options.locusSelfUrl
17
22
  * @param {String} options.mediaId
18
23
  * @param {String} options.correlationId
19
- * @param {Boolean} options.audioMuted
20
- * @param {Boolean} options.videoMuted
21
24
  * @param {String} options.meetingId
22
- * @param {Boolean} options.preferTranscoding
25
+ * @param {IP_VERSION} options.ipVersion only required for offers
23
26
  * @returns {Promise} returns the response/failure of the request
24
27
  */
25
28
  sendRoap(options: {
26
29
  roapMessage: any;
27
30
  locusSelfUrl: string;
28
31
  mediaId: string;
29
- correlationId: string;
30
- audioMuted: boolean;
31
- videoMuted: boolean;
32
32
  meetingId: string;
33
- preferTranscoding?: boolean;
34
- }): Promise<any>;
33
+ ipVersion?: IP_VERSION;
34
+ locusMediaRequest?: LocusMediaRequest;
35
+ }): Promise<{
36
+ mediaConnections: any;
37
+ locus: any;
38
+ }>;
35
39
  }
@@ -49,7 +49,24 @@ export default class TurnDiscovery {
49
49
  * @param {Meeting} meeting
50
50
  * @returns {Promise}
51
51
  */
52
- sendRoapOK(meeting: Meeting): Promise<any>;
52
+ sendRoapOK(meeting: Meeting): Promise<{
53
+ mediaConnections: any;
54
+ locus: any;
55
+ }>;
56
+ /**
57
+ * Gets the reason why reachability is skipped.
58
+ *
59
+ * @param {Meeting} meeting
60
+ * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
61
+ */
62
+ private getSkipReason;
63
+ /**
64
+ * Checks if TURN discovery is skipped.
65
+ *
66
+ * @param {Meeting} meeting
67
+ * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
68
+ */
69
+ isSkipped(meeting: any): Promise<boolean>;
53
70
  /**
54
71
  * Retrieves TURN server information from the backend by doing
55
72
  * a roap message exchange:
@@ -0,0 +1,4 @@
1
+ declare const RTC_METRICS: {
2
+ APP_ID: string;
3
+ };
4
+ export { RTC_METRICS as default };
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Rtc Metrics
3
+ */
4
+ export default class RtcMetrics {
5
+ /**
6
+ * Array of MetricData items to be sent to the metrics service.
7
+ */
8
+ metricsQueue: any[];
9
+ intervalId: number;
10
+ webex: any;
11
+ meetingId: string;
12
+ correlationId: string;
13
+ /**
14
+ * Initialize the interval.
15
+ *
16
+ * @param {object} webex - The main `webex` object.
17
+ * @param {string} meetingId - The meeting id.
18
+ * @param {string} correlationId - The correlation id.
19
+ */
20
+ constructor(webex: any, meetingId: any, correlationId: any);
21
+ /**
22
+ * Check to see if the metrics queue has any items.
23
+ *
24
+ * @returns {void}
25
+ */
26
+ private checkMetrics;
27
+ /**
28
+ * Add metrics items to the metrics queue.
29
+ *
30
+ * @param {object} data - An object with a payload array of metrics items.
31
+ *
32
+ * @returns {void}
33
+ */
34
+ addMetrics(data: any): void;
35
+ /**
36
+ * Clear the metrics interval.
37
+ *
38
+ * @returns {void}
39
+ */
40
+ closeMetrics(): void;
41
+ /**
42
+ * Send metrics to the metrics service.
43
+ *
44
+ * @returns {void}
45
+ */
46
+ private sendMetrics;
47
+ }
@@ -1,5 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import EventsScope from '../common/events/events-scope';
3
+ import { ReceiveSlot } from '../multistream/receiveSlot';
3
4
  export declare const EVENTS: {
4
5
  MEDIA_QUALITY: string;
5
6
  LOCAL_MEDIA_STARTED: string;
@@ -7,6 +8,7 @@ export declare const EVENTS: {
7
8
  REMOTE_MEDIA_STARTED: string;
8
9
  REMOTE_MEDIA_STOPPED: string;
9
10
  };
11
+ type ReceiveSlotCallback = (csi: number) => ReceiveSlot | undefined;
10
12
  /**
11
13
  * Stats Analyzer class that will emit events based on detected quality
12
14
  *
@@ -28,15 +30,17 @@ export declare class StatsAnalyzer extends EventsScope {
28
30
  statsInterval: NodeJS.Timeout;
29
31
  statsResults: any;
30
32
  statsStarted: any;
33
+ receiveSlotCallback: ReceiveSlotCallback;
31
34
  /**
32
35
  * Creates a new instance of StatsAnalyzer
33
36
  * @constructor
34
37
  * @public
35
38
  * @param {Object} config SDK Configuration Object
39
+ * @param {Function} receiveSlotCallback Callback used to access receive slots.
36
40
  * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
37
41
  * @param {Object} statsResults Default properties for stats
38
42
  */
39
- constructor(config: any, networkQualityMonitor?: object, statsResults?: object);
43
+ constructor(config: any, receiveSlotCallback?: ReceiveSlotCallback, networkQualityMonitor?: object, statsResults?: object);
40
44
  /**
41
45
  * Resets cumulative stats arrays.
42
46
  *
@@ -193,3 +197,4 @@ export declare class StatsAnalyzer extends EventsScope {
193
197
  */
194
198
  compareSentAndReceived(result: any, type: any): void;
195
199
  }
200
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "3.0.0-beta.24",
3
+ "version": "3.0.0-beta.241",
4
4
  "description": "",
5
5
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
6
6
  "contributors": [
@@ -32,31 +32,33 @@
32
32
  "build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
33
33
  },
34
34
  "devDependencies": {
35
- "@webex/plugin-meetings": "3.0.0-beta.24",
36
- "@webex/test-helper-chai": "3.0.0-beta.24",
37
- "@webex/test-helper-mocha": "3.0.0-beta.24",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.24",
39
- "@webex/test-helper-retry": "3.0.0-beta.24",
40
- "@webex/test-helper-test-users": "3.0.0-beta.24",
35
+ "@webex/plugin-meetings": "3.0.0-beta.241",
36
+ "@webex/test-helper-chai": "3.0.0-beta.241",
37
+ "@webex/test-helper-mocha": "3.0.0-beta.241",
38
+ "@webex/test-helper-mock-webex": "3.0.0-beta.241",
39
+ "@webex/test-helper-retry": "3.0.0-beta.241",
40
+ "@webex/test-helper-test-users": "3.0.0-beta.241",
41
41
  "chai": "^4.3.4",
42
42
  "chai-as-promised": "^7.1.1",
43
43
  "jsdom-global": "3.0.2",
44
44
  "sinon": "^9.2.4",
45
- "typed-emitter": "^2.1.0"
45
+ "typed-emitter": "^2.1.0",
46
+ "typescript": "^4.7.4"
46
47
  },
47
48
  "dependencies": {
48
- "@webex/common": "3.0.0-beta.24",
49
- "@webex/internal-media-core": "1.33.1",
50
- "@webex/internal-plugin-conversation": "3.0.0-beta.24",
51
- "@webex/internal-plugin-device": "3.0.0-beta.24",
52
- "@webex/internal-plugin-llm": "3.0.0-beta.24",
53
- "@webex/internal-plugin-mercury": "3.0.0-beta.24",
54
- "@webex/internal-plugin-metrics": "3.0.0-beta.24",
55
- "@webex/internal-plugin-support": "3.0.0-beta.24",
56
- "@webex/internal-plugin-user": "3.0.0-beta.24",
57
- "@webex/plugin-people": "3.0.0-beta.24",
58
- "@webex/plugin-rooms": "3.0.0-beta.24",
59
- "@webex/webex-core": "3.0.0-beta.24",
49
+ "@webex/common": "3.0.0-beta.241",
50
+ "@webex/internal-media-core": "1.39.3",
51
+ "@webex/internal-plugin-conversation": "3.0.0-beta.241",
52
+ "@webex/internal-plugin-device": "3.0.0-beta.241",
53
+ "@webex/internal-plugin-llm": "3.0.0-beta.241",
54
+ "@webex/internal-plugin-mercury": "3.0.0-beta.241",
55
+ "@webex/internal-plugin-metrics": "3.0.0-beta.241",
56
+ "@webex/internal-plugin-support": "3.0.0-beta.241",
57
+ "@webex/internal-plugin-user": "3.0.0-beta.241",
58
+ "@webex/media-helpers": "3.0.0-beta.241",
59
+ "@webex/plugin-people": "3.0.0-beta.241",
60
+ "@webex/plugin-rooms": "3.0.0-beta.241",
61
+ "@webex/webex-core": "3.0.0-beta.241",
60
62
  "ampersand-collection": "^2.0.2",
61
63
  "bowser": "^2.11.0",
62
64
  "btoa": "^1.2.1",
@@ -64,6 +66,7 @@
64
66
  "global": "^4.4.0",
65
67
  "ip-anonymize": "^0.1.0",
66
68
  "javascript-state-machine": "^3.1.0",
69
+ "jsonwebtoken": "^8.5.1",
67
70
  "lodash": "^4.17.21",
68
71
  "sdp-transform": "^2.12.0",
69
72
  "uuid": "^3.3.2",
@@ -0,0 +1,50 @@
1
+ import {ANNOTATION_POLICY} from './constants';
2
+
3
+ /**
4
+ * Type for an StrokeData Object
5
+ */
6
+ type StrokeData = {
7
+ deviceId: string;
8
+ toUserId: string;
9
+ requesterId: string;
10
+ content: string;
11
+ shareInstanceId: string;
12
+ encryptionKeyUrl: string;
13
+ version: string;
14
+ };
15
+
16
+ type RequestData = {
17
+ toUserId: string;
18
+ toDeviceUrl: string;
19
+ shareInstanceId: string;
20
+ };
21
+
22
+ type CommandRequestBody = {
23
+ actionType: string;
24
+ resourceType: string;
25
+ shareInstanceId: string;
26
+ receivers?: any[];
27
+ };
28
+ /**
29
+ * Type for an annotation Object include annotation version and privilege
30
+ */
31
+ type AnnotationInfo = {
32
+ version: string;
33
+ policy: ANNOTATION_POLICY;
34
+ };
35
+
36
+ interface IAnnotationChannel {
37
+ // === below is for presenter
38
+ acceptRequest: (approval) => undefined | Promise<void>;
39
+ declineRequest: (approval) => undefined | Promise<void>;
40
+ closeAnnotation: (requestData: RequestData) => undefined | Promise<void>;
41
+ // === below is for attendee
42
+ approveAnnotation: (requestData: RequestData) => undefined | Promise<void>;
43
+ cancelApproveAnnotation: (requestData: RequestData, approval) => undefined | Promise<void>;
44
+ sendStrokeData: (strokeData: StrokeData) => void;
45
+ // =====
46
+ approvalUrlUpdate: (approvalUrl: string) => void;
47
+ locusUrlUpdate: (locusUrl: string) => void;
48
+ }
49
+
50
+ export type {StrokeData, RequestData, CommandRequestBody, IAnnotationChannel, AnnotationInfo};
@@ -0,0 +1,36 @@
1
+ export const EVENT_TRIGGERS = {
2
+ ANNOTATION_STROKE_DATA: 'annotation:strokeData',
3
+ ANNOTATION_COMMAND: 'annotation:command',
4
+ };
5
+ export const ANNOTATION_RESOURCE_TYPE = 'AnnotationOnShare';
6
+ export const ANNOTATION_RELAY_TYPES = {
7
+ ANNOTATION_CLIENT: 'annotation.client',
8
+ };
9
+
10
+ export const ANNOTATION_STATUS = {
11
+ NO_ANNOTATION: 'NO_ANNOTATION',
12
+ RUNNING_ANNOTATION: 'RUNNING_ANNOTATION',
13
+ };
14
+
15
+ export enum ANNOTATION_POLICY {
16
+ ANYONE_CAN_ANNOTATE = 'AnyoneCanAnnotate',
17
+ APPROVAL = 'Approval',
18
+ ANNOTATION_NOT_ALLOWED = 'AnnotationNotAllowed',
19
+ }
20
+
21
+ export const ANNOTATION_REQUEST_TYPE = {
22
+ ANNOTATION_MESSAGE: 'annotation_message',
23
+ };
24
+
25
+ export const enum ANNOTATION_ACTION_TYPE {
26
+ REQUESTED = 'REQUESTED',
27
+ ACCEPTED = 'ACCEPTED',
28
+ DECLINED = 'DECLINED',
29
+ OFFERED = 'OFFERED',
30
+ CANCELED = 'CANCELED',
31
+ EXPIRED = 'EXPIRED',
32
+ REVOKED = 'REVOKED',
33
+ CLOSED = 'CLOSED',
34
+ }
35
+
36
+ export const ANNOTATION = 'annotation';
@@ -0,0 +1,328 @@
1
+ import uuid from 'uuid';
2
+ // eslint-disable-next-line import/no-extraneous-dependencies
3
+ import {WebexPlugin, config} from '@webex/webex-core';
4
+ import TriggerProxy from '../common/events/trigger-proxy';
5
+
6
+ import {
7
+ EVENT_TRIGGERS,
8
+ ANNOTATION_RELAY_TYPES,
9
+ ANNOTATION,
10
+ ANNOTATION_REQUEST_TYPE,
11
+ ANNOTATION_ACTION_TYPE,
12
+ ANNOTATION_RESOURCE_TYPE,
13
+ } from './constants';
14
+
15
+ import {StrokeData, RequestData, IAnnotationChannel, CommandRequestBody} from './annotation.types';
16
+ import {HTTP_VERBS} from '../constants';
17
+
18
+ /**
19
+ * @description Annotation to handle LLM and Mercury message and locus API
20
+ * @class
21
+ */
22
+ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
23
+ namespace = ANNOTATION;
24
+
25
+ private seqNum: number;
26
+
27
+ hasSubscribedToEvents: boolean;
28
+
29
+ approvalUrl: string;
30
+ locusUrl: string;
31
+ deviceUrl: string;
32
+
33
+ /**
34
+ * Initializes annotation module
35
+ */
36
+ constructor(...args) {
37
+ super(...args);
38
+ this.seqNum = 1;
39
+ }
40
+
41
+ /**
42
+ * Process Stroke Data
43
+ * @param {object} data
44
+ * @returns {void}
45
+ */
46
+ private processStrokeMessage(data) {
47
+ const {request} = data;
48
+ this.decryptContent(request.value.encryptionKeyUrl, request.value.content).then(
49
+ (decryptedContent) => {
50
+ request.value.content = decryptedContent;
51
+ TriggerProxy.trigger(
52
+ this,
53
+ {
54
+ file: 'annotation',
55
+ function: 'processStrokeMessage',
56
+ },
57
+ EVENT_TRIGGERS.ANNOTATION_STROKE_DATA,
58
+ {
59
+ payload: data,
60
+ }
61
+ );
62
+ }
63
+ );
64
+ }
65
+
66
+ /** bind all events from mercury
67
+ * @param {Object} e
68
+ * @returns {undefined}
69
+ */
70
+ private eventCommandProcessor(e) {
71
+ if (
72
+ e?.data?.eventType === 'locus.approval_request' &&
73
+ e?.data?.approval?.resourceType === ANNOTATION_RESOURCE_TYPE &&
74
+ e?.data?.approval?.actionType
75
+ ) {
76
+ TriggerProxy.trigger(
77
+ this,
78
+ {
79
+ file: 'annotation',
80
+ function: 'approval_request',
81
+ },
82
+ EVENT_TRIGGERS.ANNOTATION_COMMAND,
83
+ {
84
+ type: e.data.approval.actionType,
85
+ payload: e.data.approval,
86
+ }
87
+ );
88
+ }
89
+ }
90
+
91
+ /** bind all events from llm
92
+ * @param {Object} e
93
+ * @returns {undefined}
94
+ */
95
+ private eventDataProcessor(e) {
96
+ switch (e?.data?.relayType) {
97
+ case ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT:
98
+ this.processStrokeMessage(e.data);
99
+ break;
100
+ default:
101
+ break;
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Listen to websocket messages
107
+ * @returns {undefined}
108
+ */
109
+ private listenToEvents() {
110
+ if (!this.hasSubscribedToEvents) {
111
+ // @ts-ignore
112
+ this.webex.internal.mercury.on(
113
+ 'event:locus.approval_request',
114
+ this.eventCommandProcessor,
115
+ this
116
+ );
117
+ // @ts-ignore
118
+ this.webex.internal.llm.on('event:relay.event', this.eventDataProcessor, this);
119
+ this.hasSubscribedToEvents = true;
120
+ }
121
+ }
122
+
123
+ /**
124
+ * set locusUrl
125
+ * @param {string} locusUrl
126
+ * @returns {void}
127
+ */
128
+ public locusUrlUpdate(locusUrl: string) {
129
+ this.locusUrl = locusUrl;
130
+ this.listenToEvents();
131
+ }
132
+
133
+ /**
134
+ * set approved url
135
+ * @param {string} approvalUrl
136
+ * @returns {void}
137
+ */
138
+ public approvalUrlUpdate(approvalUrl: string) {
139
+ this.approvalUrl = approvalUrl;
140
+ }
141
+
142
+ /**
143
+ * accept request
144
+ * @param {object} approval
145
+ * @returns {Promise}
146
+ */
147
+ public acceptRequest(approval) {
148
+ // @ts-ignore
149
+ return this.request({
150
+ method: HTTP_VERBS.PUT,
151
+ url: approval.url,
152
+ body: {
153
+ resourceType: ANNOTATION_RESOURCE_TYPE,
154
+ actionType: ANNOTATION_ACTION_TYPE.ACCEPTED,
155
+ },
156
+ });
157
+ }
158
+
159
+ /**
160
+ * presenter declined request annotation
161
+ * @param {approval} approval
162
+ * @returns {Promise}
163
+ */
164
+ public declineRequest(approval) {
165
+ // @ts-ignore
166
+ return this.request({
167
+ method: HTTP_VERBS.PUT,
168
+ url: approval.url,
169
+ body: {
170
+ resourceType: ANNOTATION_RESOURCE_TYPE,
171
+ actionType: ANNOTATION_ACTION_TYPE.DECLINED,
172
+ },
173
+ });
174
+ }
175
+
176
+ /**
177
+ * request approved annotation
178
+ * @param {RequestData} requestData
179
+ * @returns {Promise}
180
+ */
181
+ public approveAnnotation(requestData: RequestData) {
182
+ return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.REQUESTED, requestData);
183
+ }
184
+
185
+ /**
186
+ * cancel approved annotation
187
+ * @param {object} requestData
188
+ * @param {object} approval
189
+ * @returns {Promise}
190
+ */
191
+ public cancelApproveAnnotation(requestData: RequestData, approval) {
192
+ const body: CommandRequestBody = {
193
+ actionType: ANNOTATION_ACTION_TYPE.CANCELED,
194
+ resourceType: 'AnnotationOnShare',
195
+ shareInstanceId: requestData.shareInstanceId,
196
+ };
197
+
198
+ // @ts-ignore
199
+ return this.request({
200
+ method: HTTP_VERBS.PUT,
201
+ url: `${approval.url}`,
202
+ body,
203
+ });
204
+ }
205
+
206
+ /**
207
+ * close annotation
208
+ * @param {object} requestData
209
+ * @returns {Promise}
210
+ */
211
+ public closeAnnotation(requestData: RequestData) {
212
+ return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.CLOSED, requestData);
213
+ }
214
+
215
+ /**
216
+ * send annotation command
217
+ * @param {ANNOTATION_ACTION_TYPE} actionType
218
+ * @param {RequestData} requestData
219
+ * @returns {Promise}
220
+ */
221
+ private sendAnnotationAction = async (
222
+ actionType: ANNOTATION_ACTION_TYPE,
223
+ requestData: RequestData
224
+ ): Promise<void> => {
225
+ const body: CommandRequestBody = {
226
+ actionType,
227
+ resourceType: 'AnnotationOnShare',
228
+ shareInstanceId: requestData.shareInstanceId,
229
+ };
230
+ if (requestData?.toUserId) {
231
+ body.receivers = [{participantId: requestData.toUserId, deviceUrl: requestData.toDeviceUrl}];
232
+ }
233
+
234
+ // @ts-ignore
235
+ return this.request({
236
+ method: HTTP_VERBS.POST,
237
+ url: `${this.approvalUrl}`,
238
+ body,
239
+ });
240
+ };
241
+
242
+ /**
243
+ * decrypt data
244
+ * @param {string} encryptionKeyUrl
245
+ * @param {string} content encrypted content
246
+ * @returns {string} decrypted content
247
+ */
248
+ private decryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {
249
+ // @ts-ignore
250
+ return this.webex.internal.encryption.decryptText(encryptionKeyUrl, content).then((res) => {
251
+ return res;
252
+ });
253
+ };
254
+
255
+ /**
256
+ * encrypt data
257
+ * @param {string} encryptionKeyUrl
258
+ * @param {string} content original content
259
+ * @returns {string} encrypted content
260
+ */
261
+ private encryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {
262
+ // @ts-ignore
263
+ return this.webex.internal.encryption.encryptText(encryptionKeyUrl, content).then((res) => {
264
+ return res;
265
+ });
266
+ };
267
+
268
+ /**
269
+ * Sends stroke data to presenter
270
+ * @param {StrokeData} strokeData
271
+ * @returns {void}
272
+ */
273
+ public sendStrokeData = (strokeData: StrokeData): void => {
274
+ // @ts-ignore
275
+ if (!this.webex.internal.llm.isConnected()) return;
276
+ this.encryptContent(strokeData.encryptionKeyUrl, strokeData.content).then(
277
+ (encryptedContent) => {
278
+ this.publishEncrypted(encryptedContent, strokeData);
279
+ }
280
+ );
281
+ };
282
+
283
+ /**
284
+ * private encrypted the strokes data
285
+ * @param {string} encryptedContent
286
+ * @param {StrokeData} strokeData
287
+ * @returns {void}
288
+ */
289
+ private publishEncrypted(encryptedContent: string, strokeData: StrokeData) {
290
+ const data = {
291
+ id: `${this.seqNum}`,
292
+ type: 'publishRequest',
293
+ recipients: {
294
+ // @ts-ignore
295
+ route: this.webex.internal.llm.getBinding(),
296
+ },
297
+ headers: {
298
+ to: strokeData.toUserId,
299
+ },
300
+ data: {
301
+ eventType: 'relay.event',
302
+ relayType: ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT,
303
+ request: {
304
+ value: {
305
+ type: ANNOTATION_REQUEST_TYPE.ANNOTATION_MESSAGE,
306
+ content: encryptedContent,
307
+ deviceId: strokeData.deviceId,
308
+ seq: this.seqNum,
309
+ requesterId: strokeData.requesterId,
310
+ version: strokeData.version,
311
+ shareInstanceId: strokeData.shareInstanceId,
312
+ encryptionKeyUrl: strokeData.encryptionKeyUrl,
313
+ },
314
+ },
315
+ },
316
+ trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
317
+ timestamp: new Date().getTime(),
318
+ sequenceNumber: this.seqNum,
319
+ filterMessage: false,
320
+ };
321
+
322
+ // @ts-ignore
323
+ this.webex.internal.llm.socket.send(data);
324
+ this.seqNum += 1;
325
+ }
326
+ }
327
+
328
+ export default AnnotationChannel;