@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.15

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 (252) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/common/browser-detection.js +1 -0
  4. package/dist/common/browser-detection.js.map +1 -1
  5. package/dist/common/collection.js.map +1 -1
  6. package/dist/common/errors/captcha-error.js +5 -5
  7. package/dist/common/errors/captcha-error.js.map +1 -1
  8. package/dist/common/errors/intent-to-join.js +5 -5
  9. package/dist/common/errors/intent-to-join.js.map +1 -1
  10. package/dist/common/errors/join-meeting.js +6 -6
  11. package/dist/common/errors/join-meeting.js.map +1 -1
  12. package/dist/common/errors/media.js +5 -5
  13. package/dist/common/errors/media.js.map +1 -1
  14. package/dist/common/errors/parameter.js +5 -5
  15. package/dist/common/errors/parameter.js.map +1 -1
  16. package/dist/common/errors/password-error.js +5 -5
  17. package/dist/common/errors/password-error.js.map +1 -1
  18. package/dist/common/errors/permission.js +4 -4
  19. package/dist/common/errors/permission.js.map +1 -1
  20. package/dist/common/errors/reconnection.js +5 -5
  21. package/dist/common/errors/reconnection.js.map +1 -1
  22. package/dist/common/errors/stats.js +5 -5
  23. package/dist/common/errors/stats.js.map +1 -1
  24. package/dist/common/errors/webex-errors.js.map +1 -1
  25. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  26. package/dist/common/events/events-scope.js.map +1 -1
  27. package/dist/common/events/events.js.map +1 -1
  28. package/dist/common/events/trigger-proxy.js.map +1 -1
  29. package/dist/common/events/util.js.map +1 -1
  30. package/dist/common/logs/logger-proxy.js.map +1 -1
  31. package/dist/common/logs/request.js.map +1 -1
  32. package/dist/config.js.map +1 -1
  33. package/dist/constants.js.map +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/locus-info/controlsUtils.js.map +1 -1
  36. package/dist/locus-info/fullState.js.map +1 -1
  37. package/dist/locus-info/hostUtils.js.map +1 -1
  38. package/dist/locus-info/index.js +11 -8
  39. package/dist/locus-info/index.js.map +1 -1
  40. package/dist/locus-info/infoUtils.js.map +1 -1
  41. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  42. package/dist/locus-info/parser.js +2 -1
  43. package/dist/locus-info/parser.js.map +1 -1
  44. package/dist/locus-info/selfUtils.js +2 -1
  45. package/dist/locus-info/selfUtils.js.map +1 -1
  46. package/dist/media/index.js.map +1 -1
  47. package/dist/media/internal-media-core-wrapper.js.map +1 -1
  48. package/dist/media/properties.js.map +1 -1
  49. package/dist/media/util.js +1 -1
  50. package/dist/media/util.js.map +1 -1
  51. package/dist/mediaQualityMetrics/config.js.map +1 -1
  52. package/dist/meeting/effectsState.js +1 -1
  53. package/dist/meeting/effectsState.js.map +1 -1
  54. package/dist/meeting/in-meeting-actions.js.map +1 -1
  55. package/dist/meeting/index.js +118 -89
  56. package/dist/meeting/index.js.map +1 -1
  57. package/dist/meeting/muteState.js +1 -1
  58. package/dist/meeting/muteState.js.map +1 -1
  59. package/dist/meeting/request.js +25 -0
  60. package/dist/meeting/request.js.map +1 -1
  61. package/dist/meeting/request.type.js +8 -0
  62. package/dist/meeting/request.type.js.map +1 -0
  63. package/dist/meeting/state.js +5 -5
  64. package/dist/meeting/state.js.map +1 -1
  65. package/dist/meeting/util.js.map +1 -1
  66. package/dist/meeting-info/collection.js.map +1 -1
  67. package/dist/meeting-info/index.js +2 -2
  68. package/dist/meeting-info/index.js.map +1 -1
  69. package/dist/meeting-info/meeting-info-v2.js +48 -48
  70. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  71. package/dist/meeting-info/request.js.map +1 -1
  72. package/dist/meeting-info/util.js.map +1 -1
  73. package/dist/meeting-info/utilv2.js +1 -1
  74. package/dist/meeting-info/utilv2.js.map +1 -1
  75. package/dist/meetings/collection.js.map +1 -1
  76. package/dist/meetings/index.js +251 -250
  77. package/dist/meetings/index.js.map +1 -1
  78. package/dist/meetings/request.js +2 -2
  79. package/dist/meetings/request.js.map +1 -1
  80. package/dist/meetings/util.js +14 -14
  81. package/dist/meetings/util.js.map +1 -1
  82. package/dist/member/index.js +31 -31
  83. package/dist/member/index.js.map +1 -1
  84. package/dist/member/util.js.map +1 -1
  85. package/dist/members/collection.js.map +1 -1
  86. package/dist/members/index.js +43 -43
  87. package/dist/members/index.js.map +1 -1
  88. package/dist/members/request.js.map +1 -1
  89. package/dist/members/util.js.map +1 -1
  90. package/dist/metrics/config.js.map +1 -1
  91. package/dist/metrics/constants.js.map +1 -1
  92. package/dist/metrics/index.js +23 -20
  93. package/dist/metrics/index.js.map +1 -1
  94. package/dist/multistream/multistreamMedia.js +2 -1
  95. package/dist/multistream/multistreamMedia.js.map +1 -1
  96. package/dist/multistream/receiveSlot.js.map +1 -1
  97. package/dist/multistream/receiveSlotManager.js +2 -0
  98. package/dist/multistream/receiveSlotManager.js.map +1 -1
  99. package/dist/multistream/remoteMedia.js.map +1 -1
  100. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  101. package/dist/multistream/remoteMediaManager.js.map +1 -1
  102. package/dist/networkQualityMonitor/index.js +8 -8
  103. package/dist/networkQualityMonitor/index.js.map +1 -1
  104. package/dist/personal-meeting-room/index.js +7 -7
  105. package/dist/personal-meeting-room/index.js.map +1 -1
  106. package/dist/personal-meeting-room/request.js.map +1 -1
  107. package/dist/personal-meeting-room/util.js.map +1 -1
  108. package/dist/reachability/index.js.map +1 -1
  109. package/dist/reachability/request.js.map +1 -1
  110. package/dist/reactions/reactions.js.map +1 -1
  111. package/dist/reactions/reactions.type.js +3 -1
  112. package/dist/reactions/reactions.type.js.map +1 -1
  113. package/dist/reconnection-manager/index.js +4 -4
  114. package/dist/reconnection-manager/index.js.map +1 -1
  115. package/dist/roap/index.js +5 -5
  116. package/dist/roap/index.js.map +1 -1
  117. package/dist/roap/request.js.map +1 -1
  118. package/dist/roap/turnDiscovery.js.map +1 -1
  119. package/dist/statsAnalyzer/global.js.map +1 -1
  120. package/dist/statsAnalyzer/index.js.map +1 -1
  121. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  122. package/dist/transcription/index.js +4 -1
  123. package/dist/transcription/index.js.map +1 -1
  124. package/internal-README.md +7 -6
  125. package/package.json +18 -18
  126. package/src/common/browser-detection.ts +9 -6
  127. package/src/common/collection.ts +3 -1
  128. package/src/common/errors/captcha-error.ts +6 -6
  129. package/src/common/errors/intent-to-join.ts +6 -6
  130. package/src/common/errors/join-meeting.ts +12 -8
  131. package/src/common/errors/media.ts +6 -6
  132. package/src/common/errors/parameter.ts +9 -6
  133. package/src/common/errors/password-error.ts +6 -6
  134. package/src/common/errors/permission.ts +5 -5
  135. package/src/common/errors/reconnection.ts +6 -6
  136. package/src/common/errors/stats.ts +6 -6
  137. package/src/common/errors/webex-errors.ts +7 -5
  138. package/src/common/errors/webex-meetings-error.ts +1 -1
  139. package/src/common/events/events-scope.ts +5 -1
  140. package/src/common/events/events.ts +5 -1
  141. package/src/common/events/trigger-proxy.ts +8 -3
  142. package/src/common/events/util.ts +1 -2
  143. package/src/common/logs/logger-proxy.ts +21 -10
  144. package/src/common/logs/request.ts +11 -8
  145. package/src/config.ts +11 -11
  146. package/src/constants.ts +1 -1
  147. package/src/index.js +1 -1
  148. package/src/locus-info/controlsUtils.ts +34 -24
  149. package/src/locus-info/fullState.ts +15 -11
  150. package/src/locus-info/hostUtils.ts +4 -3
  151. package/src/locus-info/index.ts +25 -34
  152. package/src/locus-info/infoUtils.ts +12 -4
  153. package/src/locus-info/mediaSharesUtils.ts +4 -4
  154. package/src/locus-info/parser.ts +45 -68
  155. package/src/locus-info/selfUtils.ts +106 -57
  156. package/src/media/index.ts +123 -135
  157. package/src/media/internal-media-core-wrapper.ts +2 -2
  158. package/src/media/properties.ts +30 -20
  159. package/src/media/util.ts +1 -1
  160. package/src/mediaQualityMetrics/config.ts +46 -46
  161. package/src/meeting/effectsState.ts +35 -35
  162. package/src/meeting/in-meeting-actions.ts +7 -3
  163. package/src/meeting/index.ts +1576 -1291
  164. package/src/meeting/muteState.ts +62 -31
  165. package/src/meeting/request.ts +174 -113
  166. package/src/meeting/request.type.ts +11 -0
  167. package/src/meeting/state.ts +45 -30
  168. package/src/meeting/util.ts +101 -70
  169. package/src/meeting-info/collection.ts +2 -1
  170. package/src/meeting-info/index.ts +32 -30
  171. package/src/meeting-info/meeting-info-v2.ts +106 -108
  172. package/src/meeting-info/request.ts +9 -3
  173. package/src/meeting-info/util.ts +54 -46
  174. package/src/meeting-info/utilv2.ts +59 -53
  175. package/src/meetings/collection.ts +1 -1
  176. package/src/meetings/index.ts +512 -440
  177. package/src/meetings/request.ts +26 -24
  178. package/src/meetings/util.ts +29 -29
  179. package/src/member/index.ts +55 -49
  180. package/src/member/util.ts +26 -13
  181. package/src/members/collection.ts +0 -1
  182. package/src/members/index.ts +182 -126
  183. package/src/members/request.ts +46 -14
  184. package/src/members/util.ts +44 -42
  185. package/src/metrics/config.ts +254 -81
  186. package/src/metrics/constants.ts +0 -2
  187. package/src/metrics/index.ts +84 -71
  188. package/src/multistream/multistreamMedia.ts +1 -0
  189. package/src/multistream/receiveSlot.ts +1 -0
  190. package/src/multistream/receiveSlotManager.ts +1 -0
  191. package/src/multistream/remoteMedia.ts +1 -1
  192. package/src/multistream/remoteMediaGroup.ts +2 -1
  193. package/src/multistream/remoteMediaManager.ts +3 -0
  194. package/src/networkQualityMonitor/index.ts +20 -23
  195. package/src/personal-meeting-room/index.ts +12 -16
  196. package/src/personal-meeting-room/request.ts +10 -3
  197. package/src/personal-meeting-room/util.ts +3 -3
  198. package/src/reachability/index.ts +61 -59
  199. package/src/reachability/request.ts +36 -32
  200. package/src/reactions/reactions.ts +4 -4
  201. package/src/reactions/reactions.type.ts +4 -3
  202. package/src/reconnection-manager/index.ts +139 -84
  203. package/src/roap/index.ts +46 -38
  204. package/src/roap/request.ts +44 -31
  205. package/src/roap/turnDiscovery.ts +59 -30
  206. package/src/statsAnalyzer/global.ts +30 -33
  207. package/src/statsAnalyzer/index.ts +432 -175
  208. package/src/statsAnalyzer/mqaUtil.ts +178 -72
  209. package/src/transcription/index.ts +34 -32
  210. package/test/integration/spec/journey.js +663 -462
  211. package/test/integration/spec/space-meeting.js +318 -203
  212. package/test/integration/spec/transcription.js +6 -7
  213. package/test/unit/spec/common/browser-detection.js +9 -28
  214. package/test/unit/spec/fixture/locus.js +92 -90
  215. package/test/unit/spec/locus-info/controlsUtils.js +5 -5
  216. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  217. package/test/unit/spec/locus-info/index.js +1 -2
  218. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  219. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  220. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  221. package/test/unit/spec/locus-info/parser.js +3 -9
  222. package/test/unit/spec/locus-info/selfConstant.js +72 -103
  223. package/test/unit/spec/locus-info/selfUtils.js +21 -12
  224. package/test/unit/spec/meeting/effectsState.js +36 -46
  225. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
  226. package/test/unit/spec/meeting/index.js +1342 -684
  227. package/test/unit/spec/meeting/muteState.js +42 -33
  228. package/test/unit/spec/meeting/request.js +75 -45
  229. package/test/unit/spec/meeting/utils.js +78 -53
  230. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  231. package/test/unit/spec/meeting-info/request.js +7 -9
  232. package/test/unit/spec/meeting-info/util.js +11 -12
  233. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  234. package/test/unit/spec/meetings/collection.js +1 -1
  235. package/test/unit/spec/meetings/index.js +438 -257
  236. package/test/unit/spec/meetings/utils.js +14 -12
  237. package/test/unit/spec/member/index.js +0 -1
  238. package/test/unit/spec/member/util.js +5 -6
  239. package/test/unit/spec/members/index.js +104 -54
  240. package/test/unit/spec/members/request.js +29 -20
  241. package/test/unit/spec/members/utils.js +8 -5
  242. package/test/unit/spec/metrics/index.js +16 -21
  243. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  244. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  245. package/test/unit/spec/reachability/index.ts +9 -11
  246. package/test/unit/spec/reconnection-manager/index.js +16 -18
  247. package/test/unit/spec/roap/turnDiscovery.ts +22 -19
  248. package/test/unit/spec/stats-analyzer/index.js +25 -20
  249. package/test/utils/cmr.js +44 -42
  250. package/test/utils/testUtils.js +83 -74
  251. package/test/utils/webex-config.js +18 -18
  252. package/test/utils/webex-test-users.js +53 -50
