@webex/plugin-meetings 2.59.6 → 2.59.8-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/common/browser-detection.js +2 -2
  2. package/dist/common/browser-detection.js.map +1 -1
  3. package/dist/common/collection.js +2 -2
  4. package/dist/common/collection.js.map +1 -1
  5. package/dist/config.js +2 -2
  6. package/dist/config.js.map +1 -1
  7. package/dist/constants.js +0 -2
  8. package/dist/constants.js.map +1 -1
  9. package/dist/controls-options-manager/index.js +2 -2
  10. package/dist/controls-options-manager/index.js.map +1 -1
  11. package/dist/locus-info/controlsUtils.js +6 -6
  12. package/dist/locus-info/controlsUtils.js.map +1 -1
  13. package/dist/locus-info/index.js +18 -18
  14. package/dist/locus-info/index.js.map +1 -1
  15. package/dist/locus-info/parser.js +2 -2
  16. package/dist/locus-info/parser.js.map +1 -1
  17. package/dist/meeting/index.js +173 -167
  18. package/dist/meeting/index.js.map +1 -1
  19. package/dist/meeting/request.js +2 -2
  20. package/dist/meeting/request.js.map +1 -1
  21. package/dist/meeting/util.js +4 -4
  22. package/dist/meeting/util.js.map +1 -1
  23. package/dist/meeting-info/collection.js +2 -2
  24. package/dist/meeting-info/collection.js.map +1 -1
  25. package/dist/meetings/collection.js +2 -2
  26. package/dist/meetings/collection.js.map +1 -1
  27. package/dist/members/index.js +2 -2
  28. package/dist/members/index.js.map +1 -1
  29. package/dist/metrics/constants.js +0 -2
  30. package/dist/metrics/constants.js.map +1 -1
  31. package/dist/metrics/index.js +2 -2
  32. package/dist/metrics/index.js.map +1 -1
  33. package/dist/reachability/index.js +9 -2
  34. package/dist/reachability/index.js.map +1 -1
  35. package/dist/roap/index.js +12 -13
  36. package/dist/roap/index.js.map +1 -1
  37. package/dist/roap/turnDiscovery.js +44 -130
  38. package/dist/roap/turnDiscovery.js.map +1 -1
  39. package/dist/statsAnalyzer/global.js +12 -4
  40. package/dist/statsAnalyzer/global.js.map +1 -1
  41. package/dist/statsAnalyzer/index.js +14 -56
  42. package/dist/statsAnalyzer/index.js.map +1 -1
  43. package/dist/statsAnalyzer/mqaUtil.js +15 -15
  44. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  45. package/package.json +22 -21
  46. package/src/config.ts +2 -2
  47. package/src/constants.ts +0 -2
  48. package/src/meeting/index.ts +23 -47
  49. package/src/metrics/constants.ts +0 -2
  50. package/src/roap/index.ts +10 -14
  51. package/src/roap/turnDiscovery.ts +20 -48
  52. package/src/statsAnalyzer/global.ts +10 -2
  53. package/src/statsAnalyzer/index.ts +17 -80
  54. package/test/unit/spec/meeting/index.js +53 -83
  55. package/test/unit/spec/roap/index.ts +80 -84
  56. package/test/unit/spec/roap/turnDiscovery.ts +0 -21
  57. package/test/unit/spec/stats-analyzer/index.js +0 -151
  58. package/dist/common/browser-detection.d.ts +0 -9
  59. package/dist/common/collection.d.ts +0 -48
  60. package/dist/common/config.d.ts +0 -2
  61. package/dist/common/errors/captcha-error.d.ts +0 -15
  62. package/dist/common/errors/intent-to-join.d.ts +0 -16
  63. package/dist/common/errors/join-meeting.d.ts +0 -17
  64. package/dist/common/errors/media.d.ts +0 -15
  65. package/dist/common/errors/parameter.d.ts +0 -15
  66. package/dist/common/errors/password-error.d.ts +0 -15
  67. package/dist/common/errors/permission.d.ts +0 -14
  68. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  69. package/dist/common/errors/reconnection.d.ts +0 -15
  70. package/dist/common/errors/stats.d.ts +0 -15
  71. package/dist/common/errors/webex-errors.d.ts +0 -81
  72. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  73. package/dist/common/events/events-scope.d.ts +0 -17
  74. package/dist/common/events/events.d.ts +0 -12
  75. package/dist/common/events/trigger-proxy.d.ts +0 -2
  76. package/dist/common/events/util.d.ts +0 -2
  77. package/dist/common/logs/logger-config.d.ts +0 -2
  78. package/dist/common/logs/logger-proxy.d.ts +0 -2
  79. package/dist/common/logs/request.d.ts +0 -34
  80. package/dist/common/queue.d.ts +0 -32
  81. package/dist/config.d.ts +0 -73
  82. package/dist/constants.d.ts +0 -926
  83. package/dist/controls-options-manager/constants.d.ts +0 -4
  84. package/dist/controls-options-manager/enums.d.ts +0 -5
  85. package/dist/controls-options-manager/index.d.ts +0 -120
  86. package/dist/controls-options-manager/util.d.ts +0 -7
  87. package/dist/index.d.ts +0 -4
  88. package/dist/locus-info/controlsUtils.d.ts +0 -2
  89. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  90. package/dist/locus-info/fullState.d.ts +0 -2
  91. package/dist/locus-info/hostUtils.d.ts +0 -2
  92. package/dist/locus-info/index.d.ts +0 -269
  93. package/dist/locus-info/infoUtils.d.ts +0 -2
  94. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  95. package/dist/locus-info/parser.d.ts +0 -212
  96. package/dist/locus-info/selfUtils.d.ts +0 -2
  97. package/dist/media/index.d.ts +0 -32
  98. package/dist/media/properties.d.ts +0 -108
  99. package/dist/media/util.d.ts +0 -2
  100. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  101. package/dist/meeting/effectsState.d.ts +0 -42
  102. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  103. package/dist/meeting/index.d.ts +0 -1621
  104. package/dist/meeting/muteState.d.ts +0 -116
  105. package/dist/meeting/request.d.ts +0 -255
  106. package/dist/meeting/state.d.ts +0 -9
  107. package/dist/meeting/util.d.ts +0 -2
  108. package/dist/meeting-info/collection.d.ts +0 -20
  109. package/dist/meeting-info/index.d.ts +0 -57
  110. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  111. package/dist/meeting-info/request.d.ts +0 -22
  112. package/dist/meeting-info/util.d.ts +0 -2
  113. package/dist/meeting-info/utilv2.d.ts +0 -2
  114. package/dist/meetings/collection.d.ts +0 -23
  115. package/dist/meetings/index.d.ts +0 -296
  116. package/dist/meetings/request.d.ts +0 -27
  117. package/dist/meetings/util.d.ts +0 -18
  118. package/dist/member/index.d.ts +0 -147
  119. package/dist/member/member.types.d.ts +0 -11
  120. package/dist/member/util.d.ts +0 -2
  121. package/dist/members/collection.d.ts +0 -24
  122. package/dist/members/index.d.ts +0 -298
  123. package/dist/members/request.d.ts +0 -50
  124. package/dist/members/util.d.ts +0 -2
  125. package/dist/metrics/config.d.ts +0 -169
  126. package/dist/metrics/constants.d.ts +0 -59
  127. package/dist/metrics/index.d.ts +0 -152
  128. package/dist/networkQualityMonitor/index.d.ts +0 -70
  129. package/dist/peer-connection-manager/index.d.ts +0 -6
  130. package/dist/peer-connection-manager/util.d.ts +0 -6
  131. package/dist/personal-meeting-room/index.d.ts +0 -47
  132. package/dist/personal-meeting-room/request.d.ts +0 -14
  133. package/dist/personal-meeting-room/util.d.ts +0 -2
  134. package/dist/reachability/index.d.ts +0 -139
  135. package/dist/reachability/request.d.ts +0 -35
  136. package/dist/reactions/reactions.d.ts +0 -4
  137. package/dist/reactions/reactions.type.d.ts +0 -32
  138. package/dist/reconnection-manager/index.d.ts +0 -112
  139. package/dist/recording-controller/enums.d.ts +0 -7
  140. package/dist/recording-controller/index.d.ts +0 -193
  141. package/dist/recording-controller/util.d.ts +0 -13
  142. package/dist/roap/collection.d.ts +0 -10
  143. package/dist/roap/handler.d.ts +0 -47
  144. package/dist/roap/index.d.ts +0 -116
  145. package/dist/roap/request.d.ts +0 -35
  146. package/dist/roap/state.d.ts +0 -9
  147. package/dist/roap/turnDiscovery.d.ts +0 -81
  148. package/dist/roap/util.d.ts +0 -2
  149. package/dist/statsAnalyzer/global.d.ts +0 -118
  150. package/dist/statsAnalyzer/index.d.ts +0 -193
  151. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  152. package/dist/transcription/index.d.ts +0 -64
