@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.11

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 (281) hide show
  1. package/dist/common/browser-detection.js.map +1 -1
  2. package/dist/common/collection.js.map +1 -1
  3. package/dist/common/config.js.map +1 -1
  4. package/dist/common/errors/captcha-error.js +7 -0
  5. package/dist/common/errors/captcha-error.js.map +1 -1
  6. package/dist/common/errors/intent-to-join.js +8 -0
  7. package/dist/common/errors/intent-to-join.js.map +1 -1
  8. package/dist/common/errors/join-meeting.js +8 -0
  9. package/dist/common/errors/join-meeting.js.map +1 -1
  10. package/dist/common/errors/media.js +7 -0
  11. package/dist/common/errors/media.js.map +1 -1
  12. package/dist/common/errors/parameter.js.map +1 -1
  13. package/dist/common/errors/password-error.js +7 -0
  14. package/dist/common/errors/password-error.js.map +1 -1
  15. package/dist/common/errors/permission.js +7 -0
  16. package/dist/common/errors/permission.js.map +1 -1
  17. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  18. package/dist/common/errors/reconnection.js +7 -0
  19. package/dist/common/errors/reconnection.js.map +1 -1
  20. package/dist/common/errors/stats.js +7 -0
  21. package/dist/common/errors/stats.js.map +1 -1
  22. package/dist/common/errors/webex-errors.js +5 -29
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/errors/webex-meetings-error.js +5 -2
  25. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  26. package/dist/common/events/events-scope.js.map +1 -1
  27. package/dist/common/events/events.js.map +1 -1
  28. package/dist/common/events/trigger-proxy.js.map +1 -1
  29. package/dist/common/events/util.js.map +1 -1
  30. package/dist/common/logs/logger-config.js.map +1 -1
  31. package/dist/common/logs/logger-proxy.js.map +1 -1
  32. package/dist/common/logs/request.js +3 -0
  33. package/dist/common/logs/request.js.map +1 -1
  34. package/dist/common/queue.js.map +1 -1
  35. package/dist/config.js +1 -0
  36. package/dist/config.js.map +1 -1
  37. package/dist/constants.js +15 -74
  38. package/dist/constants.js.map +1 -1
  39. package/dist/locus-info/controlsUtils.js.map +1 -1
  40. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  41. package/dist/locus-info/fullState.js.map +1 -1
  42. package/dist/locus-info/hostUtils.js.map +1 -1
  43. package/dist/locus-info/index.js +43 -5
  44. package/dist/locus-info/index.js.map +1 -1
  45. package/dist/locus-info/infoUtils.js +4 -0
  46. package/dist/locus-info/infoUtils.js.map +1 -1
  47. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  48. package/dist/locus-info/parser.js +12 -3
  49. package/dist/locus-info/parser.js.map +1 -1
  50. package/dist/locus-info/selfUtils.js.map +1 -1
  51. package/dist/media/index.js +71 -210
  52. package/dist/media/index.js.map +1 -1
  53. package/dist/media/internal-media-core-wrapper.js +22 -0
  54. package/dist/media/internal-media-core-wrapper.js.map +1 -0
  55. package/dist/media/properties.js +32 -25
  56. package/dist/media/properties.js.map +1 -1
  57. package/dist/media/util.js +0 -27
  58. package/dist/media/util.js.map +1 -1
  59. package/dist/mediaQualityMetrics/config.js.map +1 -1
  60. package/dist/meeting/effectsState.js +8 -1
  61. package/dist/meeting/effectsState.js.map +1 -1
  62. package/dist/meeting/index.js +1146 -602
  63. package/dist/meeting/index.js.map +1 -1
  64. package/dist/meeting/muteState.js +6 -0
  65. package/dist/meeting/muteState.js.map +1 -1
  66. package/dist/meeting/request.js +83 -24
  67. package/dist/meeting/request.js.map +1 -1
  68. package/dist/meeting/state.js.map +1 -1
  69. package/dist/meeting/util.js +5 -44
  70. package/dist/meeting/util.js.map +1 -1
  71. package/dist/meeting-info/collection.js +4 -1
  72. package/dist/meeting-info/collection.js.map +1 -1
  73. package/dist/meeting-info/index.js +5 -0
  74. package/dist/meeting-info/index.js.map +1 -1
  75. package/dist/meeting-info/meeting-info-v2.js +14 -2
  76. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  77. package/dist/meeting-info/request.js +3 -0
  78. package/dist/meeting-info/request.js.map +1 -1
  79. package/dist/meeting-info/util.js.map +1 -1
  80. package/dist/meeting-info/utilv2.js.map +1 -1
  81. package/dist/meetings/collection.js +4 -1
  82. package/dist/meetings/collection.js.map +1 -1
  83. package/dist/meetings/index.js +136 -25
  84. package/dist/meetings/index.js.map +1 -1
  85. package/dist/meetings/request.js +4 -0
  86. package/dist/meetings/request.js.map +1 -1
  87. package/dist/meetings/util.js +24 -1
  88. package/dist/meetings/util.js.map +1 -1
  89. package/dist/member/index.js +30 -7
  90. package/dist/member/index.js.map +1 -1
  91. package/dist/member/util.js +2 -1
  92. package/dist/member/util.js.map +1 -1
  93. package/dist/members/collection.js +1 -0
  94. package/dist/members/collection.js.map +1 -1
  95. package/dist/members/index.js +82 -1
  96. package/dist/members/index.js.map +1 -1
  97. package/dist/members/request.js +19 -9
  98. package/dist/members/request.js.map +1 -1
  99. package/dist/members/util.js.map +1 -1
  100. package/dist/metrics/config.js.map +1 -1
  101. package/dist/metrics/constants.js.map +1 -1
  102. package/dist/metrics/index.js +8 -0
  103. package/dist/metrics/index.js.map +1 -1
  104. package/dist/multistream/mediaRequestManager.js +133 -0
  105. package/dist/multistream/mediaRequestManager.js.map +1 -0
  106. package/dist/multistream/multistreamMedia.js +116 -0
  107. package/dist/multistream/multistreamMedia.js.map +1 -0
  108. package/dist/multistream/receiveSlot.js +209 -0
  109. package/dist/multistream/receiveSlot.js.map +1 -0
  110. package/dist/multistream/receiveSlotManager.js +195 -0
  111. package/dist/multistream/receiveSlotManager.js.map +1 -0
  112. package/dist/multistream/remoteMedia.js +289 -0
  113. package/dist/multistream/remoteMedia.js.map +1 -0
  114. package/dist/multistream/remoteMediaGroup.js +243 -0
  115. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  116. package/dist/multistream/remoteMediaManager.js +1113 -0
  117. package/dist/multistream/remoteMediaManager.js.map +1 -0
  118. package/dist/networkQualityMonitor/index.js +10 -2
  119. package/dist/networkQualityMonitor/index.js.map +1 -1
  120. package/dist/personal-meeting-room/index.js +11 -0
  121. package/dist/personal-meeting-room/index.js.map +1 -1
  122. package/dist/personal-meeting-room/request.js +2 -1
  123. package/dist/personal-meeting-room/request.js.map +1 -1
  124. package/dist/personal-meeting-room/util.js.map +1 -1
  125. package/dist/reachability/index.js +17 -7
  126. package/dist/reachability/index.js.map +1 -1
  127. package/dist/reachability/request.js +1 -0
  128. package/dist/reachability/request.js.map +1 -1
  129. package/dist/reactions/reactions.js +111 -0
  130. package/dist/reactions/reactions.js.map +1 -0
  131. package/dist/reactions/reactions.type.js +40 -0
  132. package/dist/reactions/reactions.type.js.map +1 -0
  133. package/dist/reconnection-manager/index.js +130 -132
  134. package/dist/reconnection-manager/index.js.map +1 -1
  135. package/dist/roap/index.js +58 -231
  136. package/dist/roap/index.js.map +1 -1
  137. package/dist/roap/request.js +7 -116
  138. package/dist/roap/request.js.map +1 -1
  139. package/dist/roap/turnDiscovery.js +20 -6
  140. package/dist/roap/turnDiscovery.js.map +1 -1
  141. package/dist/statsAnalyzer/global.js +2 -0
  142. package/dist/statsAnalyzer/global.js.map +1 -1
  143. package/dist/statsAnalyzer/index.js +58 -37
  144. package/dist/statsAnalyzer/index.js.map +1 -1
  145. package/dist/statsAnalyzer/mqaUtil.js +9 -3
  146. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  147. package/dist/transcription/index.js +10 -3
  148. package/dist/transcription/index.js.map +1 -1
  149. package/package.json +21 -20
  150. package/src/common/{browser-detection.js → browser-detection.ts} +1 -1
  151. package/src/common/collection.ts +6 -6
  152. package/src/common/{config.js → config.ts} +1 -1
  153. package/src/common/errors/{captcha-error.js → captcha-error.ts} +5 -1
  154. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +6 -1
  155. package/src/common/errors/{join-meeting.js → join-meeting.ts} +6 -1
  156. package/src/common/errors/{media.js → media.ts} +5 -1
  157. package/src/common/errors/parameter.ts +3 -2
  158. package/src/common/errors/{password-error.js → password-error.ts} +5 -1
  159. package/src/common/errors/{permission.js → permission.ts} +5 -1
  160. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  161. package/src/common/errors/{reconnection.js → reconnection.ts} +5 -1
  162. package/src/common/errors/{stats.js → stats.ts} +5 -1
  163. package/src/common/errors/{webex-errors.js → webex-errors.ts} +1 -20
  164. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +3 -1
  165. package/src/common/events/{events-scope.js → events-scope.ts} +1 -1
  166. package/src/common/events/{events.js → events.ts} +0 -0
  167. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +1 -2
  168. package/src/common/events/{util.js → util.ts} +1 -1
  169. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  170. package/src/common/logs/{logger-proxy.js → logger-proxy.ts} +1 -1
  171. package/src/common/logs/{request.js → request.ts} +12 -2
  172. package/src/common/queue.ts +1 -2
  173. package/src/{config.js → config.ts} +2 -0
  174. package/src/constants.ts +139 -179
  175. package/src/locus-info/{controlsUtils.js → controlsUtils.ts} +4 -4
  176. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  177. package/src/locus-info/{fullState.js → fullState.ts} +1 -1
  178. package/src/locus-info/{hostUtils.js → hostUtils.ts} +5 -5
  179. package/src/locus-info/{index.js → index.ts} +67 -32
  180. package/src/locus-info/{infoUtils.js → infoUtils.ts} +7 -4
  181. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +13 -13
  182. package/src/locus-info/{parser.js → parser.ts} +22 -12
  183. package/src/locus-info/{selfUtils.js → selfUtils.ts} +17 -19
  184. package/src/media/{index.js → index.ts} +130 -205
  185. package/src/media/internal-media-core-wrapper.ts +9 -0
  186. package/src/media/{properties.js → properties.ts} +35 -29
  187. package/src/media/util.ts +16 -0
  188. package/src/mediaQualityMetrics/{config.js → config.ts} +1 -1
  189. package/src/meeting/{effectsState.js → effectsState.ts} +12 -6
  190. package/src/meeting/{index.js → index.ts} +993 -474
  191. package/src/meeting/{muteState.js → muteState.ts} +16 -11
  192. package/src/meeting/{request.js → request.ts} +148 -36
  193. package/src/meeting/{state.js → state.ts} +6 -6
  194. package/src/meeting/{util.js → util.ts} +9 -51
  195. package/src/meeting-info/{collection.js → collection.ts} +4 -1
  196. package/src/meeting-info/{index.js → index.ts} +10 -6
  197. package/src/meeting-info/{meeting-info-v2.js → meeting-info-v2.ts} +28 -10
  198. package/src/meeting-info/{request.js → request.ts} +6 -2
  199. package/src/meeting-info/{util.js → util.ts} +6 -5
  200. package/src/meeting-info/{utilv2.js → utilv2.ts} +8 -7
  201. package/src/meetings/{collection.js → collection.ts} +5 -2
  202. package/src/meetings/{index.js → index.ts} +118 -22
  203. package/src/meetings/{request.js → request.ts} +6 -1
  204. package/src/meetings/{util.js → util.ts} +28 -5
  205. package/src/member/{index.js → index.ts} +46 -15
  206. package/src/member/{util.js → util.ts} +17 -16
  207. package/src/members/{collection.js → collection.ts} +2 -1
  208. package/src/members/{index.js → index.ts} +94 -26
  209. package/src/members/{request.js → request.ts} +16 -5
  210. package/src/members/{util.js → util.ts} +7 -7
  211. package/src/metrics/{config.js → config.ts} +0 -2
  212. package/src/metrics/{constants.js → constants.ts} +0 -0
  213. package/src/metrics/{index.js → index.ts} +27 -8
  214. package/src/multistream/mediaRequestManager.ts +166 -0
  215. package/src/multistream/multistreamMedia.ts +92 -0
  216. package/src/multistream/receiveSlot.ts +141 -0
  217. package/src/multistream/receiveSlotManager.ts +142 -0
  218. package/src/multistream/remoteMedia.ts +228 -0
  219. package/src/multistream/remoteMediaGroup.ts +224 -0
  220. package/src/multistream/remoteMediaManager.ts +911 -0
  221. package/src/networkQualityMonitor/{index.js → index.ts} +18 -3
  222. package/src/personal-meeting-room/{index.js → index.ts} +17 -4
  223. package/src/personal-meeting-room/{request.js → request.ts} +3 -1
  224. package/src/personal-meeting-room/{util.js → util.ts} +1 -1
  225. package/src/reachability/{index.js → index.ts} +28 -17
  226. package/src/reachability/request.ts +4 -2
  227. package/src/reactions/reactions.ts +104 -0
  228. package/src/reactions/reactions.type.ts +36 -0
  229. package/src/reconnection-manager/{index.js → index.ts} +81 -65
  230. package/src/roap/index.ts +229 -0
  231. package/src/roap/{request.js → request.ts} +15 -74
  232. package/src/roap/turnDiscovery.ts +26 -11
  233. package/src/statsAnalyzer/{global.js → global.ts} +2 -0
  234. package/src/statsAnalyzer/{index.js → index.ts} +66 -61
  235. package/src/statsAnalyzer/{mqaUtil.js → mqaUtil.ts} +6 -1
  236. package/src/transcription/{index.js → index.ts} +16 -11
  237. package/test/integration/spec/journey.js +1 -1
  238. package/test/integration/spec/space-meeting.js +1 -2
  239. package/test/unit/spec/locus-info/infoUtils.js +17 -1
  240. package/test/unit/spec/media/index.ts +207 -0
  241. package/test/unit/spec/media/properties.ts +73 -82
  242. package/test/unit/spec/meeting/effectsState.js +1 -3
  243. package/test/unit/spec/meeting/index.js +672 -245
  244. package/test/unit/spec/meeting/muteState.js +7 -0
  245. package/test/unit/spec/meeting/request.js +25 -1
  246. package/test/unit/spec/meeting/utils.js +63 -2
  247. package/test/unit/spec/meetings/index.js +0 -4
  248. package/test/unit/spec/members/index.js +164 -2
  249. package/test/unit/spec/multistream/mediaRequestManager.ts +515 -0
  250. package/test/unit/spec/multistream/receiveSlot.ts +104 -0
  251. package/test/unit/spec/multistream/receiveSlotManager.ts +173 -0
  252. package/test/unit/spec/multistream/remoteMedia.ts +225 -0
  253. package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
  254. package/test/unit/spec/multistream/remoteMediaManager.ts +1309 -0
  255. package/test/unit/spec/reconnection-manager/index.js +68 -2
  256. package/test/unit/spec/roap/index.ts +63 -35
  257. package/test/unit/spec/stats-analyzer/index.js +19 -22
  258. package/dist/peer-connection-manager/index.js +0 -794
  259. package/dist/peer-connection-manager/index.js.map +0 -1
  260. package/dist/peer-connection-manager/util.js +0 -124
  261. package/dist/peer-connection-manager/util.js.map +0 -1
  262. package/dist/roap/collection.js +0 -73
  263. package/dist/roap/collection.js.map +0 -1
  264. package/dist/roap/handler.js +0 -337
  265. package/dist/roap/handler.js.map +0 -1
  266. package/dist/roap/state.js +0 -164
  267. package/dist/roap/state.js.map +0 -1
  268. package/dist/roap/util.js +0 -102
  269. package/dist/roap/util.js.map +0 -1
  270. package/src/media/util.js +0 -38
  271. package/src/peer-connection-manager/index.js +0 -723
  272. package/src/peer-connection-manager/util.ts +0 -117
  273. package/src/roap/collection.js +0 -63
  274. package/src/roap/handler.js +0 -252
  275. package/src/roap/index.js +0 -380
  276. package/src/roap/state.js +0 -149
  277. package/src/roap/util.js +0 -93
  278. package/test/unit/spec/peerconnection-manager/index.js +0 -188
  279. package/test/unit/spec/peerconnection-manager/utils.js +0 -48
  280. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  281. package/test/unit/spec/roap/util.js +0 -30