@@ -15,7 +15,9 @@ const MeetingStateMachine = {
15
15
  */
16
16
  create(meetingRef: any) {
17
17
  if (!meetingRef) {
18
- throw new ParameterError('You must initialize the meeting state machine with a meeting reference.');
18
+ throw new ParameterError(
19
+ 'You must initialize the meeting state machine with a meeting reference.'
20
+ );
19
21
  }
20
22
 
21
23
  return new StateMachine({
@@ -24,27 +26,36 @@ const MeetingStateMachine = {
24
26
  // when ringing a meeting, it must be first IDLE, because all other states are invalid, it transitions to the RINGING state
25
27
  {
26
28
  name: MEETING_STATE_MACHINE.TRANSITIONS.RING,
27
- from: [MEETING_STATE_MACHINE.STATES.IDLE, MEETING_STATE_MACHINE.STATES.ERROR, MEETING_STATE_MACHINE.STATES.JOINED],
28
- to: MEETING_STATE_MACHINE.STATES.RINGING
29
+ from: [
30
+ MEETING_STATE_MACHINE.STATES.IDLE,
31
+ MEETING_STATE_MACHINE.STATES.ERROR,
32
+ MEETING_STATE_MACHINE.STATES.JOINED,
33
+ ],
34
+ to: MEETING_STATE_MACHINE.STATES.RINGING,
29
35
  },
30
36
  // when joining a meeting, it must be from the RINGING or IDLE state, transitions to JOINED state, 1:1 will go to RINGING,
31
37
  // others will go straight to JOINED with this transition
32
38
  {
33
39
  name: MEETING_STATE_MACHINE.TRANSITIONS.JOIN,
34
- from: [MEETING_STATE_MACHINE.STATES.JOINED, MEETING_STATE_MACHINE.STATES.IDLE, MEETING_STATE_MACHINE.STATES.RINGING, MEETING_STATE_MACHINE.STATES.ERROR],
35
- to: MEETING_STATE_MACHINE.STATES.JOINED
40
+ from: [
41
+ MEETING_STATE_MACHINE.STATES.JOINED,
42
+ MEETING_STATE_MACHINE.STATES.IDLE,
43
+ MEETING_STATE_MACHINE.STATES.RINGING,
44
+ MEETING_STATE_MACHINE.STATES.ERROR,
45
+ ],
46
+ to: MEETING_STATE_MACHINE.STATES.JOINED,
36
47
  },
37
48
  // signify that ringing has stopped and somebody else answered, move state to DECLINED, ANSWERED
38
49
  {
39
50
  name: MEETING_STATE_MACHINE.TRANSITIONS.REMOTE,
40
51
  from: [MEETING_STATE_MACHINE.STATES.JOINED, MEETING_STATE_MACHINE.STATES.ERROR],
41
52
  /**
42
- * @param {Object} remote
43
- * @param {Boolean} remote.remoteAnswered
44
- * @param {Boolean} remote.remoteDeclined
45
- * @returns {String}
46
- */
47
- to(remote: { remoteAnswered: boolean; remoteDeclined: boolean }) {
53
+ * @param {Object} remote
54
+ * @param {Boolean} remote.remoteAnswered
55
+ * @param {Boolean} remote.remoteDeclined
56
+ * @returns {String}
57
+ */
58
+ to(remote: {remoteAnswered: boolean; remoteDeclined: boolean}) {
48
59
  // other user answered the call
49
60
  if (remote.remoteAnswered) {
50
61
  return MEETING_STATE_MACHINE.STATES.ANSWERED;
@@ -56,7 +67,7 @@ const MeetingStateMachine = {
56
67
 
57
68
  // default
58
69
  return MEETING_STATE_MACHINE.STATES.ERROR;
59
- }
70
+ },
60
71
  },
61
72
  // when leaving a meeting it must be from either the RINGING, JOINED, or ERROR states, and transitions it to the ENDED state
62
73
  {
@@ -67,9 +78,9 @@ const MeetingStateMachine = {
67
78
  MEETING_STATE_MACHINE.STATES.JOINED,
68
79
  MEETING_STATE_MACHINE.STATES.ANSWERED,
69
80
  MEETING_STATE_MACHINE.STATES.DECLINED,
70
- MEETING_STATE_MACHINE.STATES.ERROR
81
+ MEETING_STATE_MACHINE.STATES.ERROR,
71
82
  ],
72
- to: MEETING_STATE_MACHINE.STATES.ENDED
83
+ to: MEETING_STATE_MACHINE.STATES.ENDED,
73
84
  },
74
85
  {
75
86
  name: MEETING_STATE_MACHINE.TRANSITIONS.END,
@@ -79,33 +90,33 @@ const MeetingStateMachine = {
79
90
  MEETING_STATE_MACHINE.STATES.JOINED,
80
91
  MEETING_STATE_MACHINE.STATES.ANSWERED,
81
92
  MEETING_STATE_MACHINE.STATES.DECLINED,
82
- MEETING_STATE_MACHINE.STATES.ERROR
93
+ MEETING_STATE_MACHINE.STATES.ERROR,
83
94
  ],
84
- to: MEETING_STATE_MACHINE.STATES.ENDED
95
+ to: MEETING_STATE_MACHINE.STATES.ENDED,
85
96
  },
86
97
  {
87
98
  name: MEETING_STATE_MACHINE.TRANSITIONS.DECLINE,
88
99
  from: [MEETING_STATE_MACHINE.STATES.RINGING, MEETING_STATE_MACHINE.STATES.ERROR],
89
- to: MEETING_STATE_MACHINE.STATES.ENDED
100
+ to: MEETING_STATE_MACHINE.STATES.ENDED,
90
101
  },
91
102
  // transition from ANY state to ERROR state
92
103
  {
93
104
  name: MEETING_STATE_MACHINE.TRANSITIONS.FAIL,
94
105
  from: '*',
95
- to: MEETING_STATE_MACHINE.STATES.ERROR
106
+ to: MEETING_STATE_MACHINE.STATES.ERROR,
96
107
  },
97
108
  // fail safe, transition from ANY state to IDLE state
98
109
  {
99
110
  name: MEETING_STATE_MACHINE.TRANSITIONS.RESET,
100
111
  from: '*',
101
- to: MEETING_STATE_MACHINE.STATES.IDLE
102
- }
112
+ to: MEETING_STATE_MACHINE.STATES.IDLE,
113
+ },
103
114
  ],
104
115
  data: {
105
116
  /**
106
117
  * The meeting instance to execute all state changes on
107
118
  */
108
- meeting: meetingRef
119
+ meeting: meetingRef,
109
120
  },
110
121
  methods: {
111
122
  /**
@@ -120,12 +131,12 @@ const MeetingStateMachine = {
120
131
  this.meeting,
121
132
  {
122
133
  file: 'meeting/state',
123
- function: 'onRemote'
134
+ function: 'onRemote',
124
135
  },
125
136
  EVENT_TRIGGERS.MEETING_RINGING_STOP,
126
137
  {
127
138
  id: this.meeting.id,
128
- type: stop
139
+ type: stop,
129
140
  }
130
141
  );
131
142
  }
@@ -142,12 +153,12 @@ const MeetingStateMachine = {
142
153
  this.meeting,
143
154
  {
144
155
  file: 'meeting/state',
145
- function: 'onRing'
156
+ function: 'onRing',
146
157
  },
147
158
  EVENT_TRIGGERS.MEETING_RINGING,
148
159
  {
149
160
  type,
150
- id: this.meeting.id
161
+ id: this.meeting.id,
151
162
  }
152
163
  );
153
164
  }
@@ -159,7 +170,9 @@ const MeetingStateMachine = {
159
170
  * @returns {Boolean}
160
171
  */
161
172
  onEnterError(transition: any, error: Error) {
162
- LoggerProxy.logger.error(`Meeting:state#onEnterError --> state->onEnterError#meeting.id: ${this.meeting.id} | Transition '${transition?.transition}' : ${transition?.from} -> ${transition?.to}, with error ${error}. Last states: ${this.history}`);
173
+ LoggerProxy.logger.error(
174
+ `Meeting:state#onEnterError --> state->onEnterError#meeting.id: ${this.meeting.id} | Transition '${transition?.transition}' : ${transition?.from} -> ${transition?.to}, with error ${error}. Last states: ${this.history}`
175
+ );
163
176
  },
164
177
  /**
165
178
  * After ANY transition occurs, we want to know what state the meeting moved to for debugging
@@ -167,13 +180,15 @@ const MeetingStateMachine = {
167
180
  * @returns {Boolean}
168
181
  */
169
182
  onAfterTransition(transition: any) {
170
- LoggerProxy.logger.log(`Meeting:state#onAfterTransition --> state->onAfterTransition#meeting.id: ${this.meeting.id} | Transition '${transition.transition}' : ${transition.from} -> ${transition.to} executed. Last states: ${this.history}`);
171
- }
183
+ LoggerProxy.logger.log(
184
+ `Meeting:state#onAfterTransition --> state->onAfterTransition#meeting.id: ${this.meeting.id} | Transition '${transition.transition}' : ${transition.from} -> ${transition.to} executed. Last states: ${this.history}`
185
+ );
186
+ },
172
187
  },
173
188
  // track the last 25 states entered
174
- plugins: [new StateMachineHistory({max: 25})]
189
+ plugins: [new StateMachineHistory({max: 25})],
175
190
  });
176
- }
191
+ },
177
192
  };
