@webex/plugin-meetings 2.37.0 → 2.37.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 (308) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/common/browser-detection.js +1 -20
  4. package/dist/common/browser-detection.js.map +1 -1
  5. package/dist/common/collection.js +5 -20
  6. package/dist/common/collection.js.map +1 -1
  7. package/dist/common/config.js +0 -7
  8. package/dist/common/config.js.map +1 -1
  9. package/dist/common/errors/captcha-error.js +5 -26
  10. package/dist/common/errors/captcha-error.js.map +1 -1
  11. package/dist/common/errors/intent-to-join.js +5 -26
  12. package/dist/common/errors/intent-to-join.js.map +1 -1
  13. package/dist/common/errors/join-meeting.js +6 -27
  14. package/dist/common/errors/join-meeting.js.map +1 -1
  15. package/dist/common/errors/media.js +5 -26
  16. package/dist/common/errors/media.js.map +1 -1
  17. package/dist/common/errors/parameter.js +5 -33
  18. package/dist/common/errors/parameter.js.map +1 -1
  19. package/dist/common/errors/password-error.js +5 -26
  20. package/dist/common/errors/password-error.js.map +1 -1
  21. package/dist/common/errors/permission.js +4 -25
  22. package/dist/common/errors/permission.js.map +1 -1
  23. package/dist/common/errors/reconnection-in-progress.js +0 -17
  24. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  25. package/dist/common/errors/reconnection.js +5 -26
  26. package/dist/common/errors/reconnection.js.map +1 -1
  27. package/dist/common/errors/stats.js +5 -26
  28. package/dist/common/errors/stats.js.map +1 -1
  29. package/dist/common/errors/webex-errors.js +7 -46
  30. package/dist/common/errors/webex-errors.js.map +1 -1
  31. package/dist/common/errors/webex-meetings-error.js +1 -24
  32. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  33. package/dist/common/events/events-scope.js +0 -22
  34. package/dist/common/events/events-scope.js.map +1 -1
  35. package/dist/common/events/events.js +0 -23
  36. package/dist/common/events/events.js.map +1 -1
  37. package/dist/common/events/trigger-proxy.js +0 -12
  38. package/dist/common/events/trigger-proxy.js.map +1 -1
  39. package/dist/common/events/util.js +0 -15
  40. package/dist/common/events/util.js.map +1 -1
  41. package/dist/common/logs/logger-config.js +0 -4
  42. package/dist/common/logs/logger-config.js.map +1 -1
  43. package/dist/common/logs/logger-proxy.js +1 -8
  44. package/dist/common/logs/logger-proxy.js.map +1 -1
  45. package/dist/common/logs/request.js +35 -61
  46. package/dist/common/logs/request.js.map +1 -1
  47. package/dist/common/queue.js +4 -14
  48. package/dist/common/queue.js.map +1 -1
  49. package/dist/config.js +1 -5
  50. package/dist/config.js.map +1 -1
  51. package/dist/constants.js +46 -42
  52. package/dist/constants.js.map +1 -1
  53. package/dist/index.js +1 -17
  54. package/dist/index.js.map +1 -1
  55. package/dist/locus-info/controlsUtils.js +10 -28
  56. package/dist/locus-info/controlsUtils.js.map +1 -1
  57. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  58. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  59. package/dist/locus-info/fullState.js +0 -15
  60. package/dist/locus-info/fullState.js.map +1 -1
  61. package/dist/locus-info/hostUtils.js +4 -12
  62. package/dist/locus-info/hostUtils.js.map +1 -1
  63. package/dist/locus-info/index.js +101 -193
  64. package/dist/locus-info/index.js.map +1 -1
  65. package/dist/locus-info/infoUtils.js +0 -37
  66. package/dist/locus-info/infoUtils.js.map +1 -1
  67. package/dist/locus-info/mediaSharesUtils.js +12 -38
  68. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  69. package/dist/locus-info/parser.js +87 -123
  70. package/dist/locus-info/parser.js.map +1 -1
  71. package/dist/locus-info/selfUtils.js +16 -81
  72. package/dist/locus-info/selfUtils.js.map +1 -1
  73. package/dist/media/index.js +74 -137
  74. package/dist/media/index.js.map +1 -1
  75. package/dist/media/properties.js +64 -110
  76. package/dist/media/properties.js.map +1 -1
  77. package/dist/media/util.js +3 -17
  78. package/dist/media/util.js.map +1 -1
  79. package/dist/mediaQualityMetrics/config.js +10 -12
  80. package/dist/mediaQualityMetrics/config.js.map +1 -1
  81. package/dist/meeting/effectsState.js +120 -192
  82. package/dist/meeting/effectsState.js.map +1 -1
  83. package/dist/meeting/in-meeting-actions.js +0 -13
  84. package/dist/meeting/in-meeting-actions.js.map +1 -1
  85. package/dist/meeting/index.js +812 -1487
  86. package/dist/meeting/index.js.map +1 -1
  87. package/dist/meeting/muteState.js +31 -78
  88. package/dist/meeting/muteState.js.map +1 -1
  89. package/dist/meeting/request.js +157 -227
  90. package/dist/meeting/request.js.map +1 -1
  91. package/dist/meeting/state.js +21 -31
  92. package/dist/meeting/state.js.map +1 -1
  93. package/dist/meeting/util.js +25 -169
  94. package/dist/meeting/util.js.map +1 -1
  95. package/dist/meeting-info/collection.js +3 -25
  96. package/dist/meeting-info/collection.js.map +1 -1
  97. package/dist/meeting-info/index.js +10 -33
  98. package/dist/meeting-info/index.js.map +1 -1
  99. package/dist/meeting-info/meeting-info-v2.js +179 -268
  100. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  101. package/dist/meeting-info/request.js +1 -16
  102. package/dist/meeting-info/request.js.map +1 -1
  103. package/dist/meeting-info/util.js +98 -183
  104. package/dist/meeting-info/util.js.map +1 -1
  105. package/dist/meeting-info/utilv2.js +137 -228
  106. package/dist/meeting-info/utilv2.js.map +1 -1
  107. package/dist/meetings/collection.js +3 -21
  108. package/dist/meetings/collection.js.map +1 -1
  109. package/dist/meetings/index.js +451 -570
  110. package/dist/meetings/index.js.map +1 -1
  111. package/dist/meetings/request.js +7 -30
  112. package/dist/meetings/request.js.map +1 -1
  113. package/dist/meetings/util.js +94 -148
  114. package/dist/meetings/util.js.map +1 -1
  115. package/dist/member/index.js +49 -89
  116. package/dist/member/index.js.map +1 -1
  117. package/dist/member/util.js +17 -68
  118. package/dist/member/util.js.map +1 -1
  119. package/dist/members/collection.js +2 -12
  120. package/dist/members/collection.js.map +1 -1
  121. package/dist/members/index.js +68 -184
  122. package/dist/members/index.js.map +1 -1
  123. package/dist/members/request.js +21 -56
  124. package/dist/members/request.js.map +1 -1
  125. package/dist/members/util.js +9 -38
  126. package/dist/members/util.js.map +1 -1
  127. package/dist/metrics/config.js +0 -2
  128. package/dist/metrics/config.js.map +1 -1
  129. package/dist/metrics/constants.js +1 -2
  130. package/dist/metrics/constants.js.map +1 -1
  131. package/dist/metrics/index.js +48 -136
  132. package/dist/metrics/index.js.map +1 -1
  133. package/dist/networkQualityMonitor/index.js +28 -57
  134. package/dist/networkQualityMonitor/index.js.map +1 -1
  135. package/dist/peer-connection-manager/index.js +60 -190
  136. package/dist/peer-connection-manager/index.js.map +1 -1
  137. package/dist/peer-connection-manager/util.js +10 -24
  138. package/dist/peer-connection-manager/util.js.map +1 -1
  139. package/dist/personal-meeting-room/index.js +10 -45
  140. package/dist/personal-meeting-room/index.js.map +1 -1
  141. package/dist/personal-meeting-room/request.js +2 -33
  142. package/dist/personal-meeting-room/request.js.map +1 -1
  143. package/dist/personal-meeting-room/util.js +0 -13
  144. package/dist/personal-meeting-room/util.js.map +1 -1
  145. package/dist/reachability/index.js +100 -166
  146. package/dist/reachability/index.js.map +1 -1
  147. package/dist/reachability/request.js +2 -18
  148. package/dist/reachability/request.js.map +1 -1
  149. package/dist/reactions/reactions.js +0 -2
  150. package/dist/reactions/reactions.js.map +1 -1
  151. package/dist/reactions/reactions.type.js +0 -5
  152. package/dist/reactions/reactions.type.js.map +1 -1
  153. package/dist/reconnection-manager/index.js +294 -468
  154. package/dist/reconnection-manager/index.js.map +1 -1
  155. package/dist/roap/collection.js +1 -12
  156. package/dist/roap/collection.js.map +1 -1
  157. package/dist/roap/handler.js +15 -85
  158. package/dist/roap/handler.js.map +1 -1
  159. package/dist/roap/index.js +42 -94
  160. package/dist/roap/index.js.map +1 -1
  161. package/dist/roap/request.js +81 -148
  162. package/dist/roap/request.js.map +1 -1
  163. package/dist/roap/state.js +2 -39
  164. package/dist/roap/state.js.map +1 -1
  165. package/dist/roap/turnDiscovery.js +8 -52
  166. package/dist/roap/turnDiscovery.js.map +1 -1
  167. package/dist/roap/util.js +0 -26
  168. package/dist/roap/util.js.map +1 -1
  169. package/dist/statsAnalyzer/global.js +0 -2
  170. package/dist/statsAnalyzer/global.js.map +1 -1
  171. package/dist/statsAnalyzer/index.js +68 -168
  172. package/dist/statsAnalyzer/index.js.map +1 -1
  173. package/dist/statsAnalyzer/mqaUtil.js +54 -53
  174. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  175. package/dist/transcription/index.js +13 -45
  176. package/dist/transcription/index.js.map +1 -1
  177. package/internal-README.md +7 -6
  178. package/package.json +17 -17
  179. package/src/common/browser-detection.ts +9 -6
  180. package/src/common/collection.ts +3 -1
  181. package/src/common/errors/captcha-error.ts +6 -6
  182. package/src/common/errors/intent-to-join.ts +6 -6
  183. package/src/common/errors/join-meeting.ts +12 -8
  184. package/src/common/errors/media.ts +6 -6
  185. package/src/common/errors/parameter.ts +9 -6
  186. package/src/common/errors/password-error.ts +6 -6
  187. package/src/common/errors/permission.ts +5 -5
  188. package/src/common/errors/reconnection.ts +6 -6
  189. package/src/common/errors/stats.ts +6 -6
  190. package/src/common/errors/webex-errors.ts +7 -5
  191. package/src/common/errors/webex-meetings-error.ts +1 -1
  192. package/src/common/events/events-scope.ts +5 -1
  193. package/src/common/events/events.ts +5 -1
  194. package/src/common/events/trigger-proxy.ts +8 -3
  195. package/src/common/events/util.ts +1 -2
  196. package/src/common/logs/logger-proxy.ts +21 -10
  197. package/src/common/logs/request.ts +11 -8
  198. package/src/config.ts +11 -11
  199. package/src/constants.ts +138 -119
  200. package/src/index.js +1 -1
  201. package/src/locus-info/controlsUtils.ts +34 -24
  202. package/src/locus-info/fullState.ts +15 -11
  203. package/src/locus-info/hostUtils.ts +4 -3
  204. package/src/locus-info/index.ts +25 -34
  205. package/src/locus-info/infoUtils.ts +12 -4
  206. package/src/locus-info/mediaSharesUtils.ts +4 -4
  207. package/src/locus-info/parser.ts +45 -68
  208. package/src/locus-info/selfUtils.ts +106 -57
  209. package/src/media/index.ts +118 -109
  210. package/src/media/properties.ts +26 -20
  211. package/src/media/util.ts +2 -2
  212. package/src/mediaQualityMetrics/config.ts +46 -46
  213. package/src/meeting/effectsState.ts +35 -35
  214. package/src/meeting/in-meeting-actions.ts +7 -3
  215. package/src/meeting/index.ts +1435 -1210
  216. package/src/meeting/muteState.ts +62 -31
  217. package/src/meeting/request.ts +160 -113
  218. package/src/meeting/state.ts +45 -30
  219. package/src/meeting/util.ts +131 -90
  220. package/src/meeting-info/collection.ts +2 -1
  221. package/src/meeting-info/index.ts +32 -30
  222. package/src/meeting-info/meeting-info-v2.ts +106 -108
  223. package/src/meeting-info/request.ts +9 -3
  224. package/src/meeting-info/util.ts +54 -46
  225. package/src/meeting-info/utilv2.ts +59 -53
  226. package/src/meetings/collection.ts +1 -1
  227. package/src/meetings/index.ts +513 -441
  228. package/src/meetings/request.ts +26 -24
  229. package/src/meetings/util.ts +26 -23
  230. package/src/member/index.ts +55 -49
  231. package/src/member/util.ts +26 -13
  232. package/src/members/collection.ts +0 -1
  233. package/src/members/index.ts +172 -121
  234. package/src/members/request.ts +46 -14
  235. package/src/members/util.ts +44 -42
  236. package/src/metrics/config.ts +254 -81
  237. package/src/metrics/constants.ts +0 -2
  238. package/src/metrics/index.ts +84 -71
  239. package/src/networkQualityMonitor/index.ts +20 -23
  240. package/src/peer-connection-manager/index.ts +321 -241
  241. package/src/peer-connection-manager/util.ts +4 -2
  242. package/src/personal-meeting-room/index.ts +12 -16
  243. package/src/personal-meeting-room/request.ts +10 -3
  244. package/src/personal-meeting-room/util.ts +3 -3
  245. package/src/reachability/index.ts +61 -59
  246. package/src/reachability/request.ts +36 -32
  247. package/src/reactions/reactions.ts +4 -4
  248. package/src/reactions/reactions.type.ts +2 -3
  249. package/src/reconnection-manager/index.ts +159 -98
  250. package/src/roap/collection.ts +2 -4
  251. package/src/roap/handler.ts +63 -32
  252. package/src/roap/index.ts +78 -58
  253. package/src/roap/request.ts +69 -54
  254. package/src/roap/state.ts +17 -11
  255. package/src/roap/turnDiscovery.ts +60 -31
  256. package/src/roap/util.ts +39 -31
  257. package/src/statsAnalyzer/global.ts +30 -33
  258. package/src/statsAnalyzer/index.ts +397 -169
  259. package/src/statsAnalyzer/mqaUtil.ts +178 -72
  260. package/src/transcription/index.ts +34 -32
  261. package/test/integration/spec/journey.js +666 -462
  262. package/test/integration/spec/space-meeting.js +318 -203
  263. package/test/integration/spec/transcription.js +6 -7
  264. package/test/unit/spec/common/browser-detection.js +9 -28
  265. package/test/unit/spec/fixture/locus.js +92 -90
  266. package/test/unit/spec/locus-info/controlsUtils.js +5 -5
  267. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  268. package/test/unit/spec/locus-info/index.js +1 -2
  269. package/test/unit/spec/locus-info/infoUtils.js +24 -31
  270. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  271. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  272. package/test/unit/spec/locus-info/parser.js +3 -9
  273. package/test/unit/spec/locus-info/selfConstant.js +72 -103
  274. package/test/unit/spec/locus-info/selfUtils.js +21 -12
  275. package/test/unit/spec/meeting/effectsState.js +33 -45
  276. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
  277. package/test/unit/spec/meeting/index.js +1141 -649
  278. package/test/unit/spec/meeting/muteState.js +42 -33
  279. package/test/unit/spec/meeting/request.js +56 -45
  280. package/test/unit/spec/meeting/utils.js +66 -49
  281. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  282. package/test/unit/spec/meeting-info/request.js +7 -9
  283. package/test/unit/spec/meeting-info/util.js +11 -12
  284. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  285. package/test/unit/spec/meetings/collection.js +1 -1
  286. package/test/unit/spec/meetings/index.js +438 -257
  287. package/test/unit/spec/meetings/utils.js +14 -12
  288. package/test/unit/spec/member/index.js +0 -1
  289. package/test/unit/spec/member/util.js +5 -6
  290. package/test/unit/spec/members/index.js +84 -35
  291. package/test/unit/spec/members/request.js +29 -20
  292. package/test/unit/spec/members/utils.js +8 -5
  293. package/test/unit/spec/metrics/index.js +16 -21
  294. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  295. package/test/unit/spec/peerconnection-manager/index.js +88 -58
  296. package/test/unit/spec/peerconnection-manager/utils.js +5 -4
  297. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +7 -8
  298. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  299. package/test/unit/spec/reachability/index.ts +9 -11
  300. package/test/unit/spec/reconnection-manager/index.js +14 -17
  301. package/test/unit/spec/roap/index.ts +18 -8
  302. package/test/unit/spec/roap/turnDiscovery.ts +22 -19
  303. package/test/unit/spec/roap/util.js +3 -3
  304. package/test/unit/spec/stats-analyzer/index.js +29 -24
  305. package/test/utils/cmr.js +44 -42
  306. package/test/utils/testUtils.js +83 -74
  307. package/test/utils/webex-config.js +18 -18
  308. package/test/utils/webex-test-users.js +53 -50