@@ -1 +1 @@
1
- {"version":3,"names":["Roap","attrs","options","meeting","roapMessage","messageType","ROAP","ROAP_TYPES","OFFER","sdps","sdp","version","ROAP_VERSION","seq","roapSeq","tieBreaker","roapHandler","submit","type","SEND_ROAP_MSG","msg","correlationId","roapBody","localMedias","localSdp","roapRequest","attachRechabilityData","audioMuted","isAudioMuted","videoMuted","isVideoMuted","MeetingUtil","joinMeetingOptions","then","locus","SEND_ROAP_MSG_SUCCESS","setRoapSeq","RoapHandler","sendRoapOK","bind","sendRoapAnswer","roapFinished","RoapRequest","lastRoapOffer","turnDiscovery","TurnDiscovery","data","message","LoggerProxy","logger","log","TURN_DISCOVERY_RESPONSE","handleTurnDiscoveryResponse","RECEIVE_ROAP_MSG","RECEIVE_CALL_LEAVE","resolve","webex","meetings","meetingCollection","getByKey","OK","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","ANSWER","session","errorType","ERROR","reconnect","sendEmptyMediaId","config","experimental","enableTurnDiscovery","mediaConnections","updateMediaConnections","sequenceId","RoapCollection","onSessionSequenceFinish","mediaNegotiatedEvent","isBusy","processNextQueuedMediaUpdate","isReconnecting","doTurnDiscovery","StatelessWebexPlugin"],"sources":["index.js"],"sourcesContent":["import {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\nimport TurnDiscovery from './turnDiscovery';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs, options) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(this.attrs, this.options, this.sendRoapOK.bind(this), this.sendRoapAnswer.bind(this), this.roapFinished.bind(this));\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n roapEvent(data) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(`Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`);\n\n if (msg.messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n // turn discovery is not part of normal roap protocol and so we are not handling it\n // through the usual roap state machine\n this.turnDiscovery.handleTurnDiscoveryResponse(msg);\n }\n else {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId\n });\n }\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n stop(correlationId, seq) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n sendRoapOK(options) {\n return Promise.resolve().then(() => {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapAnswer(options) {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: options.audioMuted,\n videoMuted: options.videoMuted,\n meetingId: meeting.id\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapError(session, locus, errorType) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n const sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapCallRequest = (options) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!meeting.isAudioMuted(),\n videoMuted: !!meeting.isVideoMuted()\n }))\n // mediaId: meeting.mediaId\n }\n ]\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody})\n .then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n };\n\n /**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\n roapFinished(correlationId, sequenceId) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting, isReconnecting) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Roap","attrs","options","roapRequest","RoapRequest","turnDiscovery","TurnDiscovery","resolve","then","meeting","webex","meetings","meetingCollection","getByKey","correlationId","roapMessage","messageType","ROAP","ROAP_TYPES","OK","version","ROAP_VERSION","seq","LoggerProxy","logger","log","sendRoap","locusSelfUrl","selfUrl","mediaId","audioMuted","isAudioMuted","videoMuted","isVideoMuted","meetingId","id","preferTranscoding","isMultistream","ANSWER","sdps","sdp","ERROR","errorType","reconnect","tieBreaker","OFFER","sendEmptyMediaId","config","experimental","enableTurnDiscovery","locus","mediaConnections","updateMediaConnections","isReconnecting","doTurnDiscovery","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport RoapRequest from './request';\nimport TurnDiscovery from './turnDiscovery';\nimport Meeting from '../meeting';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} seq\n * @property {Number} tieBreaker\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: any;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @memberof Roap\n */\n public sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n });\n });\n }\n\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @memberof Roap\n */\n public sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapError(options) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType: options.errorType,\n seq: options.seq\n\n };\n\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`);\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {\n meeting, seq, sdp, reconnect, tieBreaker\n } = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker\n };\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n const sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n })\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n return locus;\n });\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":"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"}
@@ -22,18 +22,12 @@ _Object$defineProperty(exports, "__esModule", {
22
22
 
23
23
  exports.default = void 0;
24
24
 
25
- var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
26
-
27
25
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
28
26
 
29
- var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
30
-
31
27
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
32
28
 
33
29
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
34
30
 
35
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
36
-
37
31
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
38
32
 
39
33
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
@@ -54,8 +48,6 @@ var _metrics = _interopRequireDefault(require("../metrics"));
54
48
 
55
49
  var _config = require("../metrics/config");
56
50
 
57
- var _parameter = _interopRequireDefault(require("../common/errors/parameter"));
58
-
59
51
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
60
52
 
61
53
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -103,110 +95,6 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
103
95
 
104
96
  return localSdp;
105
97
  }
106
- }, {
107
- key: "joinMeetingWithRoap",
108
- value: function joinMeetingWithRoap(options) {
109
- var _this = this;
110
-
111
- _loggerProxy.default.logger.info('Roap:request#joinMeetingWithRoap --> Join locus with roap');
112
-
113
- _loggerProxy.default.logger.info("Roap:request#joinMeetingWithRoap --> Local SDP: ".concat(options.roapMessage));
114
-
115
- return _promise.default.resolve().then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
116
- var _options$preferTransc;
117
-
118
- var deviceUrl, url, body;
119
- return _regenerator.default.wrap(function _callee$(_context) {
120
- while (1) {
121
- switch (_context.prev = _context.next) {
122
- case 0:
123
- deviceUrl = _this.webex.internal.device.url;
124
- url = '';
125
- body = {
126
- deviceUrl: deviceUrl,
127
- usingResource: options.resourceId || null,
128
- correlationId: options.correlationId,
129
- localMedias: [{
130
- localSdp: (0, _stringify.default)(_this.attachRechabilityData({
131
- roapMessage: options.roapMessage,
132
- audioMuted: false,
133
- videoMuted: false
134
- }))
135
- }],
136
- clientMediaPreferences: {
137
- preferTranscoding: (_options$preferTransc = options.preferTranscoding) !== null && _options$preferTransc !== void 0 ? _options$preferTransc : true
138
- }
139
- };
140
-
141
- if (!options.locusUrl) {
142
- _context.next = 7;
143
- break;
144
- }
145
-
146
- url = "".concat(options.locusUrl, "/").concat(_constants.PARTICIPANT);
147
- _context.next = 22;
148
- break;
149
-
150
- case 7:
151
- if (!options.sipUrl) {
152
- _context.next = 21;
153
- break;
154
- }
155
-
156
- _context.prev = 8;
157
- _context.next = 11;
158
- return _this.webex.internal.services.waitForCatalog('postauth');
159
-
160
- case 11:
161
- url = "".concat(_this.webex.internal.services.get('locus'), "/").concat(_constants.LOCI, "/").concat(_constants.CALL);
162
- body.invitee = {
163
- address: options.sipTarget
164
- };
165
- _context.next = 19;
166
- break;
167
-
168
- case 15:
169
- _context.prev = 15;
170
- _context.t0 = _context["catch"](8);
171
-
172
- _loggerProxy.default.logger.error("Roap:request#joinMeetingWithRoap --> ".concat(_context.t0));
173
-
174
- throw _context.t0;
175
-
176
- case 19:
177
- _context.next = 22;
178
- break;
179
-
180
- case 21:
181
- throw new _parameter.default('Must provide a locusUrl or sipTarget');
182
-
183
- case 22:
184
- return _context.abrupt("return", _this.webex.request({
185
- method: _constants.HTTP_VERBS.POST,
186
- uri: url,
187
- body: body
188
- }).then(function (res) {
189
- var locus = res.body.locus;
190
- locus.roapSeq = options.roapMessage.seq;
191
- locus.id = locus.url.split('/').pop();
192
-
193
- _loggerProxy.default.logger.info("Roap:request#joinMeetingWithRoap --> Joined locus [".concat(locus.id, "][").concat(locus.fullState.lastActive, "]"));
194
-
195
- return locus;
196
- }).catch(function (err) {
197
- _loggerProxy.default.logger.error("Roap:request#joinMeetingWithRoap --> failed with error: ".concat(err));
198
-
199
- throw err;
200
- }));
201
-
202
- case 23:
203
- case "end":
204
- return _context.stop();
205
- }
206
- }
207
- }, _callee, null, [[8, 15]]);
208
- })));
209
- }
210
98
  /**
211
99
  * Sends a ROAP message
212
100
  * @param {Object} options
@@ -223,7 +111,7 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
223
111
  }, {
224
112
  key: "sendRoap",
225
113
  value: function sendRoap(options) {
226
- var _options$preferTransc2;
114
+ var _options$preferTransc;
227
115
 
228
116
  var roapMessage = options.roapMessage,
229
117
  locusSelfUrl = options.locusSelfUrl,
@@ -235,7 +123,8 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
235
123
  _loggerProxy.default.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
236
124
  }
237
125
 
238
- var mediaUrl = "".concat(locusSelfUrl, "/").concat(_constants.MEDIA);
126
+ var mediaUrl = "".concat(locusSelfUrl, "/").concat(_constants.MEDIA); // @ts-ignore
127
+
239
128
  var deviceUrl = this.webex.internal.device.url;
240
129
 
241
130
  _loggerProxy.default.logger.info("Roap:request#sendRoap --> ".concat(mediaUrl, " \n ").concat(roapMessage.messageType, " \n seq:").concat(roapMessage.seq));
@@ -243,7 +132,8 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
243
132
  _metrics.default.postEvent({
244
133
  event: _config.eventType.MEDIA_REQUEST,
245
134
  meetingId: meetingId
246
- });
135
+ }); // @ts-ignore
136
+
247
137
 
248
138
  return this.webex.request({
249
139
  uri: mediaUrl,
@@ -251,6 +141,7 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
251
141
  body: {
252
142
  device: {
253
143
  url: deviceUrl,
144
+ // @ts-ignore
254
145
  deviceType: this.config.meetings.deviceType
255
146
  },
256
147
  correlationId: correlationId,
@@ -265,7 +156,7 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
265
156
  mediaId: options.mediaId
266
157
  }],
267
158
  clientMediaPreferences: {
268
- preferTranscoding: (_options$preferTransc2 = options.preferTranscoding) !== null && _options$preferTransc2 !== void 0 ? _options$preferTransc2 : true
159
+ preferTranscoding: (_options$preferTransc = options.preferTranscoding) !== null && _options$preferTransc !== void 0 ? _options$preferTransc : true
269
160
  }
270
161
  }
271
162
  }).then(function (res) {
@@ -1 +1 @@
1
- {"version":3,"names":["RoapRequest","localSdp","reachabilityData","window","localStorage","getItem","REACHABILITY","reachabilityResult","JSON","parse","length","reachability","e","LoggerProxy","logger","error","options","info","roapMessage","resolve","then","deviceUrl","webex","internal","device","url","body","usingResource","resourceId","correlationId","localMedias","attachRechabilityData","audioMuted","videoMuted","clientMediaPreferences","preferTranscoding","locusUrl","PARTICIPANT","sipUrl","services","waitForCatalog","get","LOCI","CALL","invitee","address","sipTarget","ParameterError","request","method","HTTP_VERBS","POST","uri","res","locus","roapSeq","seq","id","split","pop","fullState","lastActive","catch","err","locusSelfUrl","mediaId","meetingId","mediaUrl","MEDIA","messageType","Metrics","postEvent","event","eventType","MEDIA_REQUEST","PUT","deviceType","config","meetings","MEDIA_RESPONSE","mediaConnections","statusCode","data","parseLocusError","StatelessWebexPlugin"],"sources":["request.js"],"sourcesContent":["\n/* global window */\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n PARTICIPANT,\n LOCI,\n CALL,\n MEDIA,\n HTTP_VERBS,\n REACHABILITY\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport ParameterError from '../common/errors/parameter';\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Joins a meeting via ROAP\n * @param {Object} options\n * @returns {Promise} returns a promise that resolves/rejects whatever the request does\n */\n\n\n attachRechabilityData(localSdp) {\n const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);\n\n if (reachabilityData) {\n try {\n const reachabilityResult = JSON.parse(reachabilityData);\n\n /* istanbul ignore else */\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n }\n catch (e) {\n LoggerProxy.logger.error(`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`);\n }\n }\n\n return localSdp;\n }\n\n joinMeetingWithRoap(options) {\n LoggerProxy.logger.info('Roap:request#joinMeetingWithRoap --> Join locus with roap');\n LoggerProxy.logger.info(`Roap:request#joinMeetingWithRoap --> Local SDP: ${options.roapMessage}`);\n\n return Promise.resolve().then(async () => {\n const deviceUrl = this.webex.internal.device.url;\n let url = '';\n\n const body = {\n deviceUrl,\n usingResource: options.resourceId || null,\n correlationId: options.correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(this.attachRechabilityData({\n roapMessage: options.roapMessage,\n audioMuted: false,\n videoMuted: false\n }))\n }\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true\n }\n };\n\n if (options.locusUrl) {\n url = `${options.locusUrl}/${PARTICIPANT}`;\n }\n else if (options.sipUrl) {\n try {\n await this.webex.internal.services.waitForCatalog('postauth');\n url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;\n body.invitee = {\n address: options.sipTarget\n };\n }\n catch (e) {\n LoggerProxy.logger.error(`Roap:request#joinMeetingWithRoap --> ${e}`);\n throw (e);\n }\n }\n else {\n throw new ParameterError('Must provide a locusUrl or sipTarget');\n }\n\n return this.webex\n .request({\n method: HTTP_VERBS.POST,\n uri: url,\n body\n })\n .then((res) => {\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n locus.id = locus.url.split('/').pop();\n LoggerProxy.logger.info(`Roap:request#joinMeetingWithRoap --> Joined locus [${locus.id}][${locus.fullState.lastActive}]`);\n\n return locus;\n })\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:request#joinMeetingWithRoap --> failed with error: ${err}`);\n throw err;\n });\n });\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {Object} options.roapMessage\n * @param {String} options.locusSelfUrl\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @param {String} options.meetingId\n * @returns {Promise} returns the response/failure of the request\n */\n sendRoap(options) {\n const {\n roapMessage, locusSelfUrl, mediaId, correlationId, meetingId\n } = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');\n }\n\n const mediaUrl = `${locusSelfUrl}/${MEDIA}`;\n const deviceUrl = this.webex.internal.device.url;\n\n LoggerProxy.logger.info(`Roap:request#sendRoap --> ${mediaUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`);\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});\n\n return this.webex\n .request({\n uri: mediaUrl,\n method: HTTP_VERBS.PUT,\n body: {\n device: {\n url: deviceUrl,\n deviceType: this.config.meetings.deviceType\n },\n correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(this.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!options.audioMuted,\n videoMuted: !!options.videoMuted\n })),\n mediaId: options.mediaId\n }\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true\n }\n }\n })\n .then((res) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});\n\n // always it will be the first mediaConnection Object\n const mediaConnections = res.body.mediaConnections && res.body.mediaConnections.length > 0 && res.body.mediaConnections[0];\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> response:${JSON.stringify(mediaConnections, null, 2)}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections})\n };\n })\n .catch((err) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId, data: {error: Metrics.parseLocusError(err, true)}});\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(roapMessage, null, 2)} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["RoapRequest","localSdp","reachabilityData","window","localStorage","getItem","REACHABILITY","reachabilityResult","JSON","parse","length","reachability","e","LoggerProxy","logger","error","options","roapMessage","locusSelfUrl","mediaId","correlationId","meetingId","info","mediaUrl","MEDIA","deviceUrl","webex","internal","device","url","messageType","seq","Metrics","postEvent","event","eventType","MEDIA_REQUEST","request","uri","method","HTTP_VERBS","PUT","body","deviceType","config","meetings","localMedias","attachRechabilityData","audioMuted","videoMuted","clientMediaPreferences","preferTranscoding","then","res","MEDIA_RESPONSE","mediaConnections","statusCode","locus","roapSeq","catch","err","data","parseLocusError","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["/* global window */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n MEDIA,\n HTTP_VERBS,\n REACHABILITY\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\n\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Joins a meeting via ROAP\n * @param {Object} options\n * @returns {Promise} returns a promise that resolves/rejects whatever the request does\n */\n\n\n attachRechabilityData(localSdp) {\n const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);\n\n if (reachabilityData) {\n try {\n const reachabilityResult = JSON.parse(reachabilityData);\n\n /* istanbul ignore else */\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n }\n catch (e) {\n LoggerProxy.logger.error(`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`);\n }\n }\n\n return localSdp;\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {Object} options.roapMessage\n * @param {String} options.locusSelfUrl\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @param {String} options.meetingId\n * @returns {Promise} returns the response/failure of the request\n */\n sendRoap(options: {\n roapMessage: any;\n locusSelfUrl: string;\n mediaId: string;\n correlationId: string;\n audioMuted: boolean;\n videoMuted: boolean;\n meetingId: string;\n preferTranscoding?: boolean;\n }) {\n const {\n roapMessage, locusSelfUrl, mediaId, correlationId, meetingId\n } = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');\n }\n\n const mediaUrl = `${locusSelfUrl}/${MEDIA}`;\n // @ts-ignore\n const deviceUrl = this.webex.internal.device.url;\n\n LoggerProxy.logger.info(`Roap:request#sendRoap --> ${mediaUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`);\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});\n\n // @ts-ignore\n return this.webex\n .request({\n uri: mediaUrl,\n method: HTTP_VERBS.PUT,\n body: {\n device: {\n url: deviceUrl,\n // @ts-ignore\n deviceType: this.config.meetings.deviceType\n },\n correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(this.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!options.audioMuted,\n videoMuted: !!options.videoMuted\n })),\n mediaId: options.mediaId\n }\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true\n }\n }\n })\n .then((res) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});\n\n // always it will be the first mediaConnection Object\n const mediaConnections = res.body.mediaConnections && res.body.mediaConnections.length > 0 && res.body.mediaConnections[0];\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> response:${JSON.stringify(mediaConnections, null, 2)}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections})\n };\n })\n .catch((err) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId, data: {error: Metrics.parseLocusError(err, true)}});\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(roapMessage, null, 2)} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
@@ -30,8 +30,14 @@ var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy")
30
30
 
31
31
  var _constants2 = require("../constants");
32
32
 
33
+ // @ts-ignore - Types not available for @webex/common
33
34
  var TURN_DISCOVERY_TIMEOUT = 10; // in seconds
35
+ // Roap spec says that seq should start from 1, but TURN discovery works fine with seq=0
36
+ // and this is handy for us, because TURN discovery is always done before the first SDP exchange,
37
+ // so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection
38
+ // and do the SDP offer with seq=1
34
39
 
40
+ var TURN_DISCOVERY_SEQ = 0;
35
41
  /**
36
42
  * Handles the process of finding out TURN server information from Linus.
37
43
  * This is achieved by sending a TURN_DISCOVERY_REQUEST.
@@ -101,6 +107,7 @@ var TurnDiscovery = /*#__PURE__*/function () {
101
107
  value: function handleTurnDiscoveryResponse(roapMessage) {
102
108
  var _this = this;
103
109
 
110
+ // @ts-ignore - Fix missing type
104
111
  var headers = roapMessage.headers;
105
112
 
106
113
  if (!this.defer) {
@@ -155,8 +162,6 @@ var TurnDiscovery = /*#__PURE__*/function () {
155
162
  }, {
156
163
  key: "sendRoapTurnDiscoveryRequest",
157
164
  value: function sendRoapTurnDiscoveryRequest(meeting, isReconnecting) {
158
- var seq = meeting.roapSeq + 1;
159
-
160
165
  if (this.defer) {
161
166
  _loggerProxy.default.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
162
167
 
@@ -167,7 +172,7 @@ var TurnDiscovery = /*#__PURE__*/function () {
167
172
  var roapMessage = {
168
173
  messageType: _constants2.ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,
169
174
  version: _constants2.ROAP.ROAP_VERSION,
170
- seq: seq
175
+ seq: TURN_DISCOVERY_SEQ
171
176
  };
172
177
 
173
178
  _loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST');
@@ -175,14 +180,15 @@ var TurnDiscovery = /*#__PURE__*/function () {
175
180
  return this.roapRequest.sendRoap({
176
181
  roapMessage: roapMessage,
177
182
  correlationId: meeting.correlationId,
183
+ // @ts-ignore - Fix missing type
178
184
  locusSelfUrl: meeting.selfUrl,
185
+ // @ts-ignore - Fix missing type
179
186
  mediaId: isReconnecting ? '' : meeting.mediaId,
180
187
  audioMuted: meeting.isAudioMuted(),
181
188
  videoMuted: meeting.isVideoMuted(),
182
189
  meetingId: meeting.id
183
190
  }).then(function (_ref) {
184
191
  var mediaConnections = _ref.mediaConnections;
185
- meeting.setRoapSeq(seq);
186
192
 
187
193
  if (mediaConnections) {
188
194
  meeting.updateMediaConnections(mediaConnections);
@@ -206,9 +212,11 @@ var TurnDiscovery = /*#__PURE__*/function () {
206
212
  roapMessage: {
207
213
  messageType: _constants2.ROAP.ROAP_TYPES.OK,
208
214
  version: _constants2.ROAP.ROAP_VERSION,
209
- seq: meeting.roapSeq
215
+ seq: TURN_DISCOVERY_SEQ
210
216
  },
217
+ // @ts-ignore - fix type
211
218
  locusSelfUrl: meeting.selfUrl,
219
+ // @ts-ignore - fix type
212
220
  mediaId: meeting.mediaId,
213
221
  correlationId: meeting.correlationId,
214
222
  audioMuted: meeting.isAudioMuted(),
@@ -224,6 +232,10 @@ var TurnDiscovery = /*#__PURE__*/function () {
224
232
  * | <----TURN_DISCOVERY_RESPONSE----- |
225
233
  * | --------------OK----------------> |
226
234
  *
235
+ * This TURN discovery roap exchange is always done with seq=0.
236
+ * The RoapMediaConnection SDP exchange always starts with seq=1,
237
+ * so it works fine no matter if TURN discovery is done or not.
238
+ *
227
239
  * @param {Meeting} meeting
228
240
  * @param {Boolean} isReconnecting should be set to true if this is a new
229
241
  * media connection just after a reconnection
@@ -235,6 +247,7 @@ var TurnDiscovery = /*#__PURE__*/function () {
235
247
  value: function doTurnDiscovery(meeting, isReconnecting) {
236
248
  var _this2 = this;
237
249
 
250
+ // @ts-ignore - fix type
238
251
  var isAnyClusterReachable = meeting.webex.meetings.reachability.isAnyClusterReachable();
239
252
 
240
253
  if (isAnyClusterReachable) {
@@ -244,7 +257,8 @@ var TurnDiscovery = /*#__PURE__*/function () {
244
257
  turnServerInfo: undefined,
245
258
  turnDiscoverySkippedReason: 'reachability'
246
259
  });
247
- }
260
+ } // @ts-ignore - fix type
261
+
248
262
 
249
263
  if (!meeting.config.experimental.enableTurnDiscovery) {
250
264
  _loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it');
@@ -1 +1 @@
1
- {"version":3,"names":["TURN_DISCOVERY_TIMEOUT","TurnDiscovery","roapRequest","turnInfo","url","username","password","defer","LoggerProxy","logger","warn","reject","Error","responseTimer","setTimeout","info","promise","roapMessage","headers","expectedHeaders","headerName","field","foundHeaders","forEach","receivedHeader","expectedHeader","startsWith","substring","length","clearTimeout","undefined","resolve","meeting","isReconnecting","seq","roapSeq","Defer","messageType","ROAP","ROAP_TYPES","TURN_DISCOVERY_REQUEST","version","ROAP_VERSION","sendRoap","correlationId","locusSelfUrl","selfUrl","mediaId","audioMuted","isAudioMuted","videoMuted","isVideoMuted","meetingId","id","then","mediaConnections","setRoapSeq","updateMediaConnections","OK","isAnyClusterReachable","webex","meetings","reachability","turnServerInfo","turnDiscoverySkippedReason","config","experimental","enableTurnDiscovery","sendRoapTurnDiscoveryRequest","waitForTurnDiscoveryResponse","sendRoapOK","catch","e","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","TURN_DISCOVERY_FAILURE","correlation_id","locus_id","locusUrl","split","pop","reason","message","stack"],"sources":["turnDiscovery.ts"],"sourcesContent":["import {Defer} from '@webex/common';\n\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP} from '../constants';\n\nimport RoapRequest from './request';\n\nconst TURN_DISCOVERY_TIMEOUT = 10; // in seconds\n\n/**\n * Handles the process of finding out TURN server information from Linus.\n * This is achieved by sending a TURN_DISCOVERY_REQUEST.\n */\nexport default class TurnDiscovery {\n private roapRequest: RoapRequest;\n\n private defer?: Defer; // used for waiting for the response\n\n private turnInfo: {\n url: string;\n username: string;\n password: string;\n };\n\n private responseTimer?: ReturnType<typeof setTimeout>;\n\n /**\n * Constructor\n *\n * @param {RoapRequest} roapRequest\n */\n constructor(roapRequest: RoapRequest) {\n this.roapRequest = roapRequest;\n this.turnInfo = {\n url: '',\n username: '',\n password: '',\n };\n }\n\n\n /**\n * waits for TURN_DISCOVERY_RESPONSE message to arrive\n *\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n waitForTurnDiscoveryResponse() {\n if (!this.defer) {\n LoggerProxy.logger.warn('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress');\n\n return Promise.reject(new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()'));\n }\n\n const {defer} = this;\n\n this.responseTimer = setTimeout(() => {\n LoggerProxy.logger.warn(`Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`);\n\n defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));\n }, TURN_DISCOVERY_TIMEOUT * 1000);\n\n LoggerProxy.logger.info('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...');\n\n return defer.promise;\n }\n\n /**\n * handles TURN_DISCOVERY_RESPONSE roap message\n *\n * @param {Object} roapMessage\n * @returns {void}\n * @public\n * @memberof Roap\n */\n handleTurnDiscoveryResponse(roapMessage) {\n const {headers} = roapMessage;\n\n if (!this.defer) {\n LoggerProxy.logger.warn('Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response');\n\n return;\n }\n\n const expectedHeaders = [\n {headerName: 'x-cisco-turn-url', field: 'url'},\n {headerName: 'x-cisco-turn-username', field: 'username'},\n {headerName: 'x-cisco-turn-password', field: 'password'},\n ];\n\n let foundHeaders = 0;\n\n headers?.forEach((receivedHeader) => {\n // check if it matches any of our expected headers\n expectedHeaders.forEach((expectedHeader) => {\n if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {\n this.turnInfo[expectedHeader.field] = receivedHeader.substring(expectedHeader.headerName.length + 1);\n foundHeaders += 1;\n }\n });\n });\n\n clearTimeout(this.responseTimer);\n this.responseTimer = undefined;\n\n if (foundHeaders !== expectedHeaders.length) {\n LoggerProxy.logger.warn(`Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ${JSON.stringify(headers)}`);\n this.defer.reject(new Error(`TURN_DISCOVERY_RESPONSE missing some headers: ${JSON.stringify(headers)}`));\n }\n else {\n LoggerProxy.logger.info(`Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=${this.turnInfo.url}`);\n this.defer.resolve();\n }\n }\n\n /**\n * sends the TURN_DISCOVERY_REQUEST roap request\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapTurnDiscoveryRequest(meeting, isReconnecting) {\n const seq = meeting.roapSeq + 1;\n\n if (this.defer) {\n LoggerProxy.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');\n\n return Promise.resolve();\n }\n\n this.defer = new Defer();\n\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,\n version: ROAP.ROAP_VERSION,\n seq,\n };\n\n LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST');\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: isReconnecting ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(({mediaConnections}) => {\n meeting.setRoapSeq(seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n });\n }\n\n /**\n * Sends the OK message that server expects to receive\n * after it sends us TURN_DISCOVERY_RESPONSE\n *\n * @param {Meeting} meeting\n * @returns {Promise}\n */\n sendRoapOK(meeting) {\n LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapOK --> sending OK');\n\n return this.roapRequest.sendRoap({\n roapMessage: {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: meeting.roapSeq\n },\n locusSelfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n });\n }\n\n /**\n * Retrieves TURN server information from the backend by doing\n * a roap message exchange:\n * client server\n * | -----TURN_DISCOVERY_REQUEST-----> |\n * | <----TURN_DISCOVERY_RESPONSE----- |\n * | --------------OK----------------> |\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting, isReconnecting) {\n const isAnyClusterReachable = meeting.webex.meetings.reachability.isAnyClusterReachable();\n\n if (isAnyClusterReachable) {\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery');\n return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'reachability'});\n }\n\n if (!meeting.config.experimental.enableTurnDiscovery) {\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it');\n\n return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'config'});\n }\n\n return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting)\n .then(() => this.waitForTurnDiscoveryResponse())\n .then(() => this.sendRoapOK(meeting))\n .then(() => {\n this.defer = undefined;\n\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');\n\n return {turnServerInfo: this.turnInfo, turnDiscoverySkippedReason: undefined};\n })\n .catch((e) => {\n // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN\n LoggerProxy.logger.info(`Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`);\n\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE,\n {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: e.message,\n stack: e.stack\n }\n );\n\n return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: undefined});\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["TURN_DISCOVERY_TIMEOUT","TURN_DISCOVERY_SEQ","TurnDiscovery","roapRequest","turnInfo","url","username","password","defer","LoggerProxy","logger","warn","reject","Error","responseTimer","setTimeout","info","promise","roapMessage","headers","expectedHeaders","headerName","field","foundHeaders","forEach","receivedHeader","expectedHeader","startsWith","substring","length","clearTimeout","undefined","resolve","meeting","isReconnecting","Defer","messageType","ROAP","ROAP_TYPES","TURN_DISCOVERY_REQUEST","version","ROAP_VERSION","seq","sendRoap","correlationId","locusSelfUrl","selfUrl","mediaId","audioMuted","isAudioMuted","videoMuted","isVideoMuted","meetingId","id","then","mediaConnections","updateMediaConnections","OK","isAnyClusterReachable","webex","meetings","reachability","turnServerInfo","turnDiscoverySkippedReason","config","experimental","enableTurnDiscovery","sendRoapTurnDiscoveryRequest","waitForTurnDiscoveryResponse","sendRoapOK","catch","e","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","TURN_DISCOVERY_FAILURE","correlation_id","locus_id","locusUrl","split","pop","reason","message","stack"],"sources":["turnDiscovery.ts"],"sourcesContent":["// @ts-ignore - Types not available for @webex/common\nimport {Defer} from '@webex/common';\n\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP} from '../constants';\n\nimport RoapRequest from './request';\nimport Meeting from '../meeting';\n\nconst TURN_DISCOVERY_TIMEOUT = 10; // in seconds\n\n// Roap spec says that seq should start from 1, but TURN discovery works fine with seq=0\n// and this is handy for us, because TURN discovery is always done before the first SDP exchange,\n// so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection\n// and do the SDP offer with seq=1\nconst TURN_DISCOVERY_SEQ = 0;\n\n/**\n * Handles the process of finding out TURN server information from Linus.\n * This is achieved by sending a TURN_DISCOVERY_REQUEST.\n */\nexport default class TurnDiscovery {\n private roapRequest: RoapRequest;\n\n private defer?: Defer; // used for waiting for the response\n\n private turnInfo: {\n url: string;\n username: string;\n password: string;\n };\n\n private responseTimer?: ReturnType<typeof setTimeout>;\n\n /**\n * Constructor\n *\n * @param {RoapRequest} roapRequest\n */\n constructor(roapRequest: RoapRequest) {\n this.roapRequest = roapRequest;\n this.turnInfo = {\n url: '',\n username: '',\n password: '',\n };\n }\n\n\n /**\n * waits for TURN_DISCOVERY_RESPONSE message to arrive\n *\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private waitForTurnDiscoveryResponse() {\n if (!this.defer) {\n LoggerProxy.logger.warn('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress');\n\n return Promise.reject(new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()'));\n }\n\n const {defer} = this;\n\n this.responseTimer = setTimeout(() => {\n LoggerProxy.logger.warn(`Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`);\n\n defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));\n }, TURN_DISCOVERY_TIMEOUT * 1000);\n\n LoggerProxy.logger.info('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...');\n\n return defer.promise;\n }\n\n /**\n * handles TURN_DISCOVERY_RESPONSE roap message\n *\n * @param {Object} roapMessage\n * @returns {void}\n * @public\n * @memberof Roap\n */\n public handleTurnDiscoveryResponse(roapMessage: object) {\n // @ts-ignore - Fix missing type\n const {headers} = roapMessage;\n\n if (!this.defer) {\n LoggerProxy.logger.warn('Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response');\n\n return;\n }\n\n const expectedHeaders = [\n {headerName: 'x-cisco-turn-url', field: 'url'},\n {headerName: 'x-cisco-turn-username', field: 'username'},\n {headerName: 'x-cisco-turn-password', field: 'password'},\n ];\n\n let foundHeaders = 0;\n\n headers?.forEach((receivedHeader) => {\n // check if it matches any of our expected headers\n expectedHeaders.forEach((expectedHeader) => {\n if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {\n this.turnInfo[expectedHeader.field] = receivedHeader.substring(expectedHeader.headerName.length + 1);\n foundHeaders += 1;\n }\n });\n });\n\n clearTimeout(this.responseTimer);\n this.responseTimer = undefined;\n\n if (foundHeaders !== expectedHeaders.length) {\n LoggerProxy.logger.warn(`Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ${JSON.stringify(headers)}`);\n this.defer.reject(new Error(`TURN_DISCOVERY_RESPONSE missing some headers: ${JSON.stringify(headers)}`));\n }\n else {\n LoggerProxy.logger.info(`Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=${this.turnInfo.url}`);\n this.defer.resolve();\n }\n }\n\n /**\n * sends the TURN_DISCOVERY_REQUEST roap request\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {\n if (this.defer) {\n LoggerProxy.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');\n\n return Promise.resolve();\n }\n\n this.defer = new Defer();\n\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n };\n\n LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST');\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n // @ts-ignore - Fix missing type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - Fix missing type\n mediaId: isReconnecting ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(({mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n });\n }\n\n /**\n * Sends the OK message that server expects to receive\n * after it sends us TURN_DISCOVERY_RESPONSE\n *\n * @param {Meeting} meeting\n * @returns {Promise}\n */\n sendRoapOK(meeting: Meeting) {\n LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapOK --> sending OK');\n\n return this.roapRequest.sendRoap({\n roapMessage: {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n },\n // @ts-ignore - fix type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - fix type\n mediaId: meeting.mediaId,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n });\n }\n\n /**\n * Retrieves TURN server information from the backend by doing\n * a roap message exchange:\n * client server\n * | -----TURN_DISCOVERY_REQUEST-----> |\n * | <----TURN_DISCOVERY_RESPONSE----- |\n * | --------------OK----------------> |\n *\n * This TURN discovery roap exchange is always done with seq=0.\n * The RoapMediaConnection SDP exchange always starts with seq=1,\n * so it works fine no matter if TURN discovery is done or not.\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n // @ts-ignore - fix type\n const isAnyClusterReachable = meeting.webex.meetings.reachability.isAnyClusterReachable();\n\n if (isAnyClusterReachable) {\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery');\n return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'reachability'});\n }\n\n // @ts-ignore - fix type\n if (!meeting.config.experimental.enableTurnDiscovery) {\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it');\n\n return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'config'});\n }\n\n return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting)\n .then(() => this.waitForTurnDiscoveryResponse())\n .then(() => this.sendRoapOK(meeting))\n .then(() => {\n this.defer = undefined;\n\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');\n\n return {turnServerInfo: this.turnInfo, turnDiscoverySkippedReason: undefined};\n })\n .catch((e) => {\n // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN\n LoggerProxy.logger.info(`Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`);\n\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE,\n {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: e.message,\n stack: e.stack\n }\n );\n\n return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: undefined});\n });\n }\n}\n"],"mappings":"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"}
@@ -11,6 +11,7 @@ var STATS_DEFAULT = {
11
11
  encryption: 'sha-256',
12
12
  audio: {
13
13
  send: {
14
+ trackLabel: '',
14
15
  maxPacketLossRatio: 0,
15
16
  availableBandwidth: 0,
16
17
  bytesSent: 0,
@@ -26,6 +27,7 @@ var STATS_DEFAULT = {
26
27
  },
27
28
  video: {
28
29
  send: {
30
+ trackLabel: '',
29
31
  maxPacketLossRatio: 0,
30
32
  availableBandwidth: 0,
31
33
  meanRemoteJitter: [],
@@ -1 +1 @@
1
- {"version":3,"names":["STATS_DEFAULT","encryption","audio","send","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","recv","bytesReceived","meanRtpJitter","video","totalPacketsLost","latency","packetsLost","share","bandwidth","systemBandwidth","sentPerSecond","encodedPerSecond","helper","audioBytesSent","videoBytestSent","speed","results","connectionType","systemNetworkType","systemIpAddress","local","candidateType","transport","ipAddress","networkType","remote","resolutions","width","height","internal","candidates"],"sources":["global.js"],"sourcesContent":["const STATS_DEFAULT = {\n encryption: 'sha-256',\n audio: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: []\n },\n recv: {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: []\n }\n },\n video: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: []\n },\n recv: {\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRtpJitter: [],\n meanRoundTripTime: []\n\n },\n latency: 0,\n packetsLost: 0\n },\n share: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: []\n },\n recv: {\n availableBandwidth: 0,\n meanRtpJitter: [],\n meanRoundTripTime: []\n },\n\n latency: 0,\n packetsLost: 0\n },\n bandwidth: {\n systemBandwidth: 0,\n sentPerSecond: 0,\n encodedPerSecond: 0,\n helper: {\n audioBytesSent: 0,\n videoBytestSent: 0\n },\n speed: 0\n },\n results: {},\n connectionType: {\n systemNetworkType: 'unknown',\n systemIpAddress: '0.0.0.0',\n local: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: []\n },\n remote: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: []\n }\n },\n resolutions: {\n audio: {\n send: {\n width: 0,\n height: 0\n },\n recv: {\n width: 0,\n height: 0\n }\n },\n video: {\n send: {\n width: 0,\n height: 0\n },\n recv: {\n width: 0,\n height: 0\n }\n },\n share: {\n send: {\n width: 0,\n height: 0\n },\n recv: {\n width: 0,\n height: 0\n }\n }\n },\n internal: {\n audio: {\n send: {},\n recv: {}\n },\n video: {\n send: {},\n recv: {}\n },\n share: {\n send: {},\n recv: {}\n },\n remote: {\n\n },\n candidates: {}\n }\n};\n\nexport default STATS_DEFAULT;\n"],"mappings":"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"}
1
+ {"version":3,"names":["STATS_DEFAULT","encryption","audio","send","trackLabel","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","recv","bytesReceived","meanRtpJitter","video","totalPacketsLost","latency","packetsLost","share","bandwidth","systemBandwidth","sentPerSecond","encodedPerSecond","helper","audioBytesSent","videoBytestSent","speed","results","connectionType","systemNetworkType","systemIpAddress","local","candidateType","transport","ipAddress","networkType","remote","resolutions","width","height","internal","candidates"],"sources":["global.ts"],"sourcesContent":["const STATS_DEFAULT = {\n encryption: 'sha-256',\n audio: {\n send: {\n trackLabel: '',\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: []\n },\n recv: {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: []\n }\n },\n video: {\n send: {\n trackLabel: '',\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: []\n },\n recv: {\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRtpJitter: [],\n meanRoundTripTime: []\n\n },\n latency: 0,\n packetsLost: 0\n },\n share: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: []\n },\n recv: {\n availableBandwidth: 0,\n meanRtpJitter: [],\n meanRoundTripTime: []\n },\n\n latency: 0,\n packetsLost: 0\n },\n bandwidth: {\n systemBandwidth: 0,\n sentPerSecond: 0,\n encodedPerSecond: 0,\n helper: {\n audioBytesSent: 0,\n videoBytestSent: 0\n },\n speed: 0\n },\n results: {},\n connectionType: {\n systemNetworkType: 'unknown',\n systemIpAddress: '0.0.0.0',\n local: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: []\n },\n remote: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: []\n }\n },\n resolutions: {\n audio: {\n send: {\n width: 0,\n height: 0\n },\n recv: {\n width: 0,\n height: 0\n }\n },\n video: {\n send: {\n width: 0,\n height: 0\n },\n recv: {\n width: 0,\n height: 0\n }\n },\n share: {\n send: {\n width: 0,\n height: 0\n },\n recv: {\n width: 0,\n height: 0\n }\n }\n },\n internal: {\n audio: {\n send: {},\n recv: {}\n },\n video: {\n send: {},\n recv: {}\n },\n share: {\n send: {},\n recv: {}\n },\n remote: {\n\n },\n candidates: {}\n }\n};\n\nexport default STATS_DEFAULT;\n"],"mappings":"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"}