178
193
 
179
194
  export default MeetingStateMachine;
@@ -5,13 +5,15 @@ import Metrics from '../metrics';
5
5
  import {eventType, trigger} from '../metrics/config';
6
6
  import Media from '../media';
7
7
  import LoggerProxy from '../common/logs/logger-proxy';
8
- import {INTENT_TO_JOIN,
8
+ import {
9
+ INTENT_TO_JOIN,
9
10
  _LEFT_,
10
11
  _IDLE_,
11
12
  _JOINED_,
12
13
  PASSWORD_STATUS,
13
14
  DISPLAY_HINTS,
14
- FULL_STATE} from '../constants';
15
+ FULL_STATE,
16
+ } from '../constants';
15
17
  import IntentToJoinError from '../common/errors/intent-to-join';
16
18
  import JoinMeetingError from '../common/errors/join-meeting';
17
19
  import ParameterError from '../common/errors/parameter';
@@ -48,30 +50,35 @@ MeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {
48
50
  const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);
49
51
 
50
52
  if (isEmpty(localMedias)) {
51
- return Promise.reject(new ParameterError('You need a media id on the meeting to change remote audio.'));
53
+ return Promise.reject(
54
+ new ParameterError('You need a media id on the meeting to change remote audio.')
55
+ );
52
56
  }