@@ -1 +1 @@
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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"}
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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"}
package/package.json CHANGED
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "2.59.6",
4
3
  "description": "",
5
4
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
6
5
  "contributors": [
@@ -30,6 +29,7 @@
30
29
  "scripts": {
31
30
  "build": "yarn run -T tsc --declaration true --declarationDir ./dist",
32
31
  "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": "2.59.6",
43
- "@webex/eslint-config-legacy": "2.59.6",
44
- "@webex/jest-config-legacy": "2.59.6",
45
- "@webex/legacy-tools": "2.59.6",
46
- "@webex/plugin-meetings": "2.59.6",
47
- "@webex/plugin-rooms": "2.59.6",
48
- "@webex/test-helper-chai": "2.59.6",
49
- "@webex/test-helper-mocha": "2.59.6",
50
- "@webex/test-helper-mock-webex": "2.59.6",
51
- "@webex/test-helper-retry": "2.59.6",
52
- "@webex/test-helper-test-users": "2.59.6",
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.1",
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",
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.6",
63
+ "@webex/common": "^2.59.8-next.1",
64
64
  "@webex/internal-media-core": "0.0.7-beta",
65
- "@webex/internal-plugin-device": "2.59.6",
66
- "@webex/internal-plugin-metrics": "2.59.6",
67
- "@webex/internal-plugin-support": "2.59.6",
68
- "@webex/internal-plugin-user": "2.59.6",
69
- "@webex/plugin-people": "2.59.6",
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",
70
70
  "@webex/ts-sdp": "1.0.1",
71
- "@webex/webex-core": "2.59.6",
71
+ "@webex/webex-core": "^2.59.8-next.1",
72
72
  "bowser": "^2.11.0",
73
73
  "btoa": "^1.2.1",
74
74
  "dotenv": "^4.0.0",
@@ -79,5 +79,6 @@
79
79
  "sdp-transform": "^2.12.0",
80
80
  "uuid": "^3.3.2",
81
81
  "webrtc-adapter": "^7.7.0"
82
- }
83
- }
82
+ },
83
+ "version": "2.59.8-next.1"
84
+ }
package/src/config.ts CHANGED
@@ -88,8 +88,8 @@ export default {
88
88
  enableExtmap: false,
89
89
  experimental: {
90
90
  enableMediaNegotiatedEvent: false,
91
- enableUnifiedMeetings: true,
92
- enableAdhocMeetings: true,
91
+ enableUnifiedMeetings: false,
92
+ enableAdhocMeetings: false,
93
93
  enableTurnDiscovery: true,
94
94
  },
95
95
  },
