@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
@@ -1,12 +1,15 @@
1
- import { HTTP_VERBS, _CONVERSATION_URL_, WBXAPPAPI_SERVICE } from '../constants';
1
+ import {HTTP_VERBS, _CONVERSATION_URL_, WBXAPPAPI_SERVICE} from '../constants';
2
2
  import Metrics from '../metrics';
3
3
  import BEHAVIORAL_METRICS from '../metrics/constants';
4
4
 
5
5
  import MeetingInfoUtil from './utilv2';
6
6
 
7
- const PASSWORD_ERROR_DEFAULT_MESSAGE = 'Password required. Call fetchMeetingInfo() with password argument';
8
- const CAPTCHA_ERROR_DEFAULT_MESSAGE = 'Captcha required. Call fetchMeetingInfo() with captchaInfo argument';
9
- const ADHOC_MEETING_DEFAULT_ERROR = 'Failed starting the adhoc meeting, Please contact support team ';
7
+ const PASSWORD_ERROR_DEFAULT_MESSAGE =
8
+ 'Password required. Call fetchMeetingInfo() with password argument';
9
+ const CAPTCHA_ERROR_DEFAULT_MESSAGE =
10
+ 'Captcha required. Call fetchMeetingInfo() with captchaInfo argument';
11
+ const ADHOC_MEETING_DEFAULT_ERROR =
12
+ 'Failed starting the adhoc meeting, Please contact support team ';
10
13
  const CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES = [423005, 423006];
11
14
 