53
57
 
54
58
  Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});
55
59
 
56
- return meeting.meetingRequest.remoteAudioVideoToggle({
57
- locusUrl: meeting.locusUrl,
58
- selfId: meeting.selfId,
59
- localMedias,
60
- deviceUrl: meeting.deviceUrl,
61
- correlationId: meeting.correlationId,
62
- preferTranscoding: !meeting.isMultistream,
63
- }).then((response) => {
64
- Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});
60
+ return meeting.meetingRequest
61
+ .remoteAudioVideoToggle({
62
+ locusUrl: meeting.locusUrl,
63
+ selfId: meeting.selfId,
64
+ localMedias,
65
+ deviceUrl: meeting.deviceUrl,
66
+ correlationId: meeting.correlationId,
67
+ preferTranscoding: !meeting.isMultistream,
68
+ })
69
+ .then((response) => {
70
+ Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});
65
71
 
66
- return response.body.locus;
67
- });
72
+ return response.body.locus;
73
+ });
68
74
  };
69
75
 
70
76
  MeetingUtil.hasOwner = (info) => info && info.owner;
71
77
 
72
78
  MeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;
73
79
 
74
- MeetingUtil.isPinOrGuest = (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);
80
+ MeetingUtil.isPinOrGuest = (err) =>
81
+ err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);
75
82
 