@@ -1 +1 @@
1
- {"version":3,"names":["checkForAndHandleErrors","action","meeting","correlationId","type","msg","messageType","errorType","RoapUtil","findError","handleError","mediaProperties","peerConnection","then","res","RoapCollection","deleteSessionSequence","seq","catch","err","LoggerProxy","logger","warn","ensureMeeting","compareWithLastRoapMessage","lastRoapMessage","currentRoapMessage","handleSessionStep","roap","session","locusUrl","sequenceId","OFFER","_OFFER_","GLARE_OFFER","remote","metricName","BEHAVIORAL_METRICS","ROAP_GLARE_CONDITION","data","correlation_id","locus_id","split","pop","sequence","Metrics","sendBehavioralMetric","info","state","RoapHandler","attrs","options","roapOk","roapAnswer","roapFinished","ROAP","ROAP_STATE","INIT","WAIT_TX_ANSWER","shouldHandleMedia","updatePeerConnection","answerSdps","mediaId","sdps","audioMuted","isAudioMuted","videoMuted","isVideoMuted","error","ROAP_ANSWER_FAILURE","reason","message","stack","metadata","name","WAIT_TX_OK","setRemoteDescription","ERROR","GLARE","tieBreaker","log","step","ROAP_SIGNAL","GLARE_RESOLVED","perform","signal","prefix","RECEIVE_ROAP_MSG","execute","RX_","SEND_ROAP_MSG","local","TX_","SEND_ROAP_MSG_SUCCESS","RECEIVE_CALL_LEAVE","deleteSession","RESET_ROAP_STATE","getSessionSequence","webex","meetings","meetingCollection","getByKey","handleAction","StatelessWebexPlugin"],"sources":["handler.ts"],"sourcesContent":["/* no-param-reassign */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_} from '../constants';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nimport RoapUtil from './util';\nimport RoapCollection from './collection';\nimport Meeting from '../meeting';\n\n\nconst checkForAndHandleErrors = (action, meeting, correlationId) => {\n if (action && action.type) {\n if (action.msg && action.msg.messageType && action.msg.errorType) {\n if (RoapUtil.findError(action.msg.messageType, action.msg.errorType, action.type)) {\n RoapUtil.handleError(meeting.mediaProperties.peerConnection)\n .then((res) => {\n if (res) {\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.warn(`Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ${err}`);\n });\n\n return true;\n }\n }\n if (!RoapUtil.ensureMeeting(meeting, action.type)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst compareWithLastRoapMessage = (lastRoapMessage, currentRoapMessage) => lastRoapMessage?.msg?.seq === currentRoapMessage.msg.seq && lastRoapMessage?.msg?.messageType === currentRoapMessage.msg.messageType;\n\nconst handleSessionStep = ({\n roap, session, locusUrl, correlationId\n}) => {\n const {seq: sequenceId, messageType} = roap.msg;\n\n if (session.OFFER && messageType === _OFFER_) {\n session.GLARE_OFFER = roap.msg;\n session.GLARE_OFFER.remote = !!roap.remote;\n const metricName = BEHAVIORAL_METRICS.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId\n };\n\n Metrics.sendBehavioralMetric(metricName, data);\n\n LoggerProxy.logger.warn(`Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ${sequenceId}`);\n }\n else {\n LoggerProxy.logger.info(`Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:${sequenceId} new mercury event ${messageType}local state: ${JSON.stringify(session.state.state, null, 2)}`);\n session[messageType] = roap.msg;\n session[messageType].remote = !!roap.remote;\n }\n};\n\n/**\n * @class RoapHandler\n */\nexport default class RoapHandler extends StatelessWebexPlugin {\n attrs: any;\n lastRoapMessage: any;\n options: any;\n roapAnswer: any;\n roapFinished: any;\n roapOk: any;\n \n constructor(attrs, options, roapOk, roapAnswer, roapFinished) {\n super({}, options);\n this.attrs = attrs;\n this.options = options;\n this.roapOk = roapOk;\n this.roapFinished = roapFinished;\n this.roapAnswer = roapAnswer;\n this.lastRoapMessage = null;\n }\n\n /**\n *\n * @param {Object} session\n * @param {Meeting} meeting\n * @param {Object} action\n * @returns {null}\n */\n perform(session: any, meeting: any, action: any) {\n switch (session.state.state) {\n case ROAP.ROAP_STATE.INIT:\n this.roapFinished(meeting.correlationId, action.msg.seq);\n break;\n\n // TODO: (important )handle roap state for sending offers as well\n // case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n // case ROAP.ROAP_STATE.WAIT_RX_OK:\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n // eslint-disable-next-line no-warning-comments\n // TODO: sometime the you get an answer while you are creating an offer so SKIP\n // Server will send the mercury event comes back\n if (RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.updatePeerConnection(meeting, session)\n .then((answerSdps) => {\n this.roapAnswer({\n mediaId: meeting.mediaId,\n sdps: answerSdps,\n seq: session.OFFER.seq,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted()\n });\n })\n .catch((error) => {\n const metricName = BEHAVIORAL_METRICS.ROAP_ANSWER_FAILURE;\n const data = {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack\n };\n const metadata = {\n type: error.name\n };\n\n Metrics.sendBehavioralMetric(metricName, data, metadata);\n LoggerProxy.logger.error(`Roap:handler#perform --> Error occured during wait receive answer, continuing, ${error}`);\n });\n }\n break;\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (!RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.setRemoteDescription(meeting, session).then((res) => {\n this.roapOk(res);\n });\n }\n break;\n // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:\n case ROAP.ROAP_STATE.ERROR:\n LoggerProxy.logger.error(`Roap:handler#perform --> Roap State ERROR for session: ${session}`);\n break;\n case ROAP.ROAP_STATE.GLARE:\n session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;\n session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;\n LoggerProxy.logger.warn('Roap:handler#perform --> Roap State resolved the GLARE condition.');\n if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {\n // 2\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State local offer won after GLARE.');\n }\n else {\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State remote offer won after GLARE.');\n }\n session.state.step(ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);\n // @ts-ignore\n this.perform(session, meeting);\n break;\n default:\n break;\n }\n }\n\n /**\n *\n * @param {String} signal\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} prefix\n * @returns {null}\n */\n execute(signal: string, session: any, action: any, meeting: Meeting, prefix: string) {\n if (session && session.state) {\n handleSessionStep({\n roap: action,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n session\n });\n signal = ROAP.ROAP_SIGNAL[`${prefix}${action.msg.messageType}`];\n session.state.step(signal, meeting, action);\n this.perform(session, meeting, action);\n }\n }\n\n /**\n *\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} correlationId\n * @returns {Boolean}\n */\n handleAction(session: object, action: any, meeting: Meeting, correlationId: string) {\n let signal;\n\n\n switch (action.type) {\n case ROAP.RECEIVE_ROAP_MSG:\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ${JSON.stringify(action)}`);\n if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {\n LoggerProxy.logger.warn(`Roap:handler#handleAction --> duplicate roap offer from server: ${action.msg.seq}`);\n }\n else {\n this.lastRoapMessage = action;\n action.remote = true;\n this.execute(signal, session, action, meeting, ROAP.RX_);\n }\n break;\n case ROAP.SEND_ROAP_MSG:\n LoggerProxy.logger.log(`Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ${JSON.stringify(action)}`);\n\n action.local = true;\n this.execute(signal, session, action, meeting, ROAP.TX_);\n break;\n case ROAP.SEND_ROAP_MSG_SUCCESS:\n // NOTE: When server send back an answer via mercury the\n // remote SDP is already saved sent and ok message is sent back\n // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS\n break;\n case ROAP.RECEIVE_CALL_LEAVE:\n RoapCollection.deleteSession(correlationId);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ${correlationId}`); break;\n case ROAP.RESET_ROAP_STATE:\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ${action.msg.seq}`); break;\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n *\n * @param {Object} action\n * @returns {Boolean}\n */\n submit(action: any) {\n const {correlationId} = action;\n let {seq} = action;\n\n if (!seq && action.msg) {\n seq = action.msg.seq;\n }\n const session = RoapCollection.getSessionSequence(correlationId, seq);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n if (checkForAndHandleErrors(action, meeting, correlationId)) {\n return true;\n }\n\n return this.handleAction(session, action, meeting, correlationId);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["checkForAndHandleErrors","action","meeting","correlationId","type","msg","messageType","errorType","RoapUtil","findError","handleError","mediaProperties","peerConnection","then","res","RoapCollection","deleteSessionSequence","seq","catch","err","LoggerProxy","logger","warn","ensureMeeting","compareWithLastRoapMessage","lastRoapMessage","currentRoapMessage","handleSessionStep","roap","session","locusUrl","sequenceId","OFFER","_OFFER_","GLARE_OFFER","remote","metricName","BEHAVIORAL_METRICS","ROAP_GLARE_CONDITION","data","correlation_id","locus_id","split","pop","sequence","Metrics","sendBehavioralMetric","info","state","RoapHandler","attrs","options","roapOk","roapAnswer","roapFinished","ROAP","ROAP_STATE","INIT","WAIT_TX_ANSWER","shouldHandleMedia","updatePeerConnection","answerSdps","mediaId","sdps","audioMuted","isAudioMuted","videoMuted","isVideoMuted","error","ROAP_ANSWER_FAILURE","reason","message","stack","metadata","name","WAIT_TX_OK","setRemoteDescription","ERROR","GLARE","tieBreaker","log","step","ROAP_SIGNAL","GLARE_RESOLVED","perform","signal","prefix","RECEIVE_ROAP_MSG","execute","RX_","SEND_ROAP_MSG","local","TX_","SEND_ROAP_MSG_SUCCESS","RECEIVE_CALL_LEAVE","deleteSession","RESET_ROAP_STATE","getSessionSequence","webex","meetings","meetingCollection","getByKey","handleAction","StatelessWebexPlugin"],"sources":["handler.ts"],"sourcesContent":["/* no-param-reassign */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_} from '../constants';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nimport RoapUtil from './util';\nimport RoapCollection from './collection';\nimport Meeting from '../meeting';\n\nconst checkForAndHandleErrors = (action, meeting, correlationId) => {\n if (action && action.type) {\n if (action.msg && action.msg.messageType && action.msg.errorType) {\n if (RoapUtil.findError(action.msg.messageType, action.msg.errorType, action.type)) {\n RoapUtil.handleError(meeting.mediaProperties.peerConnection)\n .then((res) => {\n if (res) {\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.warn(\n `Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ${err}`\n );\n });\n\n return true;\n }\n }\n if (!RoapUtil.ensureMeeting(meeting, action.type)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst compareWithLastRoapMessage = (lastRoapMessage, currentRoapMessage) =>\n lastRoapMessage?.msg?.seq === currentRoapMessage.msg.seq &&\n lastRoapMessage?.msg?.messageType === currentRoapMessage.msg.messageType;\n\nconst handleSessionStep = ({roap, session, locusUrl, correlationId}) => {\n const {seq: sequenceId, messageType} = roap.msg;\n\n if (session.OFFER && messageType === _OFFER_) {\n session.GLARE_OFFER = roap.msg;\n session.GLARE_OFFER.remote = !!roap.remote;\n const metricName = BEHAVIORAL_METRICS.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId,\n };\n\n Metrics.sendBehavioralMetric(metricName, data);\n\n LoggerProxy.logger.warn(\n `Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ${sequenceId}`\n );\n } else {\n LoggerProxy.logger.info(\n `Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:${sequenceId} new mercury event ${messageType}local state: ${JSON.stringify(\n session.state.state,\n null,\n 2\n )}`\n );\n session[messageType] = roap.msg;\n session[messageType].remote = !!roap.remote;\n }\n};\n\n/**\n * @class RoapHandler\n */\nexport default class RoapHandler extends StatelessWebexPlugin {\n attrs: any;\n lastRoapMessage: any;\n options: any;\n roapAnswer: any;\n roapFinished: any;\n roapOk: any;\n\n constructor(attrs, options, roapOk, roapAnswer, roapFinished) {\n super({}, options);\n this.attrs = attrs;\n this.options = options;\n this.roapOk = roapOk;\n this.roapFinished = roapFinished;\n this.roapAnswer = roapAnswer;\n this.lastRoapMessage = null;\n }\n\n /**\n *\n * @param {Object} session\n * @param {Meeting} meeting\n * @param {Object} action\n * @returns {null}\n */\n perform(session: any, meeting: any, action: any) {\n switch (session.state.state) {\n case ROAP.ROAP_STATE.INIT:\n this.roapFinished(meeting.correlationId, action.msg.seq);\n break;\n\n // TODO: (important )handle roap state for sending offers as well\n // case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n // case ROAP.ROAP_STATE.WAIT_RX_OK:\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n // eslint-disable-next-line no-warning-comments\n // TODO: sometime the you get an answer while you are creating an offer so SKIP\n // Server will send the mercury event comes back\n if (RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.updatePeerConnection(meeting, session)\n .then((answerSdps) => {\n this.roapAnswer({\n mediaId: meeting.mediaId,\n sdps: answerSdps,\n seq: session.OFFER.seq,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n });\n })\n .catch((error) => {\n const metricName = BEHAVIORAL_METRICS.ROAP_ANSWER_FAILURE;\n const data = {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n };\n const metadata = {\n type: error.name,\n };\n\n Metrics.sendBehavioralMetric(metricName, data, metadata);\n LoggerProxy.logger.error(\n `Roap:handler#perform --> Error occured during wait receive answer, continuing, ${error}`\n );\n });\n }\n break;\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (!RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.setRemoteDescription(meeting, session).then((res) => {\n this.roapOk(res);\n });\n }\n break;\n // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:\n case ROAP.ROAP_STATE.ERROR:\n LoggerProxy.logger.error(\n `Roap:handler#perform --> Roap State ERROR for session: ${session}`\n );\n break;\n case ROAP.ROAP_STATE.GLARE:\n session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;\n session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;\n LoggerProxy.logger.warn(\n 'Roap:handler#perform --> Roap State resolved the GLARE condition.'\n );\n if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {\n // 2\n LoggerProxy.logger.log(\n 'Roap:handler#perform --> Roap State local offer won after GLARE.'\n );\n } else {\n LoggerProxy.logger.log(\n 'Roap:handler#perform --> Roap State remote offer won after GLARE.'\n );\n }\n session.state.step(ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);\n // @ts-ignore\n this.perform(session, meeting);\n break;\n default:\n break;\n }\n }\n\n /**\n *\n * @param {String} signal\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} prefix\n * @returns {null}\n */\n execute(signal: string, session: any, action: any, meeting: Meeting, prefix: string) {\n if (session && session.state) {\n handleSessionStep({\n roap: action,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n session,\n });\n signal = ROAP.ROAP_SIGNAL[`${prefix}${action.msg.messageType}`];\n session.state.step(signal, meeting, action);\n this.perform(session, meeting, action);\n }\n }\n\n /**\n *\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} correlationId\n * @returns {Boolean}\n */\n handleAction(session: object, action: any, meeting: Meeting, correlationId: string) {\n let signal;\n\n switch (action.type) {\n case ROAP.RECEIVE_ROAP_MSG:\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ${JSON.stringify(\n action\n )}`\n );\n if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {\n LoggerProxy.logger.warn(\n `Roap:handler#handleAction --> duplicate roap offer from server: ${action.msg.seq}`\n );\n } else {\n this.lastRoapMessage = action;\n action.remote = true;\n this.execute(signal, session, action, meeting, ROAP.RX_);\n }\n break;\n case ROAP.SEND_ROAP_MSG:\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ${JSON.stringify(\n action\n )}`\n );\n\n action.local = true;\n this.execute(signal, session, action, meeting, ROAP.TX_);\n break;\n case ROAP.SEND_ROAP_MSG_SUCCESS:\n // NOTE: When server send back an answer via mercury the\n // remote SDP is already saved sent and ok message is sent back\n // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS\n break;\n case ROAP.RECEIVE_CALL_LEAVE:\n RoapCollection.deleteSession(correlationId);\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ${correlationId}`\n );\n break;\n case ROAP.RESET_ROAP_STATE:\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ${action.msg.seq}`\n );\n break;\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n *\n * @param {Object} action\n * @returns {Boolean}\n */\n submit(action: any) {\n const {correlationId} = action;\n let {seq} = action;\n\n if (!seq && action.msg) {\n seq = action.msg.seq;\n }\n const session = RoapCollection.getSessionSequence(correlationId, seq);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n if (checkForAndHandleErrors(action, meeting, correlationId)) {\n return true;\n }\n\n return this.handleAction(session, action, meeting, correlationId);\n }\n}\n"],"mappings":"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"}
@@ -1,59 +1,33 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
-
5
4
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
-
7
5
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
-
9
6
  _Object$defineProperty(exports, "__esModule", {
10
7
  value: true
11
8
  });
12
-
13
9
  exports.default = void 0;
14
-
15
10
  var _isNan = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/is-nan"));
16
-
17
11
  var _parseFloat2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-float"));
18
-
19
12
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
20
-
21
13
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
22
-
23
14
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
24
-
25
15
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
26
-
27
16
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
28
-
29
17
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
30
-
31
18
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
32
-
33
19
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
34
-
35
20
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
36
-
37
21
  var _webexCore = require("@webex/webex-core");
38
-
39
22
  var _constants = require("../constants");
40
-
41
23
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
42
-
43
24
  var _util = _interopRequireDefault(require("../meeting/util"));
44
-
45
25
  var _handler = _interopRequireDefault(require("./handler"));
46
-
47
26
  var _request = _interopRequireDefault(require("./request"));
48
-
49
27
  var _collection = _interopRequireDefault(require("./collection"));
50
-
51
28
  var _turnDiscovery = _interopRequireDefault(require("./turnDiscovery"));
52
-
53
29
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
54
-
55
30
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
56
-
57
31
  /**
58
32
  * Roap options
59
33
  * @typedef {Object} RoapOptions
@@ -62,14 +36,12 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
62
36
  * @property {Number} roapSeq
63
37
  * @property {Boolean} reconnect
64
38
  */
65
-
66
39
  /**
67
- * @typedef {Object} SeqOptions
68
- * @property {String} correlationId
69
- * @property {String} mediaId
70
- * @property {Number} seq
71
- */
72
-
40
+ * @typedef {Object} SeqOptions
41
+ * @property {String} correlationId
42
+ * @property {String} mediaId
43
+ * @property {Number} seq
44
+ */
73
45
  /**
74
46
  * @class Roap
75
47
  * @export
@@ -77,9 +49,7 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
77
49
  */
78
50
  var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
79
51
  (0, _inherits2.default)(Roap, _StatelessWebexPlugin);
80
-
81
52
  var _super = _createSuper(Roap);
82
-
83
53
  /**
84
54
  *
85
55
  * @param {Object} attrs
@@ -87,7 +57,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
87
57
  */
88
58
  function Roap(attrs, _options) {
89
59
  var _this;
90
-
91
60
  (0, _classCallCheck2.default)(this, Roap);
92
61
  _this = _super.call(this, {}, _options);
93
62
  /**
@@ -96,7 +65,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
96
65
  * @private
97
66
  * @memberof Roap
98
67
  */
99
-
100
68
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "attrs", void 0);
101
69
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastRoapOffer", void 0);
102
70
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "options", void 0);
@@ -111,7 +79,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
111
79
  version: _constants.ROAP.ROAP_VERSION,
112
80
  seq: typeof options.roapSeq !== 'number' && (0, _isNan.default)((0, _parseFloat2.default)(options.roapSeq)) ? 0 : options.roapSeq + 1,
113
81
  tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario
114
-
115
82
  };
116
83
 
117
84
  _this.roapHandler.submit({
@@ -119,7 +86,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
119
86
  msg: roapMessage,
120
87
  correlationId: meeting.correlationId
121
88
  });
122
-
123
89
  var roapBody = {
124
90
  localMedias: [{
125
91
  localSdp: (0, _stringify.default)(_this.roapRequest.attachRechabilityData({
@@ -128,10 +94,11 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
128
94
  // TODO: check whats the need for video and audiomute
129
95
  audioMuted: !!meeting.isAudioMuted(),
130
96
  videoMuted: !!meeting.isVideoMuted()
131
- })) // mediaId: meeting.mediaId
132
-
97
+ }))
98
+ // mediaId: meeting.mediaId
133
99
  }]
134
100
  };
101
+
135
102
  return _util.default.joinMeetingOptions(meeting, {
136
103
  roapMessage: roapBody
137
104
  }).then(function (locus) {
@@ -140,11 +107,12 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
140
107
  seq: roapMessage.seq,
141
108
  correlationId: meeting.correlationId
142
109
  });
110
+ meeting.setRoapSeq(roapMessage.seq);
143
111
 
144
- meeting.setRoapSeq(roapMessage.seq); // eslint-disable-next-line no-warning-comments
112
+ // eslint-disable-next-line no-warning-comments
145
113
  // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here
146
-
147
- return locus; // eslint-disable-next-line no-warning-comments
114
+ return locus;
115
+ // eslint-disable-next-line no-warning-comments
148
116
  // TODO: check where to update the sequence number
149
117
  });