package/src/constants.ts CHANGED
@@ -308,8 +308,6 @@ export const EVENT_TRIGGERS = {
308
308
  MEETING_SELF_IS_SHARING_BLOCKED: 'meeting:self:isSharingBlocked',
309
309
  MEETING_CONTROLS_LAYOUT_UPDATE: 'meeting:layout:update',
310
310
  MEETING_ENTRY_EXIT_TONE_UPDATE: 'meeting:entryExitTone:update',
311
- MEETING_NO_FRAMES_SENT: 'meeting:noFramesSent',
312
- MEETING_NO_VIDEO_ENCODED: 'meeting:noVideoEncoded',
313
311
  MEMBERS_UPDATE: 'members:update',
314
312
  MEMBERS_CONTENT_UPDATE: 'members:content:update',
315
313
  MEMBERS_HOST_UPDATE: 'members:host:update',
@@ -462,6 +462,7 @@ export default class Meeting extends StatelessWebexPlugin {
462
462
  shareStatus: string;
463
463
  statsAnalyzer: StatsAnalyzer;
464
464
  transcription: Transcription;
465
+ receiveTranscription: boolean;
465
466
  updateMediaConnections: (mediaConnections: any[]) => void;
466
467
  endCallInitiateJoinReq: any;
467
468
  endJoinReqResp: any;
@@ -1761,8 +1762,8 @@ export default class Meeting extends StatelessWebexPlugin {
1761
1762
  LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,
1762
1763
  ({caption, transcribing}) => {
1763
1764
  // @ts-ignore - config coming from registerPlugin
1764
- if (transcribing && this.transcription && this.config.receiveTranscription) {
1765
- this.receiveTranscription();
1765
+ if (transcribing && !this.transcription && this.config.receiveTranscription) {
1766
+ this.startTranscription();
1766
1767
  } else if (!transcribing && this.transcription) {
1767
1768
  Trigger.trigger(
1768
1769
  this,
@@ -2261,8 +2262,17 @@ export default class Meeting extends StatelessWebexPlugin {
2261
2262
  });
2262
2263
  }
2263
2264
  });
2264
- this.locusInfo.on(LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, (payload) => {
2265
+ this.locusInfo.on(LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, async (payload) => {
2265
2266
  this.stopKeepAlive();
2267
+ // @ts-ignore
2268
+ if (!this.transcription && (this.config.receiveTranscription || this.receiveTranscription)) {
2269
+ if (this.isTranscriptionSupported()) {
2270
+ await this.startTranscription();
2271
+ LoggerProxy.logger.info(
2272
+ 'Meeting:index#setUpLocusInfoSelfListener --> enabled to receive transcription for guest user!'
2273
+ );
2274
+ }
2275
+ }
2266
2276
 
2267
2277
  if (payload) {
2268
2278
  Trigger.trigger(
@@ -3725,9 +3735,9 @@ export default class Meeting extends StatelessWebexPlugin {
3725
3735
  * @private
3726
3736
  * @returns {Promise<void>} a promise to open the WebSocket connection
3727
3737
  */
3728
- private async receiveTranscription() {
3738
+ private async startTranscription() {
3729
3739
  LoggerProxy.logger.info(
3730
- `Meeting:index#receiveTranscription -->
3740
+ `Meeting:index#startTranscription -->
3731
3741
  Attempting to generate a web socket url.`
3732
3742
  );
3733
3743
 
@@ -3744,7 +3754,7 @@ export default class Meeting extends StatelessWebexPlugin {
3744
3754
  });
3745
3755
 
3746
3756
  LoggerProxy.logger.info(
3747
- `Meeting:index#receiveTranscription -->
3757
+ `Meeting:index#startTranscription -->
3748
3758
  Generated web socket url succesfully.`
3749
3759
  );
3750
3760
 
@@ -3756,16 +3766,10 @@ export default class Meeting extends StatelessWebexPlugin {
3756
3766
  );
3757
3767
 
3758
3768
  LoggerProxy.logger.info(
3759
- `Meeting:index#receiveTranscription -->
3769
+ `Meeting:index#startTranscription -->
3760
3770
  opened LLM web socket connection successfully.`
3761
3771
  );
3762
3772
 
3763
- if (!this.inMeetingActions.isClosedCaptionActive) {
3764
- LoggerProxy.logger.error(
3765
- `Meeting:index#receiveTranscription --> Transcription cannot be started until a licensed user enables it`
3766
- );
3767
- }
3768
-
3769
3773
  // retrieve and pass the payload
3770
3774
  this.transcription.subscribe((payload) => {
3771
3775
  Trigger.trigger(
@@ -3783,7 +3787,7 @@ export default class Meeting extends StatelessWebexPlugin {
3783
3787
  // @ts-ignore - fix type
3784
3788
  this.transcription.connect(this.webex.credentials.supertoken.access_token);
3785
3789
  } catch (error) {
3786
- LoggerProxy.logger.error(`Meeting:index#receiveTranscription --> ${error}`);
3790
+ LoggerProxy.logger.error(`Meeting:index#startTranscription --> ${error}`);
3787
3791
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.RECEIVE_TRANSCRIPTION_FAILURE, {
3788
3792
  correlation_id: this.correlationId,
3789
3793
  reason: error.message,
@@ -3956,6 +3960,7 @@ export default class Meeting extends StatelessWebexPlugin {
3956
3960
  .then((join) => {
3957
3961
  joinSuccess(join);
3958
3962
  this.deferJoin = undefined;
3963
+ this.receiveTranscription = !!options.receiveTranscription;
3959
3964
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.JOIN_SUCCESS, {
3960
3965
  correlation_id: this.correlationId,
3961
3966
  });
@@ -3965,10 +3970,10 @@ export default class Meeting extends StatelessWebexPlugin {
3965
3970
  .then(async (join) => {
3966
3971
  if (isBrowser) {
3967
3972
  // @ts-ignore - config coming from registerPlugin
3968
- if (this.config.receiveTranscription || options.receiveTranscription) {
3973
+ if (this.config.receiveTranscription || this.receiveTranscription) {
3969
3974
  if (this.isTranscriptionSupported()) {
3970
- await this.receiveTranscription();
3971
- LoggerProxy.logger.info('Meeting:index#join --> enabled to recieve transcription!');
3975
+ await this.startTranscription();
3976
+ LoggerProxy.logger.info('Meeting:index#join --> enabled to receive transcription!');
3972
3977
  }
3973
3978
  }
3974
3979
  } else {
@@ -4520,35 +4525,6 @@ export default class Meeting extends StatelessWebexPlugin {
4520
4525
  },
4521
4526
  });
4522
4527
  });
4523
- this.statsAnalyzer.on(StatsAnalyzerEvents.NO_VIDEO_ENCODED, (data) => {
4524
- Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.NO_VIDEO_ENCODED);
4525
- Trigger.trigger(
4526
- this,
4527
- {
4528
- file: 'meeting/index',
4529
- function: 'compareLastStatsResult',
4530
- },
4531
- EVENT_TRIGGERS.MEETING_NO_VIDEO_ENCODED,
4532
- data
4533
- );
4534
- });
4535
- this.statsAnalyzer.on(StatsAnalyzerEvents.NO_FRAMES_SENT, (data) => {
4536
- if (
4537
- (this.mediaProperties.mediaDirection?.sendVideo && data.mediaType === 'video') ||
4538
- (this.mediaProperties.mediaDirection?.sendShare && data.mediaType === 'share')
4539
- ) {
4540
- Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.NO_FRAMES_SENT);
4541
- Trigger.trigger(
4542
- this,
4543
- {
4544
- file: 'meeting/index',
4545
- function: 'compareLastStatsResult',
4546
- },
4547
- EVENT_TRIGGERS.MEETING_NO_FRAMES_SENT,
4548
- data
4549
- );
4550
- }
4551
- });
4552
4528
  };
4553
4529
 
4554
4530
  /**
@@ -5733,7 +5709,7 @@ export default class Meeting extends StatelessWebexPlugin {
5733
5709
  if (layoutType) {
5734
5710
  if (!LAYOUT_TYPES.includes(layoutType)) {
5735
5711
  return this.rejectWithErrorLog(
5736
- 'Meeting:index#changeVideoLayout --> cannot change video layout, invalid layoutType recieved.'
5712
+ 'Meeting:index#changeVideoLayout --> cannot change video layout, invalid layoutType received.'
5737
5713
  );
5738
5714
  }
5739
5715
 
@@ -1,8 +1,6 @@
1
1
  // Metrics constants ----------------------------------------------------------
2
2
 
3
3
  const BEHAVIORAL_METRICS = {
4
- NO_FRAMES_SENT: 'js_sdk_meetings_no_frames_sent',
5
- NO_VIDEO_ENCODED: 'js_sdk_meetings_no_video_encoded',
6
4
  MEETINGS_REGISTRATION_FAILED: 'js_sdk_meetings_registration_failed',
7
5
  MEETINGS_REGISTRATION_SUCCESS: 'js_sdk_meetings_registration_success',
8
6
  MERCURY_CONNECTION_FAILURE: 'js_sdk_mercury_connection_failure',
package/src/roap/index.ts CHANGED
@@ -287,22 +287,18 @@ export default class Roap extends StatelessWebexPlugin {
287
287
  // When reconnecting, it's important that the first roap message being sent out has empty media id.
288
288
  // Normally this is the roap offer, but when TURN discovery is enabled,
289
289
  // then this is the TURN discovery request message
290
- return this.turnDiscovery
291
- .isSkipped(meeting)
292
- .then((isTurnDiscoverySkipped) => {
293
- const sendEmptyMediaId = reconnect && isTurnDiscoverySkipped;
290
+ const sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;
294
291
 
295
- return this.roapRequest.sendRoap({
296
- roapMessage,
297
- correlationId: meeting.correlationId,
298
- locusSelfUrl: meeting.selfUrl,
299
- mediaId: sendEmptyMediaId ? '' : meeting.mediaId,
300
- audioMuted: meeting.audio?.isLocallyMuted(),
301
- videoMuted: meeting.video?.isLocallyMuted(),
302
- meetingId: meeting.id,
303
- });
292
+ return this.roapRequest
293
+ .sendRoap({
294
+ roapMessage,
295
+ correlationId: meeting.correlationId,
296
+ locusSelfUrl: meeting.selfUrl,
297
+ mediaId: sendEmptyMediaId ? '' : meeting.mediaId,
298
+ audioMuted: meeting.audio?.isLocallyMuted(),
299
+ videoMuted: meeting.video?.isLocallyMuted(),
300
+ meetingId: meeting.id,
304
301
  })
305
-
306
302
  .then(({locus, mediaConnections}) => {
307
303
  this.roapHandler.submit({
308
304
  type: ROAP.SEND_ROAP_MSG_SUCCESS,
@@ -230,14 +230,28 @@ export default class TurnDiscovery {
230
230
  * media connection just after a reconnection
231
231
  * @returns {Promise}
232
232
  */
233
- async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
234
- const turnDiscoverySkippedReason = await this.getSkipReason(meeting);
233
+ doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
234
+ // @ts-ignore - fix type
235
+ const isAnyClusterReachable = meeting.webex.meetings.reachability.isAnyClusterReachable();
236
+
237
+ if (isAnyClusterReachable) {
238
+ LoggerProxy.logger.info(
239
+ 'Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery'
240
+ );
235
241
 
236
- if (turnDiscoverySkippedReason) {
237
- return {
242
+ return Promise.resolve({
238
243
  turnServerInfo: undefined,
239
- turnDiscoverySkippedReason,
240
- };
244
+ turnDiscoverySkippedReason: 'reachability',
245
+ });
246
+ }
247
+
248
+ // @ts-ignore - fix type
249
+ if (!meeting.config.experimental.enableTurnDiscovery) {
250
+ LoggerProxy.logger.info(
251
+ 'Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it'
252
+ );
253
+
254
+ return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'config'});
241
255
  }
242
256
 
243
257
  return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting)
@@ -266,46 +280,4 @@ export default class TurnDiscovery {
266
280
  return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: undefined});
267
281
  });
268
282
  }
269
-
270
- /**
271
- * Gets the reason why reachability is skipped.
272
- *
273
- * @param {Meeting} meeting
274
- * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
275
- */
276
- private async getSkipReason(meeting: Meeting): Promise<string> {
277
- // @ts-ignore - fix type
278
- const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
279
-
280
- if (isAnyClusterReachable) {
281
- LoggerProxy.logger.info(
282
- 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
283
- );
284
-
285
- return 'reachability';
286
- }
287
-
288
- // @ts-ignore - fix type
289
- if (!meeting.config.experimental.enableTurnDiscovery) {
290
- LoggerProxy.logger.info(
291
- 'Roap:turnDiscovery#getSkipReason --> TURN discovery disabled in config, skipping it'
292
- );
293
-
294
- return 'config';
295
- }
296
-
297
- return '';
298
- }
299
-
300
- /**
301
- * Checks if TURN discovery is skipped.
302
- *
303
- * @param {Meeting} meeting
304
- * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
305
- */
306
- async isSkipped(meeting) {
307
- const skipReason = await this.getSkipReason(meeting);
308
-
309
- return !!skipReason;
310
- }
311
283
  }
@@ -76,11 +76,20 @@ const STATS_DEFAULT = {
76
76
  },
77
77
  },
78
78
  resolutions: {
79
+ audio: {
80
+ send: {
81
+ width: 0,
82
+ height: 0,
83
+ },
84
+ recv: {
85
+ width: 0,
86
+ height: 0,
87
+ },
88
+ },
79
89
  video: {
80
90
  send: {
81
91
  width: 0,
82
92
  height: 0,
83
- framesSent: 0,
84
93
  },
85
94
  recv: {
86
95
  width: 0,
@@ -91,7 +100,6 @@ const STATS_DEFAULT = {
91
100
  send: {
92
101
  width: 0,
93
102
  height: 0,
94
- framesSent: 0,
95
103
  },
96
104
  recv: {
97
105
  width: 0,