76
83
  MeetingUtil.joinMeeting = (meeting, options) => {
77
84
  if (!meeting) {
@@ -97,7 +104,7 @@ MeetingUtil.joinMeeting = (meeting, options) => {
97
104
  pin: options.pin,
98
105
  moveToResource: options.moveToResource,
99
106
  preferTranscoding: !meeting.isMultistream,
100
- asResourceOccupant: options.asResourceOccupant
107
+ asResourceOccupant: options.asResourceOccupant,
101
108
  })
102
109
  .then((res) => {
103
110
  Metrics.postEvent({
@@ -107,8 +114,8 @@ MeetingUtil.joinMeeting = (meeting, options) => {
107
114
  trigger: trigger.LOCI_UPDATE,
108
115
  locus: res.body.locus,
109
116
  mediaConnections: res.body.mediaConnections,
110
- trackingId: res.headers.trackingid
111
- }
117
+ trackingId: res.headers.trackingid,
118
+ },
112
119
  });
113
120
 
114
121
  return MeetingUtil.parseLocusJoin(res);
@@ -117,7 +124,9 @@ MeetingUtil.joinMeeting = (meeting, options) => {
117
124
 
118
125
  MeetingUtil.cleanUp = (meeting) => {
119
126
  // make sure we send last metrics before we close the peerconnection
120
- const stopStatsAnalyzer = (meeting.statsAnalyzer) ? meeting.statsAnalyzer.stopAnalyzer() : Promise.resolve();
127
+ const stopStatsAnalyzer = meeting.statsAnalyzer
128
+ ? meeting.statsAnalyzer.stopAnalyzer()
129
+ : Promise.resolve();
121
130
 
122
131
  return stopStatsAnalyzer
123
132
  .then(() => meeting.closeLocalStream())
@@ -144,7 +153,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
144
153
  locusUrl: meeting.locusUrl,
145
154
  selfId: meeting.selfId,
146
155
  correlationId: meeting.correlationId,
147
- phoneUrl
156
+ phoneUrl,
148
157
  };
149
158
 
150
159
  return meeting.meetingRequest
@@ -156,9 +165,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
156
165
  })
157
166
  .catch((err) => {
158
167
  LoggerProxy.logger.error(
159
- `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${
160
- meeting.id
161
- }, error: ${err}`
168
+ `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`
162
169
  );
163
170
 
164
171
  return Promise.reject(err);
@@ -184,7 +191,7 @@ MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
184
191
  selfId: meeting.selfId,
185
192
  correlationId: meeting.correlationId,
186
193
  resourceId: meeting.resourceId,
187
- deviceUrl: meeting.deviceUrl
194
+ deviceUrl: meeting.deviceUrl,
188
195
  };
189
196
 
190
197
  const leaveOptions = {...defaultOptions, ...options};
@@ -192,7 +199,8 @@ MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
192
199
  return meeting.meetingRequest
193
200
  .leaveMeeting(leaveOptions)
194
201
  .then((response) => {
195
- if (response && response.body && response.body.locus) { // && !options.moveMeeting) {
202
+ if (response && response.body && response.body.locus) {
203
+ // && !options.moveMeeting) {
196
204
  meeting.locusInfo.onFullLocus(response.body.locus);
197
205
  }
198
206
 
@@ -210,9 +218,7 @@ MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
210
218
  // 1) on leave clean up the meeting or simply do a sync on the meeting
211
219
  // 2) If the error says meeting is inactive then destroy the meeting object
212
220
  LoggerProxy.logger.error(
213
- `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${
214
- meeting.id
215
- }, error: ${err}`
221
+ `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`
216
222
  );
217
223
 
218
224
  return Promise.reject(err);
@@ -222,21 +228,18 @@ MeetingUtil.declineMeeting = (meeting, reason) =>
222
228
  meeting.meetingRequest.declineMeeting({
223
229
  locusUrl: meeting.locusUrl,
224
230
  deviceUrl: meeting.deviceUrl,
225
- reason
231
+ reason,
226
232
  });
227
233
 
228
- MeetingUtil.isUserInLeftState = (locusInfo) =>
229
- locusInfo.parsedLocus?.self?.state === _LEFT_;
234
+ MeetingUtil.isUserInLeftState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_;
230
235
 
231
- MeetingUtil.isUserInIdleState = (locusInfo) =>
232
- locusInfo.parsedLocus?.self?.state === _IDLE_;
236
+ MeetingUtil.isUserInIdleState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_;
233
237
 
234
- MeetingUtil.isUserInJoinedState = (locusInfo) =>
235
- locusInfo.parsedLocus?.self?.state === _JOINED_;
238
+ MeetingUtil.isUserInJoinedState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_;
236
239
 
237
240
  MeetingUtil.isMediaEstablished = (currentMediaStatus) =>
238
- currentMediaStatus && (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
239
-
241
+ currentMediaStatus &&
242
+ (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
240
243
 
241
244
  MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
242
245
  meeting.resourceId = meeting.resourceId || options.resourceId;
@@ -251,7 +254,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
251
254
  if (options.pin) {
252
255
  Metrics.postEvent({
253
256
  event: eventType.PIN_COLLECTED,
254
- meeting
257
+ meeting,
255
258
  });
256
259
  }
257
260
 
@@ -267,7 +270,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
267
270
  if (MeetingUtil.isPinOrGuest(err)) {
268
271
  Metrics.postEvent({
269
272
  event: eventType.PIN_PROMPT,
270
- meeting
273
+ meeting,
271
274
  });
272
275
 
273
276
  // request host pin or non host for unclaimed PMR, start of Scenario C
@@ -281,9 +284,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
281
284
  };
282
285
 
283
286
  MeetingUtil.validateOptions = (options) => {
284
- const {
285
- sendVideo, sendAudio, sendShare, localStream, localShare
286
- } = options;
287
+ const {sendVideo, sendAudio, sendShare, localStream, localShare} = options;
287
288
 
288
289
  if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {
289
290
  return Promise.reject(new ParameterError('please pass valid video streams'));
@@ -341,23 +342,34 @@ MeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>
341
342
  locusInfo.parsedLocus.info &&
342
343
  locusInfo.parsedLocus.info.policy;
343
344
 
344
- MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) => locusInfo?.parsedLocus?.info?.userDisplayHints || [];
345
+ MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) =>
346
+ locusInfo?.parsedLocus?.info?.userDisplayHints || [];
345
347
 
346
- MeetingUtil.canInviteNewParticipants = (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
348
+ MeetingUtil.canInviteNewParticipants = (displayHints) =>
349
+ displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
347
350
 
348
- MeetingUtil.canAdmitParticipant = (displayHints) => displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
351
+ MeetingUtil.canAdmitParticipant = (displayHints) =>
352
+ displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
349
353
 
350
- MeetingUtil.canUserLock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
354
+ MeetingUtil.canUserLock = (displayHints) =>
355
+ displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&
356
+ displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
351
357
 
352
- MeetingUtil.canUserUnlock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
358
+ MeetingUtil.canUserUnlock = (displayHints) =>
359
+ displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&
360
+ displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
353
361
 
354
- MeetingUtil.canUserRecord = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);
362
+ MeetingUtil.canUserRecord = (displayHints) =>
363
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);
355
364
 
356
- MeetingUtil.canUserPause = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);
365
+ MeetingUtil.canUserPause = (displayHints) =>
366
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);
357
367
 
358
- MeetingUtil.canUserResume = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME);
368
+ MeetingUtil.canUserResume = (displayHints) =>
369
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME);
359
370
 
360
- MeetingUtil.canUserStop = (displayHints) => displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP);
371
+ MeetingUtil.canUserStop = (displayHints) =>
372
+ displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP);
361
373
 