150
118
  });
@@ -155,7 +123,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
155
123
  * @private
156
124
  * @memberof Roap
157
125
  */
158
-
159
126
  _this.options = _options;
160
127
  /**
161
128
  * The Roap Process State Handler
@@ -164,7 +131,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
164
131
  * @private
165
132
  * @memberof Roap
166
133
  */
167
-
168
134
  _this.roapHandler = new _handler.default(_this.attrs, _this.options, _this.sendRoapOK.bind((0, _assertThisInitialized2.default)(_this)), _this.sendRoapAnswer.bind((0, _assertThisInitialized2.default)(_this)), _this.roapFinished.bind((0, _assertThisInitialized2.default)(_this)));
169
135
  /**
170
136
  * The Roap Request Server Proxy Object
@@ -174,7 +140,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
174
140
  * @memberof Roap
175
141
  */
176
142
  // @ts-ignore
177
-
178
143
  _this.roapRequest = new _request.default({}, _options);
179
144
  /**
180
145
  * The last roap offer sent to server and acked
@@ -183,11 +148,11 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
183
148
  * @private
184
149
  * @memberof Roap
185
150
  */
186
-
187
151
  _this.lastRoapOffer = {};
188
152
  _this.turnDiscovery = new _turnDiscovery.default(_this.roapRequest);
