@webex/plugin-meetings 2.59.8-next.2 → 2.60.0

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 (172) hide show
  1. package/dist/common/browser-detection.d.ts +9 -0
  2. package/dist/common/browser-detection.js +2 -2
  3. package/dist/common/browser-detection.js.map +1 -1
  4. package/dist/common/collection.d.ts +48 -0
  5. package/dist/common/collection.js +2 -2
  6. package/dist/common/collection.js.map +1 -1
  7. package/dist/common/config.d.ts +2 -0
  8. package/dist/common/errors/captcha-error.d.ts +15 -0
  9. package/dist/common/errors/intent-to-join.d.ts +16 -0
  10. package/dist/common/errors/join-meeting.d.ts +17 -0
  11. package/dist/common/errors/media.d.ts +15 -0
  12. package/dist/common/errors/parameter.d.ts +15 -0
  13. package/dist/common/errors/password-error.d.ts +15 -0
  14. package/dist/common/errors/permission.d.ts +14 -0
  15. package/dist/common/errors/reclaim-host-role-error.d.ts +60 -0
  16. package/dist/common/errors/reclaim-host-role-error.js +158 -0
  17. package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
  18. package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
  19. package/dist/common/errors/reconnection.d.ts +15 -0
  20. package/dist/common/errors/stats.d.ts +15 -0
  21. package/dist/common/errors/webex-errors.d.ts +81 -0
  22. package/dist/common/errors/webex-meetings-error.d.ts +20 -0
  23. package/dist/common/events/events-scope.d.ts +17 -0
  24. package/dist/common/events/events.d.ts +12 -0
  25. package/dist/common/events/trigger-proxy.d.ts +2 -0
  26. package/dist/common/events/util.d.ts +2 -0
  27. package/dist/common/logs/logger-config.d.ts +2 -0
  28. package/dist/common/logs/logger-proxy.d.ts +2 -0
  29. package/dist/common/logs/request.d.ts +34 -0
  30. package/dist/common/queue.d.ts +32 -0
  31. package/dist/config.d.ts +73 -0
  32. package/dist/config.js +2 -2
  33. package/dist/config.js.map +1 -1
  34. package/dist/constants.d.ts +952 -0
  35. package/dist/constants.js +31 -2
  36. package/dist/constants.js.map +1 -1
  37. package/dist/controls-options-manager/constants.d.ts +4 -0
  38. package/dist/controls-options-manager/enums.d.ts +5 -0
  39. package/dist/controls-options-manager/index.d.ts +120 -0
  40. package/dist/controls-options-manager/index.js +2 -2
  41. package/dist/controls-options-manager/index.js.map +1 -1
  42. package/dist/controls-options-manager/util.d.ts +7 -0
  43. package/dist/index.d.ts +4 -0
  44. package/dist/locus-info/controlsUtils.d.ts +2 -0
  45. package/dist/locus-info/controlsUtils.js +6 -6
  46. package/dist/locus-info/controlsUtils.js.map +1 -1
  47. package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
  48. package/dist/locus-info/fullState.d.ts +2 -0
  49. package/dist/locus-info/hostUtils.d.ts +2 -0
  50. package/dist/locus-info/index.d.ts +269 -0
  51. package/dist/locus-info/index.js +18 -18
  52. package/dist/locus-info/index.js.map +1 -1
  53. package/dist/locus-info/infoUtils.d.ts +2 -0
  54. package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
  55. package/dist/locus-info/parser.d.ts +212 -0
  56. package/dist/locus-info/parser.js +2 -2
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.d.ts +2 -0
  59. package/dist/media/index.d.ts +32 -0
  60. package/dist/media/properties.d.ts +108 -0
  61. package/dist/media/util.d.ts +2 -0
  62. package/dist/mediaQualityMetrics/config.d.ts +233 -0
  63. package/dist/meeting/effectsState.d.ts +42 -0
  64. package/dist/meeting/in-meeting-actions.d.ts +79 -0
  65. package/dist/meeting/index.d.ts +1622 -0
  66. package/dist/meeting/index.js +51 -28
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/muteState.d.ts +116 -0
  69. package/dist/meeting/request.d.ts +255 -0
  70. package/dist/meeting/request.js +2 -2
  71. package/dist/meeting/request.js.map +1 -1
  72. package/dist/meeting/state.d.ts +9 -0
  73. package/dist/meeting/util.d.ts +2 -0
  74. package/dist/meeting/util.js +4 -4
  75. package/dist/meeting/util.js.map +1 -1
  76. package/dist/meeting-info/collection.d.ts +20 -0
  77. package/dist/meeting-info/collection.js +2 -2
  78. package/dist/meeting-info/collection.js.map +1 -1
  79. package/dist/meeting-info/index.d.ts +57 -0
  80. package/dist/meeting-info/meeting-info-v2.d.ts +93 -0
  81. package/dist/meeting-info/request.d.ts +22 -0
  82. package/dist/meeting-info/util.d.ts +2 -0
  83. package/dist/meeting-info/utilv2.d.ts +2 -0
  84. package/dist/meetings/collection.d.ts +23 -0
  85. package/dist/meetings/collection.js +2 -2
  86. package/dist/meetings/collection.js.map +1 -1
  87. package/dist/meetings/index.d.ts +296 -0
  88. package/dist/meetings/request.d.ts +27 -0
  89. package/dist/meetings/util.d.ts +18 -0
  90. package/dist/member/index.d.ts +148 -0
  91. package/dist/member/index.js +9 -0
  92. package/dist/member/index.js.map +1 -1
  93. package/dist/member/member.types.d.ts +11 -0
  94. package/dist/member/util.d.ts +2 -0
  95. package/dist/member/util.js +11 -0
  96. package/dist/member/util.js.map +1 -1
  97. package/dist/members/collection.d.ts +24 -0
  98. package/dist/members/index.d.ts +308 -0
  99. package/dist/members/index.js +39 -2
  100. package/dist/members/index.js.map +1 -1
  101. package/dist/members/request.d.ts +58 -0
  102. package/dist/members/request.js +19 -0
  103. package/dist/members/request.js.map +1 -1
  104. package/dist/members/types.d.ts +25 -0
  105. package/dist/members/types.js +15 -0
  106. package/dist/members/types.js.map +1 -0
  107. package/dist/members/util.d.ts +2 -0
  108. package/dist/members/util.js +50 -0
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/config.d.ts +169 -0
  111. package/dist/metrics/constants.d.ts +59 -0
  112. package/dist/metrics/constants.js +2 -0
  113. package/dist/metrics/constants.js.map +1 -1
  114. package/dist/metrics/index.d.ts +152 -0
  115. package/dist/metrics/index.js +2 -2
  116. package/dist/metrics/index.js.map +1 -1
  117. package/dist/networkQualityMonitor/index.d.ts +70 -0
  118. package/dist/peer-connection-manager/index.d.ts +6 -0
  119. package/dist/peer-connection-manager/util.d.ts +6 -0
  120. package/dist/personal-meeting-room/index.d.ts +47 -0
  121. package/dist/personal-meeting-room/request.d.ts +14 -0
  122. package/dist/personal-meeting-room/util.d.ts +2 -0
  123. package/dist/reachability/index.d.ts +139 -0
  124. package/dist/reachability/index.js +2 -9
  125. package/dist/reachability/index.js.map +1 -1
  126. package/dist/reachability/request.d.ts +35 -0
  127. package/dist/reactions/reactions.d.ts +4 -0
  128. package/dist/reactions/reactions.type.d.ts +32 -0
  129. package/dist/reconnection-manager/index.d.ts +112 -0
  130. package/dist/recording-controller/enums.d.ts +7 -0
  131. package/dist/recording-controller/index.d.ts +193 -0
  132. package/dist/recording-controller/util.d.ts +13 -0
  133. package/dist/roap/collection.d.ts +10 -0
  134. package/dist/roap/handler.d.ts +47 -0
  135. package/dist/roap/index.d.ts +116 -0
  136. package/dist/roap/index.js.map +1 -1
  137. package/dist/roap/request.d.ts +35 -0
  138. package/dist/roap/state.d.ts +9 -0
  139. package/dist/roap/turnDiscovery.d.ts +81 -0
  140. package/dist/roap/util.d.ts +2 -0
  141. package/dist/statsAnalyzer/global.d.ts +118 -0
  142. package/dist/statsAnalyzer/global.js +4 -12
  143. package/dist/statsAnalyzer/global.js.map +1 -1
  144. package/dist/statsAnalyzer/index.d.ts +193 -0
  145. package/dist/statsAnalyzer/index.js +56 -14
  146. package/dist/statsAnalyzer/index.js.map +1 -1
  147. package/dist/statsAnalyzer/mqaUtil.d.ts +22 -0
  148. package/dist/statsAnalyzer/mqaUtil.js +15 -15
  149. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  150. package/dist/transcription/index.d.ts +64 -0
  151. package/package.json +21 -22
  152. package/src/common/errors/reclaim-host-role-error.ts +134 -0
  153. package/src/config.ts +2 -2
  154. package/src/constants.ts +33 -0
  155. package/src/meeting/index.ts +35 -0
  156. package/src/member/index.ts +9 -0
  157. package/src/member/util.ts +14 -0
  158. package/src/members/index.ts +55 -1
  159. package/src/members/request.ts +20 -0
  160. package/src/members/types.ts +29 -0
  161. package/src/members/util.ts +52 -0
  162. package/src/metrics/constants.ts +2 -0
  163. package/src/roap/index.ts +1 -0
  164. package/src/statsAnalyzer/global.ts +2 -10
  165. package/src/statsAnalyzer/index.ts +80 -17
  166. package/test/unit/spec/meeting/index.js +77 -6
  167. package/test/unit/spec/member/index.js +7 -0
  168. package/test/unit/spec/member/util.js +32 -0
  169. package/test/unit/spec/members/index.js +205 -0
  170. package/test/unit/spec/members/utils.js +75 -0
  171. package/test/unit/spec/roap/index.ts +0 -1
  172. package/test/unit/spec/stats-analyzer/index.js +151 -0
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","require","_constants","getAudioReceiverMqa","_ref","audioReceiver","statsResults","lastMqaDataSent","mediaType","STATS","AUDIO_CORRELATE","sendrecvType","RECEIVE_DIRECTION","common","direction","transportType","connectionType","remote","transport","rtpPackets","totalPacketsReceived","streams","mediaHopByHopLost","totalPacketsLost","rtpHopByHopLost","maxRtpJitter","max","meanRtpJitter","mean","rtpJitter","fecRecovered","fecPacketsReceived","fecPacketsDiscarded","rtpEndToEndLost","framesDropped","totalSamplesDecoded","renderedFrameRate","framesReceived","totalSamplesReceived","concealedFrames","concealedSamples","receivedBitrate","totalBytesReceived","rtpBitrate","exports","getAudioSenderMqa","_ref2","audioSender","SEND_DIRECTION","local","maxRemoteJitter","meanRemoteJitter","totalPacketsSent","availableBitrate","availableOutgoingBitrate","totalpacketsLostForaMin","totalPacketsLostOnReceiver","remoteLossRate","maxRoundTripTime","meanRoundTripTime","roundTripTime","totalBytesSentInaMin","totalBytesSent","transmittedBitrate","transmittedKeyFrames","totalKeyFramesEncoded","requestedKeyFrames","totalFirCount","getVideoReceiverMqa","_ref3","videoReceiver","_ref3$isShareStream","isShareStream","SHARE_CORRELATE","VIDEO_CORRELATE","totalPacketLoss","totalBytesReceivedInaMin","totalFrameReceivedInaMin","resolutions","totalFrameDecodedInaMin","framesDecoded","receivedFrameRate","receivedHeight","height","receivedWidth","width","receivedFrameSize","receivedKeyFrames","keyFramesDecoded","totalPliCount","getVideoSenderMqa","_ref4","videoSender","_ref4$isShareStream","totalFrameSentInaMin","framesSent","transmittedFrameRate","transmittedHeight","transmittedWidth","transmittedFrameSize"],"sources":["mqaUtil.ts"],"sourcesContent":["/* eslint-disable prefer-destructuring */\n\nimport {mean, max} from 'lodash';\n\nimport {STATS} from '../constants';\n\nexport const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSent}) => {\n const mediaType = STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n audioReceiver.common.common.direction = statsResults[mediaType].direction;\n audioReceiver.common.transportType = statsResults.connectionType.remote.transport[0];\n // add rtpPacket info inside common as also for call analyzer\n audioReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;\n // Hop by hop are numbers and not percentage so we compare on what we sent the last min\n // collect the packets received for the last min\n audioReceiver.streams[0].common.rtpPackets = audioReceiver.common.rtpPackets;\n audioReceiver.common.mediaHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;\n audioReceiver.common.rtpHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;\n\n // @ts-ignore\n audioReceiver.streams[0].common.maxRtpJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.meanRtpJitter =\n mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.rtpJitter = audioReceiver.streams[0].common.maxRtpJitter;\n\n // Fec packets do come in as part of the FEC only for audio\n const fecRecovered =\n statsResults[mediaType][sendrecvType].fecPacketsReceived -\n lastMqaDataSent[mediaType][sendrecvType].fecPacketsReceived -\n (statsResults[mediaType][sendrecvType].fecPacketsDiscarded -\n lastMqaDataSent[mediaType][sendrecvType].fecPacketsDiscarded);\n\n audioReceiver.streams[0].common.rtpEndToEndLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost -\n fecRecovered || 0;\n\n audioReceiver.streams[0].common.framesDropped =\n statsResults[mediaType][sendrecvType].totalSamplesDecoded -\n lastMqaDataSent[mediaType][sendrecvType].totalSamplesDecoded || 0;\n audioReceiver.streams[0].common.renderedFrameRate =\n (audioReceiver.streams[0].common.framesDropped * 100) / 60 || 0;\n audioReceiver.streams[0].common.framesReceived =\n statsResults[mediaType][sendrecvType].totalSamplesReceived -\n lastMqaDataSent[mediaType][sendrecvType].totalSamplesReceived || 0;\n audioReceiver.streams[0].common.concealedFrames =\n statsResults[mediaType][sendrecvType].concealedSamples -\n lastMqaDataSent[mediaType][sendrecvType].concealedSamples || 0;\n audioReceiver.streams[0].common.receivedBitrate =\n ((statsResults[mediaType][sendrecvType].totalBytesReceived -\n lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived) *\n 8) /\n 60 || 0;\n\n audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;\n};\n\nexport const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent}) => {\n const mediaType = STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.SEND_DIRECTION;\n\n audioSender.common.common.direction = statsResults[mediaType].direction;\n audioSender.common.transportType = statsResults.connectionType.local.transport[0];\n\n // @ts-ignore\n audioSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n audioSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n audioSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;\n // From candidate-pair\n audioSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;\n\n audioSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / audioSender.common.rtpPackets\n : 0; // This is the packets sent with in last min || 0;\n\n // @ts-ignore\n audioSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin =\n statsResults[mediaType][sendrecvType].totalBytesSent -\n lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;\n\n audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;\n\n audioSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded -\n lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;\n audioSender.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount -\n lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;\n};\n\nexport const getVideoReceiverMqa = ({\n videoReceiver,\n statsResults,\n lastMqaDataSent,\n isShareStream = false,\n}) => {\n const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n videoReceiver.common.common.direction = statsResults[mediaType].direction;\n videoReceiver.common.transportType = statsResults.connectionType.remote.transport[0];\n // collect the packets received for the last min\n videoReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;\n videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;\n\n const totalPacketLoss =\n statsResults[mediaType][sendrecvType].totalPacketsLost -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;\n\n // Hope by hop are numbers and not percentage so we compare on what we sent the last min\n // this is including packet lost\n videoReceiver.common.mediaHopByHopLost = totalPacketLoss;\n videoReceiver.common.rtpHopByHopLost = totalPacketLoss;\n\n // End to end packetloss is after recovery\n videoReceiver.streams[0].common.rtpEndToEndLost = totalPacketLoss;\n\n // calculate this values\n\n // @ts-ignore\n videoReceiver.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoReceiver.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;\n // videoReceiver.streams[0].common.rtpJitter = (statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferDelay) / (statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount) * 1000 || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesReceivedInaMin =\n statsResults[mediaType][sendrecvType].totalBytesReceived -\n lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived;\n\n videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin\n ? (totalBytesReceivedInaMin * 8) / 60\n : 0;\n videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameReceivedInaMin =\n statsResults.resolutions[mediaType][sendrecvType].framesReceived -\n lastMqaDataSent.resolutions[mediaType][sendrecvType].framesReceived;\n const totalFrameDecodedInaMin =\n statsResults.resolutions[mediaType][sendrecvType].framesDecoded -\n lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDecoded;\n\n videoReceiver.streams[0].common.receivedFrameRate = totalFrameReceivedInaMin\n ? (totalFrameReceivedInaMin * 100) / 60\n : 0;\n videoReceiver.streams[0].common.renderedFrameRate = totalFrameDecodedInaMin\n ? (totalFrameDecodedInaMin * 100) / 60\n : 0;\n\n videoReceiver.streams[0].common.framesDropped =\n statsResults.resolutions[mediaType][sendrecvType].framesDropped -\n lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDropped;\n videoReceiver.streams[0].receivedHeight =\n statsResults.resolutions[mediaType][sendrecvType].height;\n videoReceiver.streams[0].receivedWidth = statsResults.resolutions[mediaType][sendrecvType].width;\n videoReceiver.streams[0].receivedFrameSize =\n (statsResults.resolutions[mediaType][sendrecvType].height *\n statsResults.resolutions[mediaType][sendrecvType].height) /\n 256;\n\n videoReceiver.streams[0].receivedKeyFrames =\n statsResults[mediaType][sendrecvType].keyFramesDecoded -\n lastMqaDataSent[mediaType][sendrecvType].keyFramesDecoded || 0;\n videoReceiver.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalPliCount -\n lastMqaDataSent[mediaType][sendrecvType].totalPliCount || 0;\n};\n\nexport const getVideoSenderMqa = ({\n videoSender,\n statsResults,\n lastMqaDataSent,\n isShareStream = false,\n}) => {\n const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;\n const sendrecvType = STATS.SEND_DIRECTION;\n\n videoSender.common.common.direction = statsResults[mediaType].direction;\n videoSender.common.transportType = statsResults.connectionType.local.transport[0];\n\n // @ts-ignore\n videoSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n videoSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;\n\n videoSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / (videoSender.common.rtpPackets + totalpacketsLostForaMin)\n : 0; // This is the packets sent with in last min || 0;\n\n // @ts-ignore\n videoSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n\n videoSender.streams[0].common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin =\n statsResults[mediaType][sendrecvType].totalBytesSent -\n lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;\n\n videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n\n videoSender.common.rtpBitrate = videoSender.streams[0].common.transmittedBitrate;\n\n videoSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded -\n lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;\n videoSender.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount -\n lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameSentInaMin =\n statsResults.resolutions[mediaType][sendrecvType].framesSent -\n (lastMqaDataSent.resolutions[mediaType][sendrecvType].framesSent || 0);\n\n videoSender.streams[0].common.transmittedFrameRate = totalFrameSentInaMin\n ? (totalFrameSentInaMin * 100) / 60\n : 0;\n videoSender.streams[0].transmittedHeight =\n statsResults.resolutions[mediaType][sendrecvType].height;\n videoSender.streams[0].transmittedWidth = statsResults.resolutions[mediaType][sendrecvType].width;\n videoSender.streams[0].transmittedFrameSize =\n (statsResults.resolutions[mediaType][sendrecvType].height *\n statsResults.resolutions[mediaType][sendrecvType].width) /\n 254;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_constants","require","getAudioReceiverMqa","_ref","audioReceiver","statsResults","lastMqaDataSent","mediaType","STATS","AUDIO_CORRELATE","sendrecvType","RECEIVE_DIRECTION","common","direction","transportType","connectionType","remote","transport","rtpPackets","totalPacketsReceived","streams","mediaHopByHopLost","totalPacketsLost","rtpHopByHopLost","maxRtpJitter","_max2","default","meanRtpJitter","_mean2","rtpJitter","fecRecovered","fecPacketsReceived","fecPacketsDiscarded","rtpEndToEndLost","framesDropped","totalSamplesDecoded","renderedFrameRate","framesReceived","totalSamplesReceived","concealedFrames","concealedSamples","receivedBitrate","totalBytesReceived","rtpBitrate","exports","getAudioSenderMqa","_ref2","audioSender","SEND_DIRECTION","local","maxRemoteJitter","meanRemoteJitter","totalPacketsSent","availableBitrate","availableOutgoingBitrate","totalpacketsLostForaMin","totalPacketsLostOnReceiver","remoteLossRate","maxRoundTripTime","meanRoundTripTime","roundTripTime","totalBytesSentInaMin","totalBytesSent","transmittedBitrate","transmittedKeyFrames","totalKeyFramesEncoded","requestedKeyFrames","totalFirCount","getVideoReceiverMqa","_ref3","videoReceiver","_ref3$isShareStream","isShareStream","SHARE_CORRELATE","VIDEO_CORRELATE","totalPacketLoss","totalBytesReceivedInaMin","totalFrameReceivedInaMin","resolutions","totalFrameDecodedInaMin","framesDecoded","receivedFrameRate","receivedHeight","height","receivedWidth","width","receivedFrameSize","receivedKeyFrames","keyFramesDecoded","totalPliCount","getVideoSenderMqa","_ref4","videoSender","_ref4$isShareStream","totalFrameSentInaMin","framesSent","transmittedFrameRate","transmittedHeight","transmittedWidth","transmittedFrameSize"],"sources":["mqaUtil.ts"],"sourcesContent":["/* eslint-disable prefer-destructuring */\n\nimport {mean, max} from 'lodash';\n\nimport {STATS} from '../constants';\n\nexport const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSent}) => {\n const mediaType = STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n audioReceiver.common.common.direction = statsResults[mediaType].direction;\n audioReceiver.common.transportType = statsResults.connectionType.remote.transport[0];\n // add rtpPacket info inside common as also for call analyzer\n audioReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;\n // Hop by hop are numbers and not percentage so we compare on what we sent the last min\n // collect the packets received for the last min\n audioReceiver.streams[0].common.rtpPackets = audioReceiver.common.rtpPackets;\n audioReceiver.common.mediaHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;\n audioReceiver.common.rtpHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;\n\n // @ts-ignore\n audioReceiver.streams[0].common.maxRtpJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.meanRtpJitter =\n mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.rtpJitter = audioReceiver.streams[0].common.maxRtpJitter;\n\n // Fec packets do come in as part of the FEC only for audio\n const fecRecovered =\n statsResults[mediaType][sendrecvType].fecPacketsReceived -\n lastMqaDataSent[mediaType][sendrecvType].fecPacketsReceived -\n (statsResults[mediaType][sendrecvType].fecPacketsDiscarded -\n lastMqaDataSent[mediaType][sendrecvType].fecPacketsDiscarded);\n\n audioReceiver.streams[0].common.rtpEndToEndLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost -\n fecRecovered || 0;\n\n audioReceiver.streams[0].common.framesDropped =\n statsResults[mediaType][sendrecvType].totalSamplesDecoded -\n lastMqaDataSent[mediaType][sendrecvType].totalSamplesDecoded || 0;\n audioReceiver.streams[0].common.renderedFrameRate =\n (audioReceiver.streams[0].common.framesDropped * 100) / 60 || 0;\n audioReceiver.streams[0].common.framesReceived =\n statsResults[mediaType][sendrecvType].totalSamplesReceived -\n lastMqaDataSent[mediaType][sendrecvType].totalSamplesReceived || 0;\n audioReceiver.streams[0].common.concealedFrames =\n statsResults[mediaType][sendrecvType].concealedSamples -\n lastMqaDataSent[mediaType][sendrecvType].concealedSamples || 0;\n audioReceiver.streams[0].common.receivedBitrate =\n ((statsResults[mediaType][sendrecvType].totalBytesReceived -\n lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived) *\n 8) /\n 60 || 0;\n\n audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;\n};\n\nexport const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent}) => {\n const mediaType = STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.SEND_DIRECTION;\n\n audioSender.common.common.direction = statsResults[mediaType].direction;\n audioSender.common.transportType = statsResults.connectionType.local.transport[0];\n\n // @ts-ignore\n audioSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n audioSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n audioSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;\n // From candidate-pair\n audioSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;\n\n audioSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / audioSender.common.rtpPackets\n : 0; // This is the packets sent with in last min || 0;\n\n // @ts-ignore\n audioSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin =\n statsResults[mediaType][sendrecvType].totalBytesSent -\n lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;\n\n audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;\n\n audioSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded -\n lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;\n audioSender.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount -\n lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;\n};\n\nexport const getVideoReceiverMqa = ({\n videoReceiver,\n statsResults,\n lastMqaDataSent,\n isShareStream = false,\n}) => {\n const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n videoReceiver.common.common.direction = statsResults[mediaType].direction;\n videoReceiver.common.transportType = statsResults.connectionType.remote.transport[0];\n // collect the packets received for the last min\n videoReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;\n videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;\n\n const totalPacketLoss =\n statsResults[mediaType][sendrecvType].totalPacketsLost -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;\n\n // Hope by hop are numbers and not percentage so we compare on what we sent the last min\n // this is including packet lost\n videoReceiver.common.mediaHopByHopLost = totalPacketLoss;\n videoReceiver.common.rtpHopByHopLost = totalPacketLoss;\n\n // End to end packetloss is after recovery\n videoReceiver.streams[0].common.rtpEndToEndLost = totalPacketLoss;\n\n // calculate this values\n\n // @ts-ignore\n videoReceiver.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoReceiver.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;\n // videoReceiver.streams[0].common.rtpJitter = (statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferDelay) / (statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount) * 1000 || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesReceivedInaMin =\n statsResults[mediaType][sendrecvType].totalBytesReceived -\n lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived;\n\n videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin\n ? (totalBytesReceivedInaMin * 8) / 60\n : 0;\n videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameReceivedInaMin =\n statsResults.resolutions[mediaType][sendrecvType].framesReceived -\n lastMqaDataSent.resolutions[mediaType][sendrecvType].framesReceived;\n const totalFrameDecodedInaMin =\n statsResults.resolutions[mediaType][sendrecvType].framesDecoded -\n lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDecoded;\n\n videoReceiver.streams[0].common.receivedFrameRate = totalFrameReceivedInaMin\n ? (totalFrameReceivedInaMin * 100) / 60\n : 0;\n videoReceiver.streams[0].common.renderedFrameRate = totalFrameDecodedInaMin\n ? (totalFrameDecodedInaMin * 100) / 60\n : 0;\n\n videoReceiver.streams[0].common.framesDropped =\n statsResults.resolutions[mediaType][sendrecvType].framesDropped -\n lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDropped;\n videoReceiver.streams[0].receivedHeight =\n statsResults.resolutions[mediaType][sendrecvType].height;\n videoReceiver.streams[0].receivedWidth = statsResults.resolutions[mediaType][sendrecvType].width;\n videoReceiver.streams[0].receivedFrameSize =\n (statsResults.resolutions[mediaType][sendrecvType].height *\n statsResults.resolutions[mediaType][sendrecvType].height) /\n 256;\n\n videoReceiver.streams[0].receivedKeyFrames =\n statsResults[mediaType][sendrecvType].keyFramesDecoded -\n lastMqaDataSent[mediaType][sendrecvType].keyFramesDecoded || 0;\n videoReceiver.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalPliCount -\n lastMqaDataSent[mediaType][sendrecvType].totalPliCount || 0;\n};\n\nexport const getVideoSenderMqa = ({\n videoSender,\n statsResults,\n lastMqaDataSent,\n isShareStream = false,\n}) => {\n const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;\n const sendrecvType = STATS.SEND_DIRECTION;\n\n videoSender.common.common.direction = statsResults[mediaType].direction;\n videoSender.common.transportType = statsResults.connectionType.local.transport[0];\n\n // @ts-ignore\n videoSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n videoSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;\n\n videoSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / (videoSender.common.rtpPackets + totalpacketsLostForaMin)\n : 0; // This is the packets sent with in last min || 0;\n\n // @ts-ignore\n videoSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n\n videoSender.streams[0].common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent -\n lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin =\n statsResults[mediaType][sendrecvType].totalBytesSent -\n lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;\n\n videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n\n videoSender.common.rtpBitrate = videoSender.streams[0].common.transmittedBitrate;\n\n videoSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded -\n lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;\n videoSender.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount -\n lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameSentInaMin =\n statsResults.resolutions[mediaType][sendrecvType].framesSent -\n (lastMqaDataSent.resolutions[mediaType][sendrecvType].framesSent || 0);\n\n videoSender.streams[0].common.transmittedFrameRate = totalFrameSentInaMin\n ? (totalFrameSentInaMin * 100) / 60\n : 0;\n videoSender.streams[0].transmittedHeight =\n statsResults.resolutions[mediaType][sendrecvType].height;\n videoSender.streams[0].transmittedWidth = statsResults.resolutions[mediaType][sendrecvType].width;\n videoSender.streams[0].transmittedFrameSize =\n (statsResults.resolutions[mediaType][sendrecvType].height *\n statsResults.resolutions[mediaType][sendrecvType].width) /\n 254;\n};\n"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @description Meeting Webex assistance transcription feature.
3
+ * @exports
4
+ * @class Transcription
5
+ */
6
+ export default class Transcription {
7
+ webSocketUrl: any;
8
+ sessionID: any;
9
+ members: any;
10
+ memberCSIs: any;
11
+ webSocket: any;
12
+ /**
13
+ * @param {string} webSocketUrl
14
+ * @param {sessionID} sessionId
15
+ * @param {object} members
16
+ * @constructor
17
+ * @memberof Transcription
18
+ */
19
+ constructor(webSocketUrl: string, sessionId: any, members: object);
20
+ /**
21
+ * open the Low Latency Mercury connection
22
+ * An event parameter will be send to the callback.
23
+ *
24
+ * @param {string} token
25
+ * @param {string} sessionID
26
+ * @returns {void}
27
+ */
28
+ connect(token: string): void;
29
+ /**
30
+ * Sets callback to invoke when the web socket connection is closed.
31
+ *
32
+ * @param {Function} callback
33
+ * @returns {void}
34
+ */
35
+ onCloseSocket(callback: any): void;
36
+ /**
37
+ * Sets callback to invoke when a web socket connection error occurs.
38
+ * An event parameter will be send to the callback.
39
+ *
40
+ * @param {Function} callback
41
+ * @returns {void}
42
+ */
43
+ onErrorSocket(callback: any): void;
44
+ /**
45
+ * Get current speaker from the given csis payload and update the global csis map
46
+ *
47
+ * @private
48
+ * @param {object} csis
49
+ * @returns {object}
50
+ */
51
+ private getSpeaker;
52
+ /**
53
+ * Sends transcription data to given callback as it arrives.
54
+ *
55
+ * @param {Function} callback
56
+ * @returns {void}
57
+ */
58
+ subscribe(callback: any): void;
59
+ /**
60
+ * Close the LLM web socket connection
61
+ * @returns {void}
62
+ */
63
+ closeSocket(): void;
64
+ }
package/package.json CHANGED
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
+ "version": "2.60.0",
3
4
  "description": "",
4
5
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
5
6
  "contributors": [
@@ -29,7 +30,6 @@
29
30
  "scripts": {
30
31
  "build": "yarn run -T tsc --declaration true --declarationDir ./dist",
31
32
  "build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps",
32
- "deploy:npm": "yarn npm publish",
33
33
  "test:broken": "yarn test:style && yarn test:unit && yarn test:integration && yarn test:browser",
34
34
  "test:browser:broken": "webex-legacy-tools test --integration --unit --runner karma",
35
35
  "test:integration:broken": "webex-legacy-tools test --integration --runner mocha",
@@ -39,17 +39,17 @@
39
39
  "devDependencies": {
40
40
  "@babel/core": "^7.17.10",
41
41
  "@types/jsdom": "^21",
42
- "@webex/babel-config-legacy": "^0.0.0",
43
- "@webex/eslint-config-legacy": "^0.0.0",
44
- "@webex/jest-config-legacy": "^0.0.0",
45
- "@webex/legacy-tools": "^0.0.0",
46
- "@webex/plugin-meetings": "^2.59.8-next.2",
47
- "@webex/plugin-rooms": "^2.59.8-next.1",
48
- "@webex/test-helper-chai": "^2.59.8-next.1",
49
- "@webex/test-helper-mocha": "^2.59.8-next.1",
50
- "@webex/test-helper-mock-webex": "^2.59.8-next.1",
51
- "@webex/test-helper-retry": "^2.59.8-next.1",
52
- "@webex/test-helper-test-users": "^2.59.8-next.1",
42
+ "@webex/babel-config-legacy": "2.60.0",
43
+ "@webex/eslint-config-legacy": "2.60.0",
44
+ "@webex/jest-config-legacy": "2.60.0",
45
+ "@webex/legacy-tools": "2.60.0",
46
+ "@webex/plugin-meetings": "2.60.0",
47
+ "@webex/plugin-rooms": "2.60.0",
48
+ "@webex/test-helper-chai": "2.60.0",
49
+ "@webex/test-helper-mocha": "2.60.0",
50
+ "@webex/test-helper-mock-webex": "2.60.0",
51
+ "@webex/test-helper-retry": "2.60.0",
52
+ "@webex/test-helper-test-users": "2.60.0",
53
53
  "chai": "^4.3.4",
54
54
  "chai-as-promised": "^7.1.1",
55
55
  "eslint": "^8.24.0",
@@ -60,15 +60,15 @@
60
60
  "typescript": "^4.7.4"
61
61
  },
62
62
  "dependencies": {
63
- "@webex/common": "^2.59.8-next.1",
63
+ "@webex/common": "2.60.0",
64
64
  "@webex/internal-media-core": "0.0.7-beta",
65
- "@webex/internal-plugin-device": "^2.59.8-next.1",
66
- "@webex/internal-plugin-metrics": "^2.59.8-next.1",
67
- "@webex/internal-plugin-support": "^2.59.8-next.1",
68
- "@webex/internal-plugin-user": "^2.59.8-next.1",
69
- "@webex/plugin-people": "^2.59.8-next.1",
65
+ "@webex/internal-plugin-device": "2.60.0",
66
+ "@webex/internal-plugin-metrics": "2.60.0",
67
+ "@webex/internal-plugin-support": "2.60.0",
68
+ "@webex/internal-plugin-user": "2.60.0",
69
+ "@webex/plugin-people": "2.60.0",
70
70
  "@webex/ts-sdp": "1.0.1",
71
- "@webex/webex-core": "^2.59.8-next.1",
71
+ "@webex/webex-core": "2.60.0",
72
72
  "bowser": "^2.11.0",
73
73
  "btoa": "^1.2.1",
74
74
  "dotenv": "^4.0.0",
@@ -79,6 +79,5 @@
79
79
  "sdp-transform": "^2.12.0",
80
80
  "uuid": "^3.3.2",
81
81
  "webrtc-adapter": "^7.7.0"
82
- },
83
- "version": "2.59.8-next.2"
84
- }
82
+ }
83
+ }
@@ -0,0 +1,134 @@
1
+ import * as MEETINGCONSTANTS from '../../constants';
2
+
3
+ /**
4
+ * Extended Error object for reclaim host role empty or wrong key
5
+ */
6
+ export class ReclaimHostEmptyWrongKeyError extends Error {
7
+ sdkMessage: string;
8
+ error: null;
9
+ code: number;
10
+
11
+ /**
12
+ *
13
+ * @constructor
14
+ * @param {String} [message]
15
+ * @param {Object} [error]
16
+ */
17
+ constructor(
18
+ message: string = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_EMPTY_OR_WRONG_KEY
19
+ .MESSAGE,
20
+ error: any = null
21
+ ) {
22
+ super(message);
23
+
24
+ if (Error.captureStackTrace) {
25
+ Error.captureStackTrace(this, ReclaimHostEmptyWrongKeyError);
26
+ }
27
+
28
+ this.name = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_EMPTY_OR_WRONG_KEY.NAME;
29
+ this.sdkMessage =
30
+ message || MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_EMPTY_OR_WRONG_KEY.MESSAGE;
31
+ this.error = error;
32
+
33
+ this.code = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_EMPTY_OR_WRONG_KEY.CODE;
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Extended Error object for reclaim host role not supported
39
+ */
40
+ export class ReclaimHostNotSupportedError extends Error {
41
+ sdkMessage: string;
42
+ error: null;
43
+ code: number;
44
+
45
+ /**
46
+ *
47
+ * @constructor
48
+ * @param {String} [message]
49
+ * @param {Object} [error]
50
+ */
51
+ constructor(
52
+ message: string = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_SUPPORTED.MESSAGE,
53
+ error: any = null
54
+ ) {
55
+ super(message);
56
+
57
+ if (Error.captureStackTrace) {
58
+ Error.captureStackTrace(this, ReclaimHostNotSupportedError);
59
+ }
60
+
61
+ this.name = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_SUPPORTED.NAME;
62
+ this.sdkMessage =
63
+ message || MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_SUPPORTED.MESSAGE;
64
+ this.error = error;
65
+
66
+ this.code = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_SUPPORTED.CODE;
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Extended Error object for reclaim host role not allowed for other participants
72
+ */
73
+ export class ReclaimHostNotAllowedError extends Error {
74
+ sdkMessage: string;
75
+ error: null;
76
+ code: number;
77
+
78
+ /**
79
+ *
80
+ * @constructor
81
+ * @param {String} [message]
82
+ * @param {Object} [error]
83
+ */
84
+ constructor(
85
+ message: string = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_ALLOWED.MESSAGE,
86
+ error: any = null
87
+ ) {
88
+ super(message);
89
+
90
+ if (Error.captureStackTrace) {
91
+ Error.captureStackTrace(this, ReclaimHostNotAllowedError);
92
+ }
93
+
94
+ this.name = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_ALLOWED.NAME;
95
+ this.sdkMessage =
96
+ message || MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_ALLOWED.MESSAGE;
97
+ this.error = error;
98
+
99
+ this.code = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_ALLOWED.CODE;
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Extended Error object for reclaim host role when user is host already
105
+ */
106
+ export class ReclaimHostIsHostAlreadyError extends Error {
107
+ sdkMessage: string;
108
+ error: null;
109
+ code: number;
110
+
111
+ /**
112
+ *
113
+ * @constructor
114
+ * @param {String} [message]
115
+ * @param {Object} [error]
116
+ */
117
+ constructor(
118
+ message: string = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_IS_ALREADY_HOST.MESSAGE,
119
+ error: any = null
120
+ ) {
121
+ super(message);
122
+
123
+ if (Error.captureStackTrace) {
124
+ Error.captureStackTrace(this, ReclaimHostIsHostAlreadyError);
125
+ }
126
+
127
+ this.name = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_IS_ALREADY_HOST.NAME;
128
+ this.sdkMessage =
129
+ message || MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_IS_ALREADY_HOST.MESSAGE;
130
+ this.error = error;
131
+
132
+ this.code = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_IS_ALREADY_HOST.CODE;
133
+ }
134
+ }
package/src/config.ts CHANGED
@@ -88,8 +88,8 @@ export default {
88
88
  enableExtmap: false,
89
89
  experimental: {
90
90
  enableMediaNegotiatedEvent: false,
91
- enableUnifiedMeetings: false,
92
- enableAdhocMeetings: false,
91
+ enableUnifiedMeetings: true,
92
+ enableAdhocMeetings: true,
93
93
  enableTurnDiscovery: true,
94
94
  },
95
95
  },
package/src/constants.ts CHANGED
@@ -239,6 +239,13 @@ export const CALENDAR_EVENTS = {
239
239
  DELETE: 'event:calendar.meeting.delete',
240
240
  };
241
241
 
242
+ export const ASSIGN_ROLES_ERROR_CODES = {
243
+ ReclaimHostNotSupportedErrorCode: 2400127,
244
+ ReclaimHostNotAllowedErrorCode: 2403135,
245
+ ReclaimHostEmptyWrongKeyErrorCode: 2403136,
246
+ ReclaimHostIsHostAlreadyErrorCode: 2409150,
247
+ };
248
+
242
249
  export const DEFAULT_GET_STATS_FILTER = {
243
250
  types: [
244
251
  'track',
@@ -308,6 +315,8 @@ export const EVENT_TRIGGERS = {
308
315
  MEETING_SELF_IS_SHARING_BLOCKED: 'meeting:self:isSharingBlocked',
309
316
  MEETING_CONTROLS_LAYOUT_UPDATE: 'meeting:layout:update',
310
317
  MEETING_ENTRY_EXIT_TONE_UPDATE: 'meeting:entryExitTone:update',
318
+ MEETING_NO_FRAMES_SENT: 'meeting:noFramesSent',
319
+ MEETING_NO_VIDEO_ENCODED: 'meeting:noVideoEncoded',
311
320
  MEMBERS_UPDATE: 'members:update',
312
321
  MEMBERS_CONTENT_UPDATE: 'members:content:update',
313
322
  MEMBERS_HOST_UPDATE: 'members:host:update',
@@ -447,6 +456,30 @@ export const ERROR_DICTIONARY = {
447
456
  MESSAGE: 'Captcha is required.',
448
457
  CODE: 8,
449
458
  },
459
+ RECLAIM_HOST_ROLE_NOT_SUPPORTED: {
460
+ NAME: 'ReclaimHostRoleNotSupported',
461
+ MESSAGE:
462
+ 'Non converged meetings, PSTN or SIP users in converged meetings are not supported currently.',
463
+ CODE: 9,
464
+ },
465
+ RECLAIM_HOST_ROLE_NOT_ALLOWED: {
466
+ NAME: 'ReclaimHostRoleNotAllowed',
467
+ MESSAGE:
468
+ 'Reclaim Host Role Not Allowed For Other Participants. Participants cannot claim host role in PMR meeting, space instant meeting or escalated instant meeting. However, the original host still can reclaim host role when it manually makes another participant to be the host.',
469
+ CODE: 10,
470
+ },
471
+ RECLAIM_HOST_ROLE_EMPTY_OR_WRONG_KEY: {
472
+ NAME: 'ReclaimHostRoleEmptyOrWrongKey',
473
+ MESSAGE:
474
+ 'Host Key Not Specified Or Matched. The original host can reclaim the host role without entering the host key. However, any other person who claims the host role must enter the host key to get it.',
475
+ CODE: 11,
476
+ },
477
+ RECLAIM_HOST_ROLE_IS_ALREADY_HOST: {
478
+ NAME: 'ReclaimHostRoleIsAlreadyHost',
479
+ MESSAGE:
480
+ 'Participant Having Host Role Already. Participant who sends request to reclaim host role has already a host role.',
481
+ CODE: 12,
482
+ },
450
483
  };
451
484
 
452
485
  export const FLOOR_ACTION = {
@@ -3770,6 +3770,12 @@ export default class Meeting extends StatelessWebexPlugin {
3770
3770
  opened LLM web socket connection successfully.`
3771
3771
  );
3772
3772
 
3773
+ if (!this.inMeetingActions.isClosedCaptionActive) {
3774
+ LoggerProxy.logger.error(
3775
+ `Meeting:index#receiveTranscription --> Transcription cannot be started until a licensed user enables it`
3776
+ );
3777
+ }
3778
+
3773
3779
  // retrieve and pass the payload
3774
3780
  this.transcription.subscribe((payload) => {
3775
3781
  Trigger.trigger(
@@ -4525,6 +4531,35 @@ export default class Meeting extends StatelessWebexPlugin {
4525
4531
  },
4526
4532
  });
4527
4533
  });
4534
+ this.statsAnalyzer.on(StatsAnalyzerEvents.NO_VIDEO_ENCODED, (data) => {
4535
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.NO_VIDEO_ENCODED);
4536
+ Trigger.trigger(
4537
+ this,
4538
+ {
4539
+ file: 'meeting/index',
4540
+ function: 'compareLastStatsResult',
4541
+ },
4542
+ EVENT_TRIGGERS.MEETING_NO_VIDEO_ENCODED,
4543
+ data
4544
+ );
4545
+ });
4546
+ this.statsAnalyzer.on(StatsAnalyzerEvents.NO_FRAMES_SENT, (data) => {
4547
+ if (
4548
+ (this.mediaProperties.mediaDirection?.sendVideo && data.mediaType === 'video') ||
4549
+ (this.mediaProperties.mediaDirection?.sendShare && data.mediaType === 'share')
4550
+ ) {
4551
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.NO_FRAMES_SENT);
4552
+ Trigger.trigger(
4553
+ this,
4554
+ {
4555
+ file: 'meeting/index',
4556
+ function: 'compareLastStatsResult',
4557
+ },
4558
+ EVENT_TRIGGERS.MEETING_NO_FRAMES_SENT,
4559
+ data
4560
+ );
4561
+ }
4562
+ });
4528
4563
  };
4529
4564
 
4530
4565
  /**
@@ -11,6 +11,7 @@ import MemberUtil from './util';
11
11
  */
12
12
  export default class Member {
13
13
  associatedUser: any;
14
+ canReclaimHost: boolean;
14
15
  id: any;
15
16
  isAudioMuted: any;
16
17
  isContentSharing: any;
@@ -57,6 +58,13 @@ export default class Member {
57
58
  }
58
59
  | any = {}
59
60
  ) {
61
+ /**
62
+ * @instance
63
+ * @type {Boolean}
64
+ * @public
65
+ * @memberof Member
66
+ */
67
+ this.canReclaimHost = false;
60
68
  /**
61
69
  * The server participant object
62
70
  * @instance
@@ -250,6 +258,7 @@ export default class Member {
250
258
  private processParticipant(participant: object) {
251
259
  this.participant = participant;
252
260
  if (participant) {
261
+ this.canReclaimHost = MemberUtil.canReclaimHost(participant);
253
262
  this.id = MemberUtil.extractId(participant);
254
263
  this.name = MemberUtil.extractName(participant);
255
264
  this.isAudioMuted = MemberUtil.isAudioMuted(participant);
@@ -20,6 +20,20 @@ import {IMediaStatus} from './member.types';
20
20
 
21
21
  const MemberUtil: any = {};
22
22
 
23
+ /**
24
+ * @param {Object} participant the locus participant
25
+ * @returns {Boolean}
26
+ */
27
+ MemberUtil.canReclaimHost = (participant) => {
28
+ if (!participant) {
29
+ throw new ParameterError(
30
+ 'canReclaimHostRole could not be processed, participant is undefined.'
31
+ );
32
+ }
33
+
34
+ return participant.canReclaimHostRole || false;
35
+ };
36
+
23
37
  /**
24
38
  * @param {Object} participant the locus participant
25
39
  * @returns {Boolean}
@@ -5,7 +5,14 @@ import {isEmpty} from 'lodash';
5
5
  // @ts-ignore
6
6
  import {StatelessWebexPlugin} from '@webex/webex-core';
7
7
 
8
- import {MEETINGS, EVENT_TRIGGERS, FLOOR_ACTION, CONTENT, WHITEBOARD} from '../constants';
8
+ import {
9
+ MEETINGS,
10
+ EVENT_TRIGGERS,
11
+ FLOOR_ACTION,
12
+ CONTENT,
13
+ WHITEBOARD,
14
+ ASSIGN_ROLES_ERROR_CODES,
15
+ } from '../constants';
9
16
  import Trigger from '../common/events/trigger-proxy';
10
17
  import Member from '../member';
11
18
  import LoggerProxy from '../common/logs/logger-proxy';
@@ -14,6 +21,13 @@ import ParameterError from '../common/errors/parameter';
14
21
  import MembersCollection from './collection';
15
22
  import MembersRequest from './request';
16
23
  import MembersUtil from './util';
24
+ import {ServerRoleShape} from './types';
25
+ import {
26
+ ReclaimHostEmptyWrongKeyError,
27
+ ReclaimHostIsHostAlreadyError,
28
+ ReclaimHostNotAllowedError,
29
+ ReclaimHostNotSupportedError,
30
+ } from '../common/errors/reclaim-host-role-error';
17
31
 
18
32
  /**
19
33
  * Members Update Event
@@ -686,6 +700,46 @@ export default class Members extends StatelessWebexPlugin {
686
700
  return this.membersRequest.addMembers(options);
687
701
  }
688
702
 
703
+ /**
704
+ * Assign role(s) to a member in the meeting
705
+ * @param {String} memberId
706
+ * @param {[ServerRoleShape]} roles - to assign an array of roles
707
+ * @returns {Promise}
708
+ * @public
709
+ * @memberof Members
710
+ */
711
+ public assignRoles(memberId: string, roles: Array<ServerRoleShape>) {
712
+ if (!this.locusUrl) {
713
+ return Promise.reject(
714
+ new ParameterError(
715
+ 'The associated locus url for this meetings members object must be defined.'
716
+ )
717
+ );
718
+ }
719
+ if (!memberId) {
720
+ return Promise.reject(
721
+ new ParameterError('The member id must be defined to assign the roles to a member.')
722
+ );
723
+ }
724
+ const options = MembersUtil.generateRoleAssignmentMemberOptions(memberId, roles, this.locusUrl);
725
+
726
+ return this.membersRequest.assignRolesMember(options).catch((error: any) => {
727
+ const errorCode = error.body?.errorCode;
728
+ switch (errorCode) {
729
+ case ASSIGN_ROLES_ERROR_CODES.ReclaimHostNotSupportedErrorCode:
730
+ return Promise.reject(new ReclaimHostNotSupportedError());
731
+ case ASSIGN_ROLES_ERROR_CODES.ReclaimHostNotAllowedErrorCode:
732
+ return Promise.reject(new ReclaimHostNotAllowedError());
733
+ case ASSIGN_ROLES_ERROR_CODES.ReclaimHostEmptyWrongKeyErrorCode:
734
+ return Promise.reject(new ReclaimHostEmptyWrongKeyError());
735
+ case ASSIGN_ROLES_ERROR_CODES.ReclaimHostIsHostAlreadyErrorCode:
736
+ return Promise.reject(new ReclaimHostIsHostAlreadyError());
737
+ default:
738
+ return Promise.reject(error);
739
+ }
740
+ });
741
+ }
742
+
689
743
  /**
690
744
  * Cancels an outgoing PSTN call to the associated meeting
691
745
  * @param {String} invitee