362
374
  MeetingUtil.startRecording = (request, locusUrl, locusInfo) => {
363
375
  const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
@@ -366,7 +378,9 @@ MeetingUtil.startRecording = (request, locusUrl, locusInfo) => {
366
378
  return request.recordMeeting({locusUrl, recording: true, paused: false});
367
379
  }
368
380
 
369
- return Promise.reject(new PermissionError('Start recording not allowed, due to moderator property.'));
381
+ return Promise.reject(
382
+ new PermissionError('Start recording not allowed, due to moderator property.')
383
+ );
370
384
  };
371
385
 
372
386
  MeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {
@@ -376,7 +390,9 @@ MeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {
376
390
  return request.recordMeeting({locusUrl, recording: true, paused: true});
377
391
  }
378
392
 
379
- return Promise.reject(new PermissionError('Pause recording not allowed, due to moderator property.'));
393
+ return Promise.reject(
394
+ new PermissionError('Pause recording not allowed, due to moderator property.')
395
+ );
380
396
  };
381
397
 
382
398
  MeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {
@@ -386,7 +402,9 @@ MeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {
386
402
  return request.recordMeeting({locusUrl, recording: true, paused: false});
387
403
  }
388
404
 
389
- return Promise.reject(new PermissionError('Resume recording not allowed, due to moderator property.'));
405
+ return Promise.reject(
406
+ new PermissionError('Resume recording not allowed, due to moderator property.')
407
+ );
390
408
  };