189
153
  return _this;
190
154
  }
155
+
191
156
  /**
192
157
  * Starts listening to mercury events for Roap messages
193
158
  * @param {object} data event object
@@ -195,16 +160,12 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
195
160
  * @private
196
161
  * @memberof Roap
197
162
  */
198
-
199
-
200
163
  (0, _createClass2.default)(Roap, [{
201
164
  key: "roapEvent",
202
165
  value: function roapEvent(data) {
203
166
  var msg = data.message;
204
167
  var correlationId = data.correlationId;
205
-
206
168
  _loggerProxy.default.logger.log("Roap:index#roapEvent --> Received Roap Message [".concat((0, _stringify.default)(msg, null, 2), "]"));
207
-
208
169
  if (msg.messageType === _constants.ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
209
170
  // turn discovery is not part of normal roap protocol and so we are not handling it
210
171
  // through the usual roap state machine
@@ -217,6 +178,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
217
178
  });
218
179
  }
219
180
  }
181
+
220
182
  /**
221
183
  *
222
184
  * @param {String} correlationId correlation id of a meeting
@@ -225,7 +187,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
225
187
  * @private
226
188
  * @memberof Roap
227
189
  */
228
-
229
190
  }, {
230
191
  key: "stop",
231
192
  value: function stop(correlationId, seq) {
@@ -236,6 +197,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
236
197
  });