12
15
  /**
@@ -18,17 +21,21 @@ export class MeetingInfoV2PasswordError extends Error {
18
21
  wbxAppApiCode: any;
19
22
 
20
23
  /**
21
- *
22
- * @constructor
23
- * @param {Number} [wbxAppApiErrorCode]
24
- * @param {Object} [meetingInfo]
25
- * @param {String} [message]
26
- */
27
- constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message: string = PASSWORD_ERROR_DEFAULT_MESSAGE) {
24
+ *
25
+ * @constructor
26
+ * @param {Number} [wbxAppApiErrorCode]
27
+ * @param {Object} [meetingInfo]
28
+ * @param {String} [message]
29
+ */
30
+ constructor(
31
+ wbxAppApiErrorCode?: number,
32
+ meetingInfo?: object,
33
+ message: string = PASSWORD_ERROR_DEFAULT_MESSAGE
34
+ ) {
28
35
  super(`${message}, code=${wbxAppApiErrorCode}`);
29
36
  this.name = 'MeetingInfoV2PasswordError';
30
37
  this.sdkMessage = message;
31
- this.stack = (new Error()).stack;
38
+ this.stack = new Error().stack;
32
39
  this.wbxAppApiCode = wbxAppApiErrorCode;
33
40
  this.meetingInfo = meetingInfo;
34
41
  }
@@ -41,40 +48,44 @@ export class MeetingInfoV2AdhocMeetingError extends Error {
41
48
  sdkMessage: any;
42
49
  wbxAppApiCode: any;
43
50
  /**
44
- *
45
- * @constructor
46
- * @param {Number} [wbxAppApiErrorCode]
47
- * @param {String} [message]
48
- */
51
+ *
52
+ * @constructor
53
+ * @param {Number} [wbxAppApiErrorCode]
54
+ * @param {String} [message]
55
+ */
49
56
  constructor(wbxAppApiErrorCode?: number, message: string = ADHOC_MEETING_DEFAULT_ERROR) {
50
57
  super(`${message}, code=${wbxAppApiErrorCode}`);
51
58
  this.name = 'MeetingInfoV2AdhocMeetingError';
52
59
  this.sdkMessage = message;
53
- this.stack = (new Error()).stack;
60
+ this.stack = new Error().stack;
54
61
  this.wbxAppApiCode = wbxAppApiErrorCode;
55
62
  }
56
63
  }
57
64
 
58
65
  /**
59
- * Error to indicate that preferred webex site not present to start adhoc meeting
60
- */
66
+ * Error to indicate that preferred webex site not present to start adhoc meeting
67
+ */
61
68
  export class MeetingInfoV2CaptchaError extends Error {
62
69
  captchaInfo: any;
63
70
  isPasswordRequired: any;
64
71
  sdkMessage: any;
65
72
  wbxAppApiCode: any;
66
73
  /**
67
- *
68
- * @constructor
69
- * @param {Number} [wbxAppApiErrorCode]
70
- * @param {Object} [captchaInfo]
71
- * @param {String} [message]
72
- */
73
- constructor(wbxAppApiErrorCode?: number, captchaInfo?: object, message: string = CAPTCHA_ERROR_DEFAULT_MESSAGE) {
74
+ *
75
+ * @constructor
76
+ * @param {Number} [wbxAppApiErrorCode]
77
+ * @param {Object} [captchaInfo]
78
+ * @param {String} [message]
79
+ */
80
+ constructor(
81
+ wbxAppApiErrorCode?: number,
82
+ captchaInfo?: object,
83
+ message: string = CAPTCHA_ERROR_DEFAULT_MESSAGE
84
+ ) {
74
85
  super(`${message}, code=${wbxAppApiErrorCode}`);
75
86
  this.name = 'MeetingInfoV2PasswordError';
76
87
  this.sdkMessage = message;
77
- this.stack = (new Error()).stack;
88
+ this.stack = new Error().stack;
78
89
  this.wbxAppApiCode = wbxAppApiErrorCode;
79
90
  this.isPasswordRequired = CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES.includes(wbxAppApiErrorCode);
80
91
  this.captchaInfo = captchaInfo;
@@ -82,42 +93,42 @@ export class MeetingInfoV2CaptchaError extends Error {
82
93
  }
83
94
 
84
95
  /**
85
- * @class MeetingInfo
86
- */
96
+ * @class MeetingInfo
97
+ */
87
98
  export default class MeetingInfoV2 {
88
99
  webex: any;
89
100
 
90
101
  /**
91
- *
92
- * @param {WebexSDK} webex
93
- */
102
+ *
103
+ * @param {WebexSDK} webex
104
+ */
94
105
  constructor(webex) {
95
106
  this.webex = webex;
96
107
  }
97
108
 
98
109
  /**
99
- * converts hydra id into conversation url and persons Id
100
- * @param {String} destination one of many different types of destinations to look up info for
101
- * @param {String} [type] to match up with the destination value
102
- * @returns {Promise} destination and type
103
- * @public
104
- * @memberof MeetingInfo
105
- */
110
+ * converts hydra id into conversation url and persons Id
111
+ * @param {String} destination one of many different types of destinations to look up info for
112
+ * @param {String} [type] to match up with the destination value
113
+ * @returns {Promise} destination and type
114
+ * @public
115
+ * @memberof MeetingInfo
116
+ */
106
117
  fetchInfoOptions(destination: string, type: string = null) {
107
118
  return MeetingInfoUtil.getDestinationType({
108
119
  destination,
109
120
  type,
110
- webex: this.webex
121
+ webex: this.webex,
111
122
  });
112
123
  }
113
124
 
114
125
  /**
115
- * Creates adhoc space meetings for a space by fetching the conversation infomation
116
- * @param {String} conversationUrl conversationUrl to start adhoc meeting on
117
- * @returns {Promise} returns a meeting info object
118
- * @public
119
- * @memberof MeetingInfo
120
- */
126
+ * Creates adhoc space meetings for a space by fetching the conversation infomation
127
+ * @param {String} conversationUrl conversationUrl to start adhoc meeting on
128
+ * @returns {Promise} returns a meeting info object
129
+ * @public
130
+ * @memberof MeetingInfo
131
+ */
121
132
  async createAdhocSpaceMeeting(conversationUrl: string) {
122
133
  if (!this.webex.meetings.preferredWebexSite) {
123
134
  throw Error('No preferred webex site found');
@@ -129,7 +140,7 @@ export default class MeetingInfoV2 {
129
140
  particpants.forEach((participant) => {
130
141
  invitees.push({
131
142
  email: participant.emailAddress,
132
- ciUserUuid: participant.entryUUID
143
+ ciUserUuid: participant.entryUUID,
133
144
  });
134
145
  });
135
146
  }
@@ -137,56 +148,50 @@ export default class MeetingInfoV2 {
137
148
  return invitees;
138
149
  };
139
150
 
140
- return this.webex.internal.conversation.get(
141
- {url: conversationUrl},
142
- {includeParticipants: true, disableTransform: true}
143
- )
151
+ return this.webex.internal.conversation
152
+ .get({url: conversationUrl}, {includeParticipants: true, disableTransform: true})
144
153
  .then((conversation) => {
145
154
  const body = {
146
155
  title: conversation.displayName,
147
156
  spaceUrl: conversation.url,
148
157
  keyUrl: conversation.encryptionKeyUrl,
149
158
  kroUrl: conversation.kmsResourceObjectUrl,
150
- invitees: getInvitees(conversation.participants?.items)
159
+ invitees: getInvitees(conversation.participants?.items),
151
160
  };
152
161
 
153
- const uri = this.webex.meetings.preferredWebexSite ?
154
- `https://${this.webex.meetings.preferredWebexSite}/wbxappapi/v2/meetings/spaceInstant` : '';
162
+ const uri = this.webex.meetings.preferredWebexSite
163
+ ? `https://${this.webex.meetings.preferredWebexSite}/wbxappapi/v2/meetings/spaceInstant`
164
+ : '';
155
165
 
156
- Metrics.sendBehavioralMetric(
157
- BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS
158
- );
166
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);
159
167
 
160
168
  return this.webex.request({
161
169
  method: HTTP_VERBS.POST,
162
170
  uri,
163
- body
171
+ body,
164
172
  });
165
173
  })
166
174
  .catch((err) => {
167
- Metrics.sendBehavioralMetric(
168
- BEHAVIORAL_METRICS.ADHOC_MEETING_FAILURE,
169
- {
170
- reason: err.message,
171
- stack: err.stack
172
- }
173
- );
175
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_FAILURE, {
176
+ reason: err.message,
177
+ stack: err.stack,
178
+ });
174
179
  throw new MeetingInfoV2AdhocMeetingError(err.body?.code, err.body?.message);
175
180
  });
176
181
  }
177
182
 
178
183
  /**
179
- * Fetches meeting info from the server
180
- * @param {String} destination one of many different types of destinations to look up info for
181
- * @param {String} [type] to match up with the destination value
182
- * @param {String} password
183
- * @param {Object} captchaInfo
184
- * @param {String} captchaInfo.code
185
- * @param {String} captchaInfo.id
186
- * @returns {Promise} returns a meeting info object
187
- * @public
188
- * @memberof MeetingInfo
189
- */
184
+ * Fetches meeting info from the server
185
+ * @param {String} destination one of many different types of destinations to look up info for
186
+ * @param {String} [type] to match up with the destination value
187
+ * @param {String} password
188
+ * @param {Object} captchaInfo
189
+ * @param {String} captchaInfo.code
190
+ * @param {String} captchaInfo.id
191
+ * @returns {Promise} returns a meeting info object
192
+ * @public
193
+ * @memberof MeetingInfo
194
+ */
190
195
  async fetchMeetingInfo(
191
196
  destination: string,
192
197
  type: string = null,
@@ -199,10 +204,14 @@ export default class MeetingInfoV2 {
199
204
  const destinationType = await MeetingInfoUtil.getDestinationType({
200
205
  destination,
201
206
  type,
202
- webex: this.webex
207
+ webex: this.webex,
203
208
  });
204
209
 
205
- if (destinationType.type === _CONVERSATION_URL_ && this.webex.config.meetings.experimental.enableAdhocMeetings && this.webex.meetings.preferredWebexSite) {
210
+ if (
211
+ destinationType.type === _CONVERSATION_URL_ &&
212
+ this.webex.config.meetings.experimental.enableAdhocMeetings &&
213
+ this.webex.meetings.preferredWebexSite
214
+ ) {
206
215
  return this.createAdhocSpaceMeeting(destinationType.destination);
207
216
  }
208
217
 
@@ -210,63 +219,52 @@ export default class MeetingInfoV2 {
210
219
 
211
220
  const options: any = {
212
221
  method: HTTP_VERBS.POST,
213
- body
222
+ body,
214
223
  };
215
224
 
216
225
  const directURI = await MeetingInfoUtil.getDirectMeetingInfoURI(destinationType);
217
226
 
218
227
  if (directURI) {
219
228
  options.uri = directURI;
220
- }
221
- else {
229
+ } else {
222
230
  options.service = WBXAPPAPI_SERVICE;
223
231
  options.resource = 'meetingInfo';
224
232
  }
225
233
 
226
- return this.webex.request(options)
234
+ return this.webex
235
+ .request(options)
227
236
  .then((response) => {
228
- Metrics.sendBehavioralMetric(
229
- BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS
230
- );
237
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS);
231
238
 
232
239
  return response;
233
240
  })
234
241
  .catch((err) => {
235
242
  if (err?.statusCode === 403) {
236
- Metrics.sendBehavioralMetric(
237
- BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR,
238
- {
239
- reason: err.message,
240
- stack: err.stack
241
- }
242
- );
243
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR, {
244
+ reason: err.message,
245
+ stack: err.stack,
246
+ });
243
247
 
244
248
  throw new MeetingInfoV2PasswordError(err.body?.code, err.body?.data?.meetingInfo);
245
249
  }
246
250
  if (err?.statusCode === 423) {
247
- Metrics.sendBehavioralMetric(
248
- BEHAVIORAL_METRICS.VERIFY_CAPTCHA_ERROR,
249
- {
250
- reason: err.message,
251
- stack: err.stack
252
- }
253
- );
251
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_CAPTCHA_ERROR, {
252
+ reason: err.message,
253
+ stack: err.stack,
254
+ });
254
255
 
255
256
  throw new MeetingInfoV2CaptchaError(err.body?.code, {
256
257
  captchaId: err.body.captchaID,
257
258
  verificationImageURL: err.body.verificationImageURL,
258
259
  verificationAudioURL: err.body.verificationAudioURL,
259
- refreshURL: err.body.refreshURL
260
+ refreshURL: err.body.refreshURL,
260
261
  });
261
262
  }
262
263
 
263
- Metrics.sendBehavioralMetric(
264
- BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE,
265
- {
266
- reason: err.message,
267
- stack: err.stack
268
- }
269
- );
264
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE, {
265
+ reason: err.message,
266
+ stack: err.stack,
267
+ });
270
268
  throw err;
271
269
  });
272
270
  }
@@ -3,7 +3,6 @@ import ParameterError from '../common/errors/parameter';
3
3
 
4
4
  import MeetingInfoUtil from './util';
5
5
 
6
-
7
6
  /**
8
7
  * @class MeetingInfoRequest
9
8
  */
@@ -30,10 +29,17 @@ export default class MeetingInfoRequest {
30
29
  */
31
30
  fetchMeetingInfo(options: any) {
32
31
  if (!options || !options.type || !options.destination) {
33
- throw new ParameterError('MeetingInfo should be fetched with a type and destination specified, see list of valid types and their corresponding values in constants');
32
+ throw new ParameterError(
33
+ 'MeetingInfo should be fetched with a type and destination specified, see list of valid types and their corresponding values in constants'
34
+ );
34
35
  }
35
36
  const resourceUrl = MeetingInfoUtil.getResourceUrl(options.type, options.destination);
36
- const requestParams = MeetingInfoUtil.getRequestParams(resourceUrl, options.type, options.destination, API.LOCUS);
37
+ const requestParams = MeetingInfoUtil.getRequestParams(
38
+ resourceUrl,
39
+ options.type,
40
+ options.destination,
41
+ API.LOCUS
42
+ );
37
43
 
38
44
  return this.webex.request(requestParams);
39
45
  }
@@ -3,7 +3,7 @@ import url from 'url';
3
3
  import btoa from 'btoa';
4
4
  import {
5
5
  // @ts-ignore
6
- deconstructHydraId
6
+ deconstructHydraId,
7
7
  } from '@webex/common';
8
8
 
9
9
  import ParameterError from '../common/errors/parameter';
@@ -31,7 +31,7 @@ import {
31
31
  MEET,
32
32
  MEET_M,
33
33
  HTTPS_PROTOCOL,
34
- UUID_REG
34
+ UUID_REG,
35
35
  } from '../constants';
36
36
 
37
37
  const MeetingInfoUtil: any = {};
@@ -62,9 +62,10 @@ MeetingInfoUtil.getParsedUrl = (link) => {
62
62
  }
63
63
 
64
64
  return parsedUrl;
65
- }
66
- catch (error) {
67
- LoggerProxy.logger.warn(`Meeting-info:util#getParsedUrl --> unable to parse the URL, error: ${error}`);
65
+ } catch (error) {
66
+ LoggerProxy.logger.warn(
67
+ `Meeting-info:util#getParsedUrl --> unable to parse the URL, error: ${error}`
68
+ );
68
69
 
69
70
  return null;
70
71
  }
@@ -78,7 +79,11 @@ MeetingInfoUtil.getParsedUrl = (link) => {
78
79
  MeetingInfoUtil.isMeetingLink = (value: string) => {
79
80
  const parsedUrl = MeetingInfoUtil.getParsedUrl(value);
80
81
  const hostNameBool = parsedUrl.hostname && parsedUrl.hostname.includes(WEBEX_DOT_COM);
81
- const pathNameBool = parsedUrl.pathname && (parsedUrl.pathname.includes(`/${MEET}`) || parsedUrl.pathname.includes(`/${MEET_M}`) || parsedUrl.pathname.includes(`/${JOIN}`));
82
+ const pathNameBool =
83
+ parsedUrl.pathname &&
84
+ (parsedUrl.pathname.includes(`/${MEET}`) ||
85
+ parsedUrl.pathname.includes(`/${MEET_M}`) ||
86
+ parsedUrl.pathname.includes(`/${JOIN}`));
82
87
 
83
88
  return hostNameBool && pathNameBool;
84
89
  };
@@ -123,7 +128,6 @@ MeetingInfoUtil.convertLinkToSip = (value) => {
123
128
  return `${user}@${company}.${WEBEX_DOT_COM}`;
124
129
  };
125
130
 
126
-
127
131
  MeetingInfoUtil.isSipUri = (sipString) => {
128
132
  // TODO: lets remove regex from this equation and user URI matchers and such
129
133
  // have not found a great sip uri parser library as of now
@@ -155,15 +159,21 @@ MeetingInfoUtil.getHydraId = (destination) => {
155
159
  return {};
156
160
  };
157
161
 
158
- MeetingInfoUtil.getSipUriFromHydraPersonId = (destination, webex) => webex.people.get(destination).then((res) => {
159
- if (res.emails && res.emails.length) {
160
- return res.emails[0];
161
- }
162
- throw new ParameterError('Hydra Id Lookup was an invalid hydra person id.');
163
- }).catch((err) => {
164
- LoggerProxy.logger.error(`Meeting-info:util#MeetingInfoUtil.getSipUriFromHydraPersonId --> getSipUriFromHydraPersonId ${err} `);
165
- throw err;
166
- });
162
+ MeetingInfoUtil.getSipUriFromHydraPersonId = (destination, webex) =>
163
+ webex.people
164
+ .get(destination)
165
+ .then((res) => {
166
+ if (res.emails && res.emails.length) {
167
+ return res.emails[0];
168
+ }
169
+ throw new ParameterError('Hydra Id Lookup was an invalid hydra person id.');
170
+ })
171
+ .catch((err) => {
172
+ LoggerProxy.logger.error(
173
+ `Meeting-info:util#MeetingInfoUtil.getSipUriFromHydraPersonId --> getSipUriFromHydraPersonId ${err} `
174
+ );
175
+ throw err;
176
+ });
167
177
 
168
178
  MeetingInfoUtil.generateOptions = async (from) => {
169
179
  const {destination, type, webex} = from;
@@ -171,31 +181,29 @@ MeetingInfoUtil.generateOptions = async (from) => {
171
181
  if (type) {
172
182
  return {
173
183
  destination,
174
- type
184
+ type,
175
185
  };
176
186
  }
177
187
  const options: any = {};
178
188
  const hydraId = MeetingInfoUtil.getHydraId(destination);
179
189
 
180
190
  if (MeetingInfoUtil.isMeetingLink(destination)) {
181
- LoggerProxy.logger.warn('Meeting-info:util#generateOptions --> WARN, use of Meeting Link is deprecated, please use a SIP URI instead');
191
+ LoggerProxy.logger.warn(
192
+ 'Meeting-info:util#generateOptions --> WARN, use of Meeting Link is deprecated, please use a SIP URI instead'
193
+ );
182
194
 
183
195
  options.type = _MEETING_LINK_;
184
196
  options.destination = destination;
185
- }
186
- else if (MeetingInfoUtil.isSipUri(destination)) {
197
+ } else if (MeetingInfoUtil.isSipUri(destination)) {
187
198
  options.type = _SIP_URI_;
188
199
  options.destination = destination;
189
- }
190
- else if (MeetingInfoUtil.isPhoneNumber(destination)) {
200
+ } else if (MeetingInfoUtil.isPhoneNumber(destination)) {
191
201
  options.type = _SIP_URI_;
192
202
  options.destination = destination;
193
- }
194
- else if (MeetingInfoUtil.isConversationUrl(destination, webex)) {
203
+ } else if (MeetingInfoUtil.isConversationUrl(destination, webex)) {
195
204
  options.type = _CONVERSATION_URL_;
196
205
  options.destination = destination;
197
- }
198
- else if (hydraId.people) {
206
+ } else if (hydraId.people) {
199
207
  options.type = _SIP_URI_;
200
208
 
201
209
  return MeetingInfoUtil.getSipUriFromHydraPersonId(hydraId.destination, webex).then((res) => {
@@ -208,26 +216,25 @@ MeetingInfoUtil.generateOptions = async (from) => {
208
216
 
209
217
  return Promise.resolve(options);
210
218
  });
211
- }
212
- else if (hydraId.room) {
219
+ } else if (hydraId.room) {
213
220
  options.type = _CONVERSATION_URL_;
214
221
  try {
215
222
  await webex.internal.services.waitForCatalog('postauth');
216
223
 
217
224
  const conversationUrl = webex.internal.conversation.getUrlFromClusterId({
218
225
  cluster: hydraId.cluster,
219
- id: hydraId.destination
226
+ id: hydraId.destination,
220
227
  });
221
228
 
222
229
  options.destination = conversationUrl;
223
- }
224
- catch (e) {
230
+ } catch (e) {
225
231
  LoggerProxy.logger.error(`Meeting-info:util#generateOptions --> ${e}`);
226
- throw (e);
232
+ throw e;
227
233
  }
228
- }
229
- else {
230
- throw new ParameterError('MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.');
234
+ } else {
235
+ throw new ParameterError(
236
+ 'MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.'
237
+ );
231
238
  }
232
239
 
233
240
  return Promise.resolve(options);
@@ -248,7 +255,9 @@ MeetingInfoUtil.getResourceUrl = (type: string, value: any) => {
248
255
  case _SIP_URI_:
249
256
  case _PERSONAL_ROOM_:
250
257
  case _MEETING_ID_:
251
- resource = `/${LOCI}/${MEETINGINFO}/${encodeURIComponent(value)}?${TYPE}=${type}&${USE_URI_LOOKUP_FALSE}`;
258
+ resource = `/${LOCI}/${MEETINGINFO}/${encodeURIComponent(
259
+ value
260
+ )}?${TYPE}=${type}&${USE_URI_LOOKUP_FALSE}`;
252
261
  break;
253
262
  case _CONVERSATION_URL_:
254
263
  method = HTTP_VERBS.PUT;
@@ -258,7 +267,9 @@ MeetingInfoUtil.getResourceUrl = (type: string, value: any) => {
258
267
  method = HTTP_VERBS.PUT;
259
268
  break;
260
269
  case _MEETING_LINK_:
261
- resource = `$/${LOCI}/${MEETINGINFO}/${btoa(value)}?${TYPE}=${_MEETING_LINK_}&${USE_URI_LOOKUP_FALSE}`;
270
+ resource = `$/${LOCI}/${MEETINGINFO}/${btoa(
271
+ value
272
+ )}?${TYPE}=${_MEETING_LINK_}&${USE_URI_LOOKUP_FALSE}`;
262
273
  break;
263
274
  default:
264
275
  }
@@ -266,7 +277,7 @@ MeetingInfoUtil.getResourceUrl = (type: string, value: any) => {
266
277
  return {
267
278
  uri,
268
279
  resource,
269
- method
280
+ method,
270
281
  };
271
282
  };
272
283
 
@@ -274,26 +285,23 @@ MeetingInfoUtil.getRequestParams = (resourceOptions, type, value, api) => {
274
285
  let requestParams: any = {
275
286
  method: resourceOptions.method,
276
287
  api,
277
- resource: resourceOptions.resource
288
+ resource: resourceOptions.resource,
278
289
  };
279
290
 
280
291
  if (resourceOptions.method === HTTP_VERBS.GET) {
281
292
  // for handling URL redirections
282
293
  requestParams.resource = requestParams.resource.concat(`&${ALTERNATE_REDIRECT_TRUE}`);
283
- }
284
- else
285
- if (type !== _LOCUS_ID_) {
294
+ } else if (type !== _LOCUS_ID_) {
286
295
  // locus id check is a PUT not sure why
287
296
  requestParams.resource = requestParams.resource.concat(`?${ALTERNATE_REDIRECT_TRUE}`);
288
297
  requestParams.body = {
289
298
  value,
290
- lookupType: type
299
+ lookupType: type,
291
300
  };
292
- }
293
- else if (type === _LOCUS_ID_) {
301
+ } else if (type === _LOCUS_ID_) {
294
302
  requestParams = {
295
303
  method: resourceOptions.method,
296
- uri: resourceOptions.uri
304
+ uri: resourceOptions.uri,
297
305
  };
298
306
  }
299
307