391
409
 
392
410
  MeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {
@@ -396,16 +414,22 @@ MeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {
396
414
  return request.recordMeeting({locusUrl, recording: false, paused: false});
397
415
  }
398
416
 
399
- return Promise.reject(new PermissionError('Stop recording not allowed, due to moderator property.'));
417
+ return Promise.reject(
418
+ new PermissionError('Stop recording not allowed, due to moderator property.')
419
+ );
400
420
  };
401
421
 
402
422
  MeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);
403
423
 
404
- MeetingUtil.canUserLowerAllHands = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
424
+ MeetingUtil.canUserLowerAllHands = (displayHints) =>
425
+ displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
405
426
 
406
- MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
427
+ MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>
428
+ displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
407
429
 
408
- MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) => displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) || displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
430
+ MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>
431
+ displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||
432
+ displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
409
433
 
410
434
  MeetingUtil.lockMeeting = (actions, request, locusUrl) => {
411
435
  if (actions && actions.canLock) {
@@ -477,31 +501,38 @@ MeetingUtil.endMeetingForAll = (meeting) => {
477
501
  .then(() => MeetingUtil.cleanUp(meeting))
478
502
  .catch((err) => {
479
503
  LoggerProxy.logger.error(
480
- `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${
481
- meeting.id
482
- }, error: ${err}`
504
+ `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`
483
505
  );
484
506
 
485
507
  return Promise.reject(err);
486
508
  });
487
509
  };
488
510
 
489
- MeetingUtil.canEnableClosedCaption = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START);
511
+ MeetingUtil.canEnableClosedCaption = (displayHints) =>
512
+ displayHints.includes(DISPLAY_HINTS.CAPTION_START);
490
513
 
491
- MeetingUtil.canStartTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
514
+ MeetingUtil.canStartTranscribing = (displayHints) =>
515
+ displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
492
516
 
493
- MeetingUtil.canStopTranscribing = (displayHints) => displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
517
+ MeetingUtil.canStopTranscribing = (displayHints) =>
518
+ displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
494
519
 
495
- MeetingUtil.isClosedCaptionActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
520
+ MeetingUtil.isClosedCaptionActive = (displayHints) =>
521
+ displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
496
522
 
497
- MeetingUtil.isWebexAssistantActive = (displayHints) => displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
523
+ MeetingUtil.isWebexAssistantActive = (displayHints) =>
524
+ displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
498
525
 
499
- MeetingUtil.canViewCaptionPanel = (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
526
+ MeetingUtil.canViewCaptionPanel = (displayHints) =>
527
+ displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
500
528
 
501
- MeetingUtil.isRealTimeTranslationEnabled = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
529
+ MeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>
530
+ displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
502
531
 
503
- MeetingUtil.canSelectSpokenLanguages = (displayHints) => displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
532
+ MeetingUtil.canSelectSpokenLanguages = (displayHints) =>
533
+ displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
504
534
 
505
- MeetingUtil.waitingForOthersToJoin = (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
535
+ MeetingUtil.waitingForOthersToJoin = (displayHints) =>
536
+ displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
506
537
 
507
538
  export default MeetingUtil;
@@ -34,7 +34,8 @@ export default class MeetingInfoCollection extends Collection {
34
34
  return find(
35
35
  // @ts-ignore
36
36
  this.meetingInfos,
37
- (info) => info.sipUrl === id || info.locusId === id || info.userId === id || info.meetingLink === id
37
+ (info) =>
38
+ info.sipUrl === id || info.locusId === id || info.userId === id || info.meetingLink === id
38
39
  );
39
40
  }
40
41
  }
@@ -2,11 +2,7 @@
2
2
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
4
 
5
- import {
6
- _MEETING_LINK_,
7
- _SIP_URI_,
8
- _PERSONAL_ROOM_
9
- } from '../constants';
5
+ import {_MEETING_LINK_, _SIP_URI_, _PERSONAL_ROOM_} from '../constants';
10
6
  import LoggerProxy from '../common/logs/logger-proxy';
11
7
 
12
8
  import MeetingInfoCollection from './collection';
@@ -34,7 +30,7 @@ export default class MeetingInfo {
34
30
  * @type {Object}
35
31
  * @private
36
32
  * @memberof MeetingInfo
37
- */
33
+ */
38
34
  this.meetingInfoRequest = new MeetingInfoRequest(this.webex);
39
35
  /**
40
36
  * The meeting information collection interface
@@ -42,7 +38,7 @@ export default class MeetingInfo {
42
38
  * @type {Object}
43
39
  * @private
44
40
  * @memberof MeetingInfo
45
- */
41
+ */
46
42
  this.meetingInfoCollection = new MeetingInfoCollection();
47
43
  }
48
44
 
@@ -75,17 +71,22 @@ export default class MeetingInfo {
75
71
  * @memberof MeetingInfo
76
72
  */
77
73
  private requestFetchInfo(options: object) {
78
- return this.meetingInfoRequest.fetchMeetingInfo(options).then((info) => {
79
- if (info && info.body) {
80
- this.setMeetingInfo(info.body.sipMeetingUri || info.body.meetingLink, info.body);
81
- }
74
+ return this.meetingInfoRequest
75
+ .fetchMeetingInfo(options)
76
+ .then((info) => {
77
+ if (info && info.body) {
78
+ this.setMeetingInfo(info.body.sipMeetingUri || info.body.meetingLink, info.body);
79
+ }
82
80
 
83
- return info;
84
- }).catch((error) => {
85
- LoggerProxy.logger.error(`Meeting-info:index#requestFetchInfo --> ${error} fetch meetingInfo`);
81
+ return info;
82
+ })
83
+ .catch((error) => {
84
+ LoggerProxy.logger.error(
85
+ `Meeting-info:index#requestFetchInfo --> ${error} fetch meetingInfo`
86
+ );
86
87
 
87
- return Promise.reject(error);
88
- });
88
+ return Promise.reject(error);
89
+ });
89
90
  }
90
91
 
91
92
  /**
@@ -100,7 +101,7 @@ export default class MeetingInfo {
100
101
  return MeetingInfoUtil.generateOptions({
101
102
  destination,
102
103
  type,
103
- webex: this.webex
104
+ webex: this.webex,
104
105
  });
105
106
  }
106
107
 
@@ -117,19 +118,20 @@ export default class MeetingInfo {
117
118
  destination = this.webex.internal.device.userId;
118
119
  }
119
120
 
120
- return this.fetchInfoOptions(
121
- MeetingInfoUtil.extractDestination(destination, type),
122
- type
123
- ).then((options) =>
124
- // fetch meeting info
125
- this.requestFetchInfo(options).catch((error) => {
126
- // if it failed the first time as meeting link
127
- if (options.type === _MEETING_LINK_) {
128
- // convert the meeting link to sip URI and retry
129
- return this.requestFetchInfo(this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_));
130
- }
121
+ return this.fetchInfoOptions(MeetingInfoUtil.extractDestination(destination, type), type).then(
122
+ (options) =>
123
+ // fetch meeting info
124
+ this.requestFetchInfo(options).catch((error) => {
125
+ // if it failed the first time as meeting link
126
+ if (options.type === _MEETING_LINK_) {
127
+ // convert the meeting link to sip URI and retry
128
+ return this.requestFetchInfo(
129
+ this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_)
130
+ );
131
+ }
131
132
 
132
- return Promise.reject(error);
133
- }));
133
+ return Promise.reject(error);
134
+ })
135
+ );
134
136
  }
135
137
  }