237
198
  return _promise.default.resolve();
238
199
  }
200
+
239
201
  /**
240
202
  *
241
203
  * @param {SeqOptions} options
@@ -243,24 +205,19 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
243
205
  * @private
244
206
  * @memberof Roap
245
207
  */
246
-
247
208
  }, {
248
209
  key: "sendRoapOK",
249
210
  value: function sendRoapOK(options) {
250
211
  var _this2 = this;
251
-
252
212
  return _promise.default.resolve().then(function () {
253
213
  // @ts-ignore
254
214
  var meeting = _this2.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);
255
-
256
215
  var roapMessage = {
257
216
  messageType: _constants.ROAP.ROAP_TYPES.OK,
258
217
  version: _constants.ROAP.ROAP_VERSION,
259
218
  seq: options.seq
260
219
  };
261
-
262
220
  _loggerProxy.default.logger.log("Roap:index#sendRoapOK --> ROAP OK sending with seq ".concat(options.seq));
263
-
264
221
  return _this2.roapRequest.sendRoap({
265
222
  roapMessage: roapMessage,
266
223
  locusSelfUrl: meeting.selfUrl,
@@ -275,15 +232,14 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
275
232
  msg: roapMessage,
276
233
  correlationId: options.correlationId
277
234
  });
278
-
279
235
  _loggerProxy.default.logger.log("Roap:index#sendRoapOK --> ROAP OK sent with seq ".concat(options.seq));
280
-
281
236
  meeting.setRoapSeq(options.seq);
282
237
  });
283
238
  });
284
- } // eslint-disable-next-line no-warning-comments
285
- // TODO: try to merge sendRoapOk and roapAnswer
239
+ }
286
240
 
241
+ // eslint-disable-next-line no-warning-comments
242
+ // TODO: try to merge sendRoapOk and roapAnswer
287
243
  /**
288
244
  * Sends a ROAP answer...
289
245
  * @param {SeqOptions} options
@@ -293,12 +249,10 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
293
249
  * @private
294
250
  * @memberof Roap
295
251
  */
296
-
297
252
  }, {
298
253
  key: "sendRoapAnswer",
299
254
  value: function sendRoapAnswer(options) {
300
255
  var _this3 = this;
301
-
302
256
  // @ts-ignore
303
257
  var meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);
304
258
  var roapMessage = {
@@ -322,7 +276,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
322
276
  meetingId: meeting.id
323
277
  }).then(function () {
324
278
  meeting.setRoapSeq(options.seq);
325
-
326
279
  _this3.roapHandler.submit({
327
280
  type: _constants.ROAP.SEND_ROAP_MSG_SUCCESS,
328
281
  seq: roapMessage.seq,
@@ -330,6 +283,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
330
283
  });
331
284
  });
332
285
  }
286
+
333
287
  /**
334
288
  * Sends a ROAP error...
335
289
  * @param {Object} session
@@ -339,7 +293,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
339
293
  * @private
340
294
  * @memberof Roap
341
295
  */
342
-
343
296
  }, {
344
297
  key: "sendRoapError",
345
298
  value: function sendRoapError(session, locus, errorType) {
@@ -351,6 +304,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
351
304
  };
352
305
  return this.roapRequest.sendRoap(msg, locus);
353
306
  }
307
+
354
308
  /**
355
309
  * sends a roap media request
356
310
  * @param {RoapOptions} options
@@ -358,14 +312,12 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
358
312
  * @private
359
313
  * @memberof Roap
360
314
  */
361
-
362
315
  }, {
363
316
  key: "sendRoapMediaRequest",
364
317
  value: function sendRoapMediaRequest(options) {
365
318
  var _this4 = this;
366
-
367
319
  var meeting = options.meeting,
368
- reconnect = options.reconnect;
320
+ reconnect = options.reconnect;
369
321
  var roapMessage = {
370
322
  messageType: _constants.ROAP.ROAP_TYPES.OFFER,
371
323
  sdps: [options.sdp],
@@ -373,16 +325,17 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
373
325
  version: _constants.ROAP.ROAP_VERSION,
374
326
  seq: typeof options.roapSeq !== 'number' && (0, _isNan.default)((0, _parseFloat2.default)(options.roapSeq)) ? 0 : options.roapSeq + 1,
375
327
  tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario
376
-
377
328
  };
329
+
378
330
  this.roapHandler.submit({
379
331
  type: _constants.ROAP.SEND_ROAP_MSG,
380
332
  msg: roapMessage,
381
333
  correlationId: meeting.correlationId
382
- }); // When reconnecting, it's important that the first roap message being sent out has empty media id.
334
+ });
335
+
336
+ // When reconnecting, it's important that the first roap message being sent out has empty media id.
383
337
  // Normally this is the roap offer, but when TURN discovery is enabled,
384
338
  // then this is the TURN discovery request message
385
-
386
339
  var sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;
387
340
  return this.roapRequest.sendRoap({
388
341
  roapMessage: roapMessage,
@@ -394,26 +347,25 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
394
347
  meetingId: meeting.id
395
348
  }).then(function (_ref) {
396
349
  var locus = _ref.locus,
397
- mediaConnections = _ref.mediaConnections;
398
-
350
+ mediaConnections = _ref.mediaConnections;
399
351
  _this4.roapHandler.submit({
400
352
  type: _constants.ROAP.SEND_ROAP_MSG_SUCCESS,
401
353
  seq: roapMessage.seq,
402
354
  correlationId: meeting.correlationId
403
355
  });
404
-
405
356
  meeting.setRoapSeq(roapMessage.seq);
406
-
407
357
  if (mediaConnections) {
408
358
  meeting.updateMediaConnections(mediaConnections);
409
- } // eslint-disable-next-line no-warning-comments
410
- // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here
359
+ }
411
360
 
412
-
413
- return locus; // eslint-disable-next-line no-warning-comments
361
+ // eslint-disable-next-line no-warning-comments
362
+ // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here
363
+ return locus;
364
+ // eslint-disable-next-line no-warning-comments
414
365
  // TODO: check where to update the sequence number
415
366
  });
416
367
  }
368
+
417
369
  /**
418
370
  * sends a roap media request
419
371
  * @param {RoapOptions} options
@@ -421,29 +373,27 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
421
373
  * @private
422
374
  * @memberof Roap
423
375
  */
424
-
425
376
  }, {
426
377
  key: "roapFinished",
427
378
  value:
428
379
  /**
429
- * Called when the roap sequence is finished (completed successfully or failed)
430
- * @param {String} correlationId id of the meeting affected
431
- * @param {String} sequenceId the id of the finished sequence
432
- * @returns {undefined}
433
- * @private
434
- * @memberof Roap
435
- */
380
+ * Called when the roap sequence is finished (completed successfully or failed)
381
+ * @param {String} correlationId id of the meeting affected
382
+ * @param {String} sequenceId the id of the finished sequence
383
+ * @returns {undefined}
384
+ * @private
385
+ * @memberof Roap
386
+ */
436
387
  function roapFinished(correlationId, sequenceId) {
437
- _collection.default.onSessionSequenceFinish(correlationId, sequenceId); // @ts-ignore
438
-
439
-
388
+ _collection.default.onSessionSequenceFinish(correlationId, sequenceId);
389
+ // @ts-ignore
440
390
  var meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);
441
391
  meeting.mediaNegotiatedEvent();
442
-
443
392
  if (!_collection.default.isBusy(correlationId)) {
444
393
  meeting.processNextQueuedMediaUpdate();
445
394
  }
446
395
  }
396
+
447
397
  /**
448
398
  * Performs a TURN server discovery procedure, which involves exchanging
449
399
  * some roap messages with the server. This exchange has to be done before
@@ -454,7 +404,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
454
404
  * media connection just after a reconnection
455
405
  * @returns {Promise}
456
406
  */
457
-
458
407
  }, {
459
408
  key: "doTurnDiscovery",
460
409
  value: function doTurnDiscovery(meeting, isReconnecting) {
@@ -463,6 +412,5 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
463
412
  }]);
464
413
  return Roap;
465
414
  }(_webexCore.StatelessWebexPlugin);
466
-
467
415
  exports.default = Roap;
468
416
  //# sourceMappingURL=index.js.map
@@ -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.ts"],"sourcesContent":["// @ts-ignore\nimport {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';\nimport Meeting from '../meeting';\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 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 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 // @ts-ignore\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 private roapEvent(data: any) {\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 private stop(correlationId: string, seq: number) {\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 private 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 })\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 private 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.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 private sendRoapError(session: any, locus: object, errorType: string) {\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: any) {\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: any) => {\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 private roapFinished(correlationId: string, sequenceId: string) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n // @ts-ignore\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: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;IACqBA,I;;;;;EAQnB;AACF;AACA;AACA;AACA;EACE,cAAYC,KAAZ,EAAwBC,QAAxB,EAAsC;IAAA;;IAAA;IACpC,0BAAM,EAAN,EAAUA,QAAV;IACA;AACJ;AACA;AACA;AACA;AACA;;IAPwC;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA,kGAyQhB,UAACA,OAAD,EAAkB;MACtC,IAAOC,OAAP,GAAkBD,OAAlB,CAAOC,OAAP;MACA,IAAMC,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAA,CAAKC,UAAL,CAAgBC,KADX;QAElBC,IAAI,EAAE,CAACP,OAAO,CAACQ,GAAT,CAFY;QAGlBC,OAAO,EAAEL,eAAA,CAAKM,YAHI;QAIlBC,GAAG,EAAE,OAAOX,OAAO,CAACY,OAAf,KAA2B,QAA3B,IAAuC,oBAAa,0BAAWZ,OAAO,CAACY,OAAnB,CAAb,CAAvC,GAAmF,CAAnF,GAAuFZ,OAAO,CAACY,OAAR,GAAkB,CAJ5F;QAKlBC,UAAU,EAAE,UALM,CAKK;;MALL,CAApB;;MAQA,MAAKC,WAAL,CAAiBC,MAAjB,CAAwB;QACtBC,IAAI,EAAEZ,eAAA,CAAKa,aADW;QAEtBC,GAAG,EAAEhB,WAFiB;QAGtBiB,aAAa,EAAElB,OAAO,CAACkB;MAHD,CAAxB;;MAMA,IAAMC,QAAQ,GAAG;QACfC,WAAW,EAAE,CACX;UACEC,QAAQ,EAAE,wBAAe,MAAKC,WAAL,CAAiBC,qBAAjB,CAAuC;YAC9DtB,WAAW,EAAXA,WAD8D;YAE9D;YACA;YACAuB,UAAU,EAAE,CAAC,CAACxB,OAAO,CAACyB,YAAR,EAJgD;YAK9DC,UAAU,EAAE,CAAC,CAAC1B,OAAO,CAAC2B,YAAR;UALgD,CAAvC,CAAf,CADZ,CAQA;;QARA,CADW;MADE,CAAjB;MAeA,OAAOC,aAAA,CAAYC,kBAAZ,CAA+B7B,OAA/B,EAAwC;QAACC,WAAW,EAAEkB;MAAd,CAAxC,EACJW,IADI,CACC,UAACC,KAAD,EAAW;QACf,MAAKlB,WAAL,CAAiBC,MAAjB,CAAwB;UACtBC,IAAI,EAAEZ,eAAA,CAAK6B,qBADW;UAEtBtB,GAAG,EAAET,WAAW,CAACS,GAFK;UAGtBQ,aAAa,EAAElB,OAAO,CAACkB;QAHD,CAAxB;;QAKAlB,OAAO,CAACiC,UAAR,CAAmBhC,WAAW,CAACS,GAA/B,EANe,CAQf;QACA;;QACA,OAAOqB,KAAP,CAVe,CAWjB;QACA;MACC,CAdI,CAAP;IAeD,CAvTqC;IAQpC,MAAKjC,KAAL,GAAaA,KAAb;IACA;AACJ;AACA;AACA;AACA;AACA;;IACI,MAAKC,OAAL,GAAeA,QAAf;IACA;AACJ;AACA;AACA;AACA;AACA;AACA;;IACI,MAAKc,WAAL,GAAmB,IAAIqB,gBAAJ,CAAgB,MAAKpC,KAArB,EAA4B,MAAKC,OAAjC,EAA0C,MAAKoC,UAAL,CAAgBC,IAAhB,6CAA1C,EAAsE,MAAKC,cAAL,CAAoBD,IAApB,6CAAtE,EAAsG,MAAKE,YAAL,CAAkBF,IAAlB,6CAAtG,CAAnB;IACA;AACJ;AACA;AACA;AACA;AACA;AACA;IACI;;IACA,MAAKd,WAAL,GAAmB,IAAIiB,gBAAJ,CAAgB,EAAhB,EAAoBxC,QAApB,CAAnB;IACA;AACJ;AACA;AACA;AACA;AACA;AACA;;IACI,MAAKyC,aAAL,GAAqB,EAArB;IAEA,MAAKC,aAAL,GAAqB,IAAIC,sBAAJ,CAAkB,MAAKpB,WAAvB,CAArB;IA1CoC;EA2CrC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;;WACE,mBAAkBqB,IAAlB,EAA6B;MAC3B,IAAM1B,GAAG,GAAG0B,IAAI,CAACC,OAAjB;MACA,IAAO1B,aAAP,GAAwByB,IAAxB,CAAOzB,aAAP;;MAEA2B,oBAAA,CAAYC,MAAZ,CAAmBC,GAAnB,2DAA0E,wBAAe9B,GAAf,EAAoB,IAApB,EAA0B,CAA1B,CAA1E;;MAEA,IAAIA,GAAG,CAACf,WAAJ,KAAoBC,eAAA,CAAKC,UAAL,CAAgB4C,uBAAxC,EAAiE;QAC/D;QACA;QACA,KAAKP,aAAL,CAAmBQ,2BAAnB,CAA+ChC,GAA/C;MACD,CAJD,MAKK;QACH,KAAKJ,WAAL,CAAiBC,MAAjB,CAAwB;UACtBC,IAAI,EAAEZ,eAAA,CAAK+C,gBADW;UAEtBjC,GAAG,EAAHA,GAFsB;UAGtBC,aAAa,EAAbA;QAHsB,CAAxB;MAKD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,cAAaA,aAAb,EAAoCR,GAApC,EAAiD;MAC/C,KAAKG,WAAL,CAAiBC,MAAjB,CAAwB;QACtBC,IAAI,EAAEZ,eAAA,CAAKgD,kBADW;QAEtBzC,GAAG,EAAHA,GAFsB;QAGtBQ,aAAa,EAAbA;MAHsB,CAAxB;MAMA,OAAO,iBAAQkC,OAAR,EAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,oBAAmBrD,OAAnB,EAAiC;MAAA;;MAC/B,OAAO,iBAAQqD,OAAR,GAAkBtB,IAAlB,CAAuB,YAAM;QAClC;QACA,IAAM9B,OAAO,GAAG,MAAI,CAACqD,KAAL,CAAWC,QAAX,CAAoBC,iBAApB,CAAsCC,QAAtC,CAA+C,eAA/C,EAAgEzD,OAAO,CAACmB,aAAxE,CAAhB;;QACA,IAAMjB,WAAW,GAAG;UAClBC,WAAW,EAAEC,eAAA,CAAKC,UAAL,CAAgBqD,EADX;UAElBjD,OAAO,EAAEL,eAAA,CAAKM,YAFI;UAGlBC,GAAG,EAAEX,OAAO,CAACW;QAHK,CAApB;;QAMAmC,oBAAA,CAAYC,MAAZ,CAAmBC,GAAnB,8DAA6EhD,OAAO,CAACW,GAArF;;QAEA,OAAO,MAAI,CAACY,WAAL,CACJoC,QADI,CACK;UACRzD,WAAW,EAAXA,WADQ;UAER0D,YAAY,EAAE3D,OAAO,CAAC4D,OAFd;UAGRC,OAAO,EAAE9D,OAAO,CAAC8D,OAHT;UAIR3C,aAAa,EAAEnB,OAAO,CAACmB,aAJf;UAKRM,UAAU,EAAExB,OAAO,CAACyB,YAAR,EALJ;UAMRC,UAAU,EAAE1B,OAAO,CAAC2B,YAAR,EANJ;UAORmC,SAAS,EAAE9D,OAAO,CAAC+D;QAPX,CADL,EAUJjC,IAVI,CAUC,YAAM;UACV,MAAI,CAACjB,WAAL,CAAiBC,MAAjB,CAAwB;YACtBC,IAAI,EAAEZ,eAAA,CAAKa,aADW;YAEtBC,GAAG,EAAEhB,WAFiB;YAGtBiB,aAAa,EAAEnB,OAAO,CAACmB;UAHD,CAAxB;;UAKA2B,oBAAA,CAAYC,MAAZ,CAAmBC,GAAnB,2DAA0EhD,OAAO,CAACW,GAAlF;;UACAV,OAAO,CAACiC,UAAR,CAAmBlC,OAAO,CAACW,GAA3B;QACD,CAlBI,CAAP;MAmBD,CA9BM,CAAP;IA+BD,C,CAED;IACA;;IACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,wBAAuBX,OAAvB,EAAqC;MAAA;;MACnC;MACA,IAAMC,OAAO,GAAG,KAAKqD,KAAL,CAAWC,QAAX,CAAoBC,iBAApB,CAAsCC,QAAtC,CAA+C,eAA/C,EAAgEzD,OAAO,CAACmB,aAAxE,CAAhB;MACA,IAAMjB,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAA,CAAKC,UAAL,CAAgB4D,MADX;QAElB1D,IAAI,EAAEP,OAAO,CAACO,IAFI;QAGlBE,OAAO,EAAEL,eAAA,CAAKM,YAHI;QAIlBC,GAAG,EAAEX,OAAO,CAACW;MAJK,CAApB;MAOA,KAAKG,WAAL,CAAiBC,MAAjB,CAAwB;QACtBC,IAAI,EAAEZ,eAAA,CAAKa,aADW;QAEtBC,GAAG,EAAEhB,WAFiB;QAGtBiB,aAAa,EAAEnB,OAAO,CAACmB;MAHD,CAAxB;MAMA,OAAO,KAAKI,WAAL,CACJoC,QADI,CACK;QACRzD,WAAW,EAAXA,WADQ;QAER0D,YAAY,EAAE3D,OAAO,CAAC4D,OAFd;QAGRC,OAAO,EAAE9D,OAAO,CAAC8D,OAHT;QAIR3C,aAAa,EAAEnB,OAAO,CAACmB,aAJf;QAKRM,UAAU,EAAEzB,OAAO,CAACyB,UALZ;QAMRE,UAAU,EAAE3B,OAAO,CAAC2B,UANZ;QAORoC,SAAS,EAAE9D,OAAO,CAAC+D;MAPX,CADL,EAUJjC,IAVI,CAUC,YAAM;QACV9B,OAAO,CAACiC,UAAR,CAAmBlC,OAAO,CAACW,GAA3B;;QAEA,MAAI,CAACG,WAAL,CAAiBC,MAAjB,CAAwB;UACtBC,IAAI,EAAEZ,eAAA,CAAK6B,qBADW;UAEtBtB,GAAG,EAAET,WAAW,CAACS,GAFK;UAGtBQ,aAAa,EAAElB,OAAO,CAACkB;QAHD,CAAxB;MAKD,CAlBI,CAAP;IAmBD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,uBAAsB+C,OAAtB,EAAoClC,KAApC,EAAmDmC,SAAnD,EAAsE;MACpE,IAAMjD,GAAG,GAAG;QACVf,WAAW,EAAEC,eAAA,CAAKC,UAAL,CAAgB+D,KADnB;QAEV3D,OAAO,EAAEL,eAAA,CAAKM,YAFJ;QAGVyD,SAAS,EAATA,SAHU;QAIVxD,GAAG,EAAEuD,OAAO,CAAC5D,KAAR,CAAcK;MAJT,CAAZ;MAOA,OAAO,KAAKY,WAAL,CAAiBoC,QAAjB,CAA0BzC,GAA1B,EAA+Bc,KAA/B,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,8BAAqBhC,OAArB,EAAmC;MAAA;;MACjC,IAAOC,OAAP,GAA6BD,OAA7B,CAAOC,OAAP;MAAA,IAAgBoE,SAAhB,GAA6BrE,OAA7B,CAAgBqE,SAAhB;MACA,IAAMnE,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAA,CAAKC,UAAL,CAAgBC,KADX;QAElBC,IAAI,EAAE,CAACP,OAAO,CAACQ,GAAT,CAFY;QAGlB;QACAC,OAAO,EAAEL,eAAA,CAAKM,YAJI;QAKlBC,GAAG,EAAE,OAAOX,OAAO,CAACY,OAAf,KAA2B,QAA3B,IAAuC,oBAAa,0BAAWZ,OAAO,CAACY,OAAnB,CAAb,CAAvC,GAAmF,CAAnF,GAAuFZ,OAAO,CAACY,OAAR,GAAkB,CAL5F;QAMlBC,UAAU,EAAE,UANM,CAMK;;MANL,CAApB;MASA,KAAKC,WAAL,CAAiBC,MAAjB,CAAwB;QACtBC,IAAI,EAAEZ,eAAA,CAAKa,aADW;QAEtBC,GAAG,EAAEhB,WAFiB;QAGtBiB,aAAa,EAAElB,OAAO,CAACkB;MAHD,CAAxB,EAXiC,CAiBjC;MACA;MACA;;MACA,IAAMmD,gBAAgB,GAAGD,SAAS,IAAI,CAACpE,OAAO,CAACsE,MAAR,CAAeC,YAAf,CAA4BC,mBAAnE;MAEA,OAAO,KAAKlD,WAAL,CACJoC,QADI,CACK;QACRzD,WAAW,EAAXA,WADQ;QAERiB,aAAa,EAAElB,OAAO,CAACkB,aAFf;QAGRyC,YAAY,EAAE3D,OAAO,CAAC4D,OAHd;QAIRC,OAAO,EAAEQ,gBAAgB,GAAG,EAAH,GAAQrE,OAAO,CAAC6D,OAJjC;QAKRrC,UAAU,EAAExB,OAAO,CAACyB,YAAR,EALJ;QAMRC,UAAU,EAAE1B,OAAO,CAAC2B,YAAR,EANJ;QAORmC,SAAS,EAAE9D,OAAO,CAAC+D;MAPX,CADL,EAUJjC,IAVI,CAUC,gBAA+B;QAAA,IAA7BC,KAA6B,QAA7BA,KAA6B;QAAA,IAAtB0C,gBAAsB,QAAtBA,gBAAsB;;QACnC,MAAI,CAAC5D,WAAL,CAAiBC,MAAjB,CAAwB;UACtBC,IAAI,EAAEZ,eAAA,CAAK6B,qBADW;UAEtBtB,GAAG,EAAET,WAAW,CAACS,GAFK;UAGtBQ,aAAa,EAAElB,OAAO,CAACkB;QAHD,CAAxB;;QAKAlB,OAAO,CAACiC,UAAR,CAAmBhC,WAAW,CAACS,GAA/B;;QAEA,IAAI+D,gBAAJ,EAAsB;UACpBzE,OAAO,CAAC0E,sBAAR,CAA+BD,gBAA/B;QACD,CAVkC,CAYnC;QACA;;;QACA,OAAO1C,KAAP,CAdmC,CAenC;QACA;MACD,CA3BI,CAAP;IA4BD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;;IAiDE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IACE,sBAAqBb,aAArB,EAA4CyD,UAA5C,EAAgE;MAC9DC,mBAAA,CAAeC,uBAAf,CAAuC3D,aAAvC,EAAsDyD,UAAtD,EAD8D,CAE9D;;;MACA,IAAM3E,OAAO,GAAG,KAAKqD,KAAL,CAAWC,QAAX,CAAoBC,iBAApB,CAAsCC,QAAtC,CAA+C,eAA/C,EAAgEtC,aAAhE,CAAhB;MAEAlB,OAAO,CAAC8E,oBAAR;;MACA,IAAI,CAACF,mBAAA,CAAeG,MAAf,CAAsB7D,aAAtB,CAAL,EAA2C;QACzClB,OAAO,CAACgF,4BAAR;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,yBAAgBhF,OAAhB,EAAkCiF,cAAlC,EAA2D;MACzD,OAAO,KAAKxC,aAAL,CAAmByC,eAAnB,CAAmClF,OAAnC,EAA4CiF,cAA5C,CAAP;IACD;;;EArW+BE,+B"}
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.ts"],"sourcesContent":["// @ts-ignore\nimport {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';\nimport Meeting from '../meeting';\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 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 Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(\n this.attrs,\n this.options,\n this.sendRoapOK.bind(this),\n this.sendRoapAnswer.bind(this),\n this.roapFinished.bind(this)\n );\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 * 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 private roapEvent(data: any) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(\n `Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`\n );\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 } 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 private stop(correlationId: string, seq: number) {\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 private sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\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 private sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\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 private sendRoapError(session: any, locus: object, errorType: string) {\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: any) {\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:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : 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: any) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : 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(\n 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 ),\n // mediaId: meeting.mediaId\n },\n ],\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody}).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 private roapFinished(correlationId: string, sequenceId: string) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n // @ts-ignore\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: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAA4C;AAAA;AAG5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAJA,IAKqBA,IAAI;EAAA;EAAA;EAQvB;AACF;AACA;AACA;AACA;EACE,cAAYC,KAAU,EAAEC,QAAY,EAAE;IAAA;IAAA;IACpC,0BAAM,CAAC,CAAC,EAAEA,QAAO;IACjB;AACJ;AACA;AACA;AACA;AACA;IALI;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA,kGAuRoB,UAACA,OAAY,EAAK;MACtC,IAAOC,OAAO,GAAID,OAAO,CAAlBC,OAAO;MACd,IAAMC,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACC,KAAK;QAClCC,IAAI,EAAE,CAACP,OAAO,CAACQ,GAAG,CAAC;QACnBC,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1BC,GAAG,EACD,OAAOX,OAAO,CAACY,OAAO,KAAK,QAAQ,IAAI,oBAAa,0BAAWZ,OAAO,CAACY,OAAO,CAAC,CAAC,GAC5E,CAAC,GACDZ,OAAO,CAACY,OAAO,GAAG,CAAC;QACzBC,UAAU,EAAE,UAAU,CAAE;MAC1B,CAAC;;MAED,MAAKC,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEZ,eAAI,CAACa,aAAa;QACxBC,GAAG,EAAEhB,WAAW;QAChBiB,aAAa,EAAElB,OAAO,CAACkB;MACzB,CAAC,CAAC;MAEF,IAAMC,QAAQ,GAAG;QACfC,WAAW,EAAE,CACX;UACEC,QAAQ,EAAE,wBACR,MAAKC,WAAW,CAACC,qBAAqB,CAAC;YACrCtB,WAAW,EAAXA,WAAW;YACX;YACA;YACAuB,UAAU,EAAE,CAAC,CAACxB,OAAO,CAACyB,YAAY,EAAE;YACpCC,UAAU,EAAE,CAAC,CAAC1B,OAAO,CAAC2B,YAAY;UACpC,CAAC,CAAC;UAEJ;QACF,CAAC;MAEL,CAAC;;MAED,OAAOC,aAAW,CAACC,kBAAkB,CAAC7B,OAAO,EAAE;QAACC,WAAW,EAAEkB;MAAQ,CAAC,CAAC,CAACW,IAAI,CAAC,UAACC,KAAK,EAAK;QACtF,MAAKlB,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEZ,eAAI,CAAC6B,qBAAqB;UAChCtB,GAAG,EAAET,WAAW,CAACS,GAAG;UACpBQ,aAAa,EAAElB,OAAO,CAACkB;QACzB,CAAC,CAAC;QACFlB,OAAO,CAACiC,UAAU,CAAChC,WAAW,CAACS,GAAG,CAAC;;QAEnC;QACA;QACA,OAAOqB,KAAK;QACZ;QACA;MACF,CAAC,CAAC;IACJ,CAAC;IAnUC,MAAKjC,KAAK,GAAGA,KAAK;IAClB;AACJ;AACA;AACA;AACA;AACA;IACI,MAAKC,OAAO,GAAGA,QAAO;IACtB;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,MAAKc,WAAW,GAAG,IAAIqB,gBAAW,CAChC,MAAKpC,KAAK,EACV,MAAKC,OAAO,EACZ,MAAKoC,UAAU,CAACC,IAAI,6CAAM,EAC1B,MAAKC,cAAc,CAACD,IAAI,6CAAM,EAC9B,MAAKE,YAAY,CAACF,IAAI,6CAAM,CAC7B;IACD;AACJ;AACA;AACA;AACA;AACA;AACA;IACI;IACA,MAAKd,WAAW,GAAG,IAAIiB,gBAAW,CAAC,CAAC,CAAC,EAAExC,QAAO,CAAC;IAC/C;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,MAAKyC,aAAa,GAAG,CAAC,CAAC;IAEvB,MAAKC,aAAa,GAAG,IAAIC,sBAAa,CAAC,MAAKpB,WAAW,CAAC;IAAC;EAC3D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,mBAAkBqB,IAAS,EAAE;MAC3B,IAAM1B,GAAG,GAAG0B,IAAI,CAACC,OAAO;MACxB,IAAO1B,aAAa,GAAIyB,IAAI,CAArBzB,aAAa;MAEpB2B,oBAAW,CAACC,MAAM,CAACC,GAAG,2DAC+B,wBAAe9B,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,OAChF;MAED,IAAIA,GAAG,CAACf,WAAW,KAAKC,eAAI,CAACC,UAAU,CAAC4C,uBAAuB,EAAE;QAC/D;QACA;QACA,IAAI,CAACP,aAAa,CAACQ,2BAA2B,CAAChC,GAAG,CAAC;MACrD,CAAC,MAAM;QACL,IAAI,CAACJ,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEZ,eAAI,CAAC+C,gBAAgB;UAC3BjC,GAAG,EAAHA,GAAG;UACHC,aAAa,EAAbA;QACF,CAAC,CAAC;MACJ;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA;IAAA,OAQA,cAAaA,aAAqB,EAAER,GAAW,EAAE;MAC/C,IAAI,CAACG,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEZ,eAAI,CAACgD,kBAAkB;QAC7BzC,GAAG,EAAHA,GAAG;QACHQ,aAAa,EAAbA;MACF,CAAC,CAAC;MAEF,OAAO,iBAAQkC,OAAO,EAAE;IAC1B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,oBAAmBrD,OAAY,EAAE;MAAA;MAC/B,OAAO,iBAAQqD,OAAO,EAAE,CAACtB,IAAI,CAAC,YAAM;QAClC;QACA,IAAM9B,OAAO,GAAG,MAAI,CAACqD,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAC5D,eAAe,EACfzD,OAAO,CAACmB,aAAa,CACtB;QACD,IAAMjB,WAAW,GAAG;UAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACqD,EAAE;UAC/BjD,OAAO,EAAEL,eAAI,CAACM,YAAY;UAC1BC,GAAG,EAAEX,OAAO,CAACW;QACf,CAAC;QAEDmC,oBAAW,CAACC,MAAM,CAACC,GAAG,8DAAuDhD,OAAO,CAACW,GAAG,EAAG;QAE3F,OAAO,MAAI,CAACY,WAAW,CACpBoC,QAAQ,CAAC;UACRzD,WAAW,EAAXA,WAAW;UACX0D,YAAY,EAAE3D,OAAO,CAAC4D,OAAO;UAC7BC,OAAO,EAAE9D,OAAO,CAAC8D,OAAO;UACxB3C,aAAa,EAAEnB,OAAO,CAACmB,aAAa;UACpCM,UAAU,EAAExB,OAAO,CAACyB,YAAY,EAAE;UAClCC,UAAU,EAAE1B,OAAO,CAAC2B,YAAY,EAAE;UAClCmC,SAAS,EAAE9D,OAAO,CAAC+D;QACrB,CAAC,CAAC,CACDjC,IAAI,CAAC,YAAM;UACV,MAAI,CAACjB,WAAW,CAACC,MAAM,CAAC;YACtBC,IAAI,EAAEZ,eAAI,CAACa,aAAa;YACxBC,GAAG,EAAEhB,WAAW;YAChBiB,aAAa,EAAEnB,OAAO,CAACmB;UACzB,CAAC,CAAC;UACF2B,oBAAW,CAACC,MAAM,CAACC,GAAG,2DAAoDhD,OAAO,CAACW,GAAG,EAAG;UACxFV,OAAO,CAACiC,UAAU,CAAClC,OAAO,CAACW,GAAG,CAAC;QACjC,CAAC,CAAC;MACN,CAAC,CAAC;IACJ;;IAEA;IACA;IACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAA;IAAA,OASA,wBAAuBX,OAAY,EAAE;MAAA;MACnC;MACA,IAAMC,OAAO,GAAG,IAAI,CAACqD,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAC5D,eAAe,EACfzD,OAAO,CAACmB,aAAa,CACtB;MACD,IAAMjB,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAAC4D,MAAM;QACnC1D,IAAI,EAAEP,OAAO,CAACO,IAAI;QAClBE,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1BC,GAAG,EAAEX,OAAO,CAACW;MACf,CAAC;MAED,IAAI,CAACG,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEZ,eAAI,CAACa,aAAa;QACxBC,GAAG,EAAEhB,WAAW;QAChBiB,aAAa,EAAEnB,OAAO,CAACmB;MACzB,CAAC,CAAC;MAEF,OAAO,IAAI,CAACI,WAAW,CACpBoC,QAAQ,CAAC;QACRzD,WAAW,EAAXA,WAAW;QACX0D,YAAY,EAAE3D,OAAO,CAAC4D,OAAO;QAC7BC,OAAO,EAAE9D,OAAO,CAAC8D,OAAO;QACxB3C,aAAa,EAAEnB,OAAO,CAACmB,aAAa;QACpCM,UAAU,EAAEzB,OAAO,CAACyB,UAAU;QAC9BE,UAAU,EAAE3B,OAAO,CAAC2B,UAAU;QAC9BoC,SAAS,EAAE9D,OAAO,CAAC+D;MACrB,CAAC,CAAC,CACDjC,IAAI,CAAC,YAAM;QACV9B,OAAO,CAACiC,UAAU,CAAClC,OAAO,CAACW,GAAG,CAAC;QAE/B,MAAI,CAACG,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEZ,eAAI,CAAC6B,qBAAqB;UAChCtB,GAAG,EAAET,WAAW,CAACS,GAAG;UACpBQ,aAAa,EAAElB,OAAO,CAACkB;QACzB,CAAC,CAAC;MACJ,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAA;IAAA,OASA,uBAAsB+C,OAAY,EAAElC,KAAa,EAAEmC,SAAiB,EAAE;MACpE,IAAMjD,GAAG,GAAG;QACVf,WAAW,EAAEC,eAAI,CAACC,UAAU,CAAC+D,KAAK;QAClC3D,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1ByD,SAAS,EAATA,SAAS;QACTxD,GAAG,EAAEuD,OAAO,CAAC5D,KAAK,CAACK;MACrB,CAAC;MAED,OAAO,IAAI,CAACY,WAAW,CAACoC,QAAQ,CAACzC,GAAG,EAAEc,KAAK,CAAC;IAC9C;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,8BAAqBhC,OAAY,EAAE;MAAA;MACjC,IAAOC,OAAO,GAAeD,OAAO,CAA7BC,OAAO;QAAEoE,SAAS,GAAIrE,OAAO,CAApBqE,SAAS;MACzB,IAAMnE,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACC,KAAK;QAClCC,IAAI,EAAE,CAACP,OAAO,CAACQ,GAAG,CAAC;QACnB;QACAC,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1BC,GAAG,EACD,OAAOX,OAAO,CAACY,OAAO,KAAK,QAAQ,IAAI,oBAAa,0BAAWZ,OAAO,CAACY,OAAO,CAAC,CAAC,GAC5E,CAAC,GACDZ,OAAO,CAACY,OAAO,GAAG,CAAC;QACzBC,UAAU,EAAE,UAAU,CAAE;MAC1B,CAAC;;MAED,IAAI,CAACC,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEZ,eAAI,CAACa,aAAa;QACxBC,GAAG,EAAEhB,WAAW;QAChBiB,aAAa,EAAElB,OAAO,CAACkB;MACzB,CAAC,CAAC;;MAEF;MACA;MACA;MACA,IAAMmD,gBAAgB,GAAGD,SAAS,IAAI,CAACpE,OAAO,CAACsE,MAAM,CAACC,YAAY,CAACC,mBAAmB;MAEtF,OAAO,IAAI,CAAClD,WAAW,CACpBoC,QAAQ,CAAC;QACRzD,WAAW,EAAXA,WAAW;QACXiB,aAAa,EAAElB,OAAO,CAACkB,aAAa;QACpCyC,YAAY,EAAE3D,OAAO,CAAC4D,OAAO;QAC7BC,OAAO,EAAEQ,gBAAgB,GAAG,EAAE,GAAGrE,OAAO,CAAC6D,OAAO;QAChDrC,UAAU,EAAExB,OAAO,CAACyB,YAAY,EAAE;QAClCC,UAAU,EAAE1B,OAAO,CAAC2B,YAAY,EAAE;QAClCmC,SAAS,EAAE9D,OAAO,CAAC+D;MACrB,CAAC,CAAC,CACDjC,IAAI,CAAC,gBAA+B;QAAA,IAA7BC,KAAK,QAALA,KAAK;UAAE0C,gBAAgB,QAAhBA,gBAAgB;QAC7B,MAAI,CAAC5D,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEZ,eAAI,CAAC6B,qBAAqB;UAChCtB,GAAG,EAAET,WAAW,CAACS,GAAG;UACpBQ,aAAa,EAAElB,OAAO,CAACkB;QACzB,CAAC,CAAC;QACFlB,OAAO,CAACiC,UAAU,CAAChC,WAAW,CAACS,GAAG,CAAC;QAEnC,IAAI+D,gBAAgB,EAAE;UACpBzE,OAAO,CAAC0E,sBAAsB,CAACD,gBAAgB,CAAC;QAClD;;QAEA;QACA;QACA,OAAO1C,KAAK;QACZ;QACA;MACF,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA;IA2DA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IACE,sBAAqBb,aAAqB,EAAEyD,UAAkB,EAAE;MAC9DC,mBAAc,CAACC,uBAAuB,CAAC3D,aAAa,EAAEyD,UAAU,CAAC;MACjE;MACA,IAAM3E,OAAO,GAAG,IAAI,CAACqD,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAAC,eAAe,EAAEtC,aAAa,CAAC;MAE9FlB,OAAO,CAAC8E,oBAAoB,EAAE;MAC9B,IAAI,CAACF,mBAAc,CAACG,MAAM,CAAC7D,aAAa,CAAC,EAAE;QACzClB,OAAO,CAACgF,4BAA4B,EAAE;MACxC;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EATE;IAAA;IAAA,OAUA,yBAAgBhF,OAAgB,EAAEiF,cAAuB,EAAE;MACzD,OAAO,IAAI,CAACxC,aAAa,CAACyC,eAAe,CAAClF,OAAO,EAAEiF,cAAc,CAAC;IACpE;EAAC;EAAA;AAAA,EAzX+BE,+BAAoB;AAAA"}