@webex/plugin-meetings 2.35.3 → 2.35.4

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 (212) hide show
  1. package/dist/common/browser-detection.js.map +1 -1
  2. package/dist/common/collection.js.map +1 -1
  3. package/dist/common/config.js.map +1 -1
  4. package/dist/common/errors/captcha-error.js +7 -0
  5. package/dist/common/errors/captcha-error.js.map +1 -1
  6. package/dist/common/errors/intent-to-join.js +8 -0
  7. package/dist/common/errors/intent-to-join.js.map +1 -1
  8. package/dist/common/errors/join-meeting.js +8 -0
  9. package/dist/common/errors/join-meeting.js.map +1 -1
  10. package/dist/common/errors/media.js +7 -0
  11. package/dist/common/errors/media.js.map +1 -1
  12. package/dist/common/errors/parameter.js.map +1 -1
  13. package/dist/common/errors/password-error.js +7 -0
  14. package/dist/common/errors/password-error.js.map +1 -1
  15. package/dist/common/errors/permission.js +7 -0
  16. package/dist/common/errors/permission.js.map +1 -1
  17. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  18. package/dist/common/errors/reconnection.js +7 -0
  19. package/dist/common/errors/reconnection.js.map +1 -1
  20. package/dist/common/errors/stats.js +7 -0
  21. package/dist/common/errors/stats.js.map +1 -1
  22. package/dist/common/errors/webex-errors.js.map +1 -1
  23. package/dist/common/errors/webex-meetings-error.js +5 -2
  24. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  25. package/dist/common/events/events-scope.js.map +1 -1
  26. package/dist/common/events/events.js.map +1 -1
  27. package/dist/common/events/trigger-proxy.js.map +1 -1
  28. package/dist/common/events/util.js.map +1 -1
  29. package/dist/common/logs/logger-config.js.map +1 -1
  30. package/dist/common/logs/logger-proxy.js.map +1 -1
  31. package/dist/common/logs/request.js +3 -0
  32. package/dist/common/logs/request.js.map +1 -1
  33. package/dist/common/queue.js.map +1 -1
  34. package/dist/config.js.map +1 -1
  35. package/dist/constants.js.map +1 -1
  36. package/dist/locus-info/controlsUtils.js.map +1 -1
  37. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  38. package/dist/locus-info/fullState.js.map +1 -1
  39. package/dist/locus-info/hostUtils.js.map +1 -1
  40. package/dist/locus-info/index.js +43 -5
  41. package/dist/locus-info/index.js.map +1 -1
  42. package/dist/locus-info/infoUtils.js.map +1 -1
  43. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  44. package/dist/locus-info/parser.js +12 -3
  45. package/dist/locus-info/parser.js.map +1 -1
  46. package/dist/locus-info/selfUtils.js.map +1 -1
  47. package/dist/media/index.js.map +1 -1
  48. package/dist/media/properties.js +12 -0
  49. package/dist/media/properties.js.map +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 +8 -1
  53. package/dist/meeting/effectsState.js.map +1 -1
  54. package/dist/meeting/index.js +151 -32
  55. package/dist/meeting/index.js.map +1 -1
  56. package/dist/meeting/muteState.js +6 -0
  57. package/dist/meeting/muteState.js.map +1 -1
  58. package/dist/meeting/request.js +54 -24
  59. package/dist/meeting/request.js.map +1 -1
  60. package/dist/meeting/state.js.map +1 -1
  61. package/dist/meeting/util.js.map +1 -1
  62. package/dist/meeting-info/collection.js +4 -1
  63. package/dist/meeting-info/collection.js.map +1 -1
  64. package/dist/meeting-info/index.js +5 -0
  65. package/dist/meeting-info/index.js.map +1 -1
  66. package/dist/meeting-info/meeting-info-v2.js +14 -2
  67. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  68. package/dist/meeting-info/request.js +3 -0
  69. package/dist/meeting-info/request.js.map +1 -1
  70. package/dist/meeting-info/util.js.map +1 -1
  71. package/dist/meeting-info/utilv2.js.map +1 -1
  72. package/dist/meetings/collection.js +4 -1
  73. package/dist/meetings/collection.js.map +1 -1
  74. package/dist/meetings/index.js +72 -20
  75. package/dist/meetings/index.js.map +1 -1
  76. package/dist/meetings/request.js +4 -0
  77. package/dist/meetings/request.js.map +1 -1
  78. package/dist/meetings/util.js.map +1 -1
  79. package/dist/member/index.js +30 -7
  80. package/dist/member/index.js.map +1 -1
  81. package/dist/member/util.js +2 -1
  82. package/dist/member/util.js.map +1 -1
  83. package/dist/members/collection.js +1 -0
  84. package/dist/members/collection.js.map +1 -1
  85. package/dist/members/index.js +12 -1
  86. package/dist/members/index.js.map +1 -1
  87. package/dist/members/request.js +19 -9
  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 +8 -0
  93. package/dist/metrics/index.js.map +1 -1
  94. package/dist/networkQualityMonitor/index.js +10 -2
  95. package/dist/networkQualityMonitor/index.js.map +1 -1
  96. package/dist/peer-connection-manager/index.js +11 -4
  97. package/dist/peer-connection-manager/index.js.map +1 -1
  98. package/dist/personal-meeting-room/index.js +11 -0
  99. package/dist/personal-meeting-room/index.js.map +1 -1
  100. package/dist/personal-meeting-room/request.js +2 -1
  101. package/dist/personal-meeting-room/request.js.map +1 -1
  102. package/dist/personal-meeting-room/util.js.map +1 -1
  103. package/dist/reachability/index.js +17 -7
  104. package/dist/reachability/index.js.map +1 -1
  105. package/dist/reachability/request.js +1 -0
  106. package/dist/reachability/request.js.map +1 -1
  107. package/dist/reconnection-manager/index.js +21 -2
  108. package/dist/reconnection-manager/index.js.map +1 -1
  109. package/dist/roap/collection.js +1 -0
  110. package/dist/roap/collection.js.map +1 -1
  111. package/dist/roap/handler.js +14 -2
  112. package/dist/roap/handler.js.map +1 -1
  113. package/dist/roap/index.js +11 -1
  114. package/dist/roap/index.js.map +1 -1
  115. package/dist/roap/request.js +7 -2
  116. package/dist/roap/request.js.map +1 -1
  117. package/dist/roap/state.js.map +1 -1
  118. package/dist/roap/turnDiscovery.js +9 -1
  119. package/dist/roap/turnDiscovery.js.map +1 -1
  120. package/dist/roap/util.js.map +1 -1
  121. package/dist/statsAnalyzer/global.js.map +1 -1
  122. package/dist/statsAnalyzer/index.js +19 -1
  123. package/dist/statsAnalyzer/index.js.map +1 -1
  124. package/dist/statsAnalyzer/mqaUtil.js +9 -3
  125. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  126. package/dist/transcription/index.js +10 -3
  127. package/dist/transcription/index.js.map +1 -1
  128. package/package.json +17 -17
  129. package/src/common/{browser-detection.js → browser-detection.ts} +1 -1
  130. package/src/common/collection.ts +6 -6
  131. package/src/common/{config.js → config.ts} +1 -1
  132. package/src/common/errors/{captcha-error.js → captcha-error.ts} +5 -1
  133. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +6 -1
  134. package/src/common/errors/{join-meeting.js → join-meeting.ts} +6 -1
  135. package/src/common/errors/{media.js → media.ts} +5 -1
  136. package/src/common/errors/parameter.ts +3 -2
  137. package/src/common/errors/{password-error.js → password-error.ts} +5 -1
  138. package/src/common/errors/{permission.js → permission.ts} +5 -1
  139. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  140. package/src/common/errors/{reconnection.js → reconnection.ts} +5 -1
  141. package/src/common/errors/{stats.js → stats.ts} +5 -1
  142. package/src/common/errors/{webex-errors.js → webex-errors.ts} +1 -2
  143. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +3 -1
  144. package/src/common/events/{events-scope.js → events-scope.ts} +1 -1
  145. package/src/common/events/{events.js → events.ts} +0 -0
  146. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +1 -2
  147. package/src/common/events/{util.js → util.ts} +1 -1
  148. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  149. package/src/common/logs/{logger-proxy.js → logger-proxy.ts} +1 -1
  150. package/src/common/logs/{request.js → request.ts} +12 -2
  151. package/src/common/queue.ts +1 -2
  152. package/src/{config.js → config.ts} +1 -0
  153. package/src/constants.ts +1 -0
  154. package/src/locus-info/{controlsUtils.js → controlsUtils.ts} +4 -4
  155. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  156. package/src/locus-info/{fullState.js → fullState.ts} +1 -1
  157. package/src/locus-info/{hostUtils.js → hostUtils.ts} +5 -5
  158. package/src/locus-info/{index.js → index.ts} +67 -32
  159. package/src/locus-info/{infoUtils.js → infoUtils.ts} +3 -4
  160. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +13 -13
  161. package/src/locus-info/{parser.js → parser.ts} +22 -12
  162. package/src/locus-info/{selfUtils.js → selfUtils.ts} +17 -19
  163. package/src/media/{index.js → index.ts} +108 -39
  164. package/src/media/{properties.js → properties.ts} +16 -4
  165. package/src/media/{util.js → util.ts} +2 -3
  166. package/src/mediaQualityMetrics/{config.js → config.ts} +1 -1
  167. package/src/meeting/{effectsState.js → effectsState.ts} +12 -6
  168. package/src/meeting/{index.js → index.ts} +323 -147
  169. package/src/meeting/{muteState.js → muteState.ts} +16 -11
  170. package/src/meeting/{request.js → request.ts} +124 -36
  171. package/src/meeting/{state.js → state.ts} +6 -6
  172. package/src/meeting/{util.js → util.ts} +4 -4
  173. package/src/meeting-info/{collection.js → collection.ts} +4 -1
  174. package/src/meeting-info/{index.js → index.ts} +10 -6
  175. package/src/meeting-info/{meeting-info-v2.js → meeting-info-v2.ts} +28 -10
  176. package/src/meeting-info/{request.js → request.ts} +6 -2
  177. package/src/meeting-info/{util.js → util.ts} +6 -5
  178. package/src/meeting-info/{utilv2.js → utilv2.ts} +8 -7
  179. package/src/meetings/{collection.js → collection.ts} +5 -2
  180. package/src/meetings/{index.js → index.ts} +88 -22
  181. package/src/meetings/{request.js → request.ts} +6 -1
  182. package/src/meetings/{util.js → util.ts} +5 -3
  183. package/src/member/{index.js → index.ts} +46 -15
  184. package/src/member/{util.js → util.ts} +17 -16
  185. package/src/members/{collection.js → collection.ts} +2 -1
  186. package/src/members/{index.js → index.ts} +39 -26
  187. package/src/members/{request.js → request.ts} +16 -5
  188. package/src/members/{util.js → util.ts} +7 -7
  189. package/src/metrics/{config.js → config.ts} +0 -2
  190. package/src/metrics/{constants.js → constants.ts} +0 -0
  191. package/src/metrics/{index.js → index.ts} +27 -8
  192. package/src/networkQualityMonitor/{index.js → index.ts} +18 -3
  193. package/src/peer-connection-manager/{index.js → index.ts} +72 -28
  194. package/src/personal-meeting-room/{index.js → index.ts} +17 -4
  195. package/src/personal-meeting-room/{request.js → request.ts} +3 -1
  196. package/src/personal-meeting-room/{util.js → util.ts} +1 -1
  197. package/src/reachability/{index.js → index.ts} +28 -17
  198. package/src/reachability/request.ts +4 -2
  199. package/src/reconnection-manager/{index.js → index.ts} +42 -13
  200. package/src/roap/{collection.js → collection.ts} +1 -0
  201. package/src/roap/{handler.js → handler.ts} +15 -4
  202. package/src/roap/{index.js → index.ts} +23 -10
  203. package/src/roap/{request.js → request.ts} +19 -3
  204. package/src/roap/{state.js → state.ts} +3 -2
  205. package/src/roap/turnDiscovery.ts +14 -5
  206. package/src/roap/{util.js → util.ts} +1 -2
  207. package/src/statsAnalyzer/{global.js → global.ts} +0 -0
  208. package/src/statsAnalyzer/{index.js → index.ts} +36 -17
  209. package/src/statsAnalyzer/{mqaUtil.js → mqaUtil.ts} +6 -1
  210. package/src/transcription/{index.js → index.ts} +16 -11
  211. package/test/integration/spec/space-meeting.js +1 -2
  212. package/test/unit/spec/roap/util.js +1 -1
@@ -18,6 +18,10 @@ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/pr
18
18
 
19
19
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
20
20
 
21
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
22
+
23
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
24
+
21
25
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
22
26
 
23
27
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
@@ -101,7 +105,9 @@ var NeedsRejoinError = /*#__PURE__*/function (_Error2) {
101
105
  _ref$error = _ref.error,
102
106
  error = _ref$error === void 0 ? new Error('Meeting needs to be rejoined') : _ref$error;
103
107
  (0, _classCallCheck2.default)(this, NeedsRejoinError);
108
+ // @ts-ignore
104
109
  _this = _super2.call(this, error);
110
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "wasSharing", void 0);
105
111
  _this.wasSharing = wasSharing;
106
112
  return _this;
107
113
  }
@@ -120,6 +126,15 @@ var ReconnectionManager = /*#__PURE__*/function () {
120
126
  */
121
127
  function ReconnectionManager(meeting) {
122
128
  (0, _classCallCheck2.default)(this, ReconnectionManager);
129
+ (0, _defineProperty2.default)(this, "autoRejoinEnabled", void 0);
130
+ (0, _defineProperty2.default)(this, "iceState", void 0);
131
+ (0, _defineProperty2.default)(this, "maxRejoinAttempts", void 0);
132
+ (0, _defineProperty2.default)(this, "meeting", void 0);
133
+ (0, _defineProperty2.default)(this, "rejoinAttempts", void 0);
134
+ (0, _defineProperty2.default)(this, "shareStatus", void 0);
135
+ (0, _defineProperty2.default)(this, "status", void 0);
136
+ (0, _defineProperty2.default)(this, "tryCount", void 0);
137
+ (0, _defineProperty2.default)(this, "webex", void 0);
123
138
 
124
139
  /**
125
140
  * Stores ICE reconnection state data.
@@ -133,6 +148,7 @@ var ReconnectionManager = /*#__PURE__*/function () {
133
148
  disconnected: false,
134
149
  resolve: function resolve() {},
135
150
  timer: undefined,
151
+ // @ts-ignore
136
152
  timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout
137
153
  };
138
154
  /**
@@ -159,6 +175,7 @@ var ReconnectionManager = /*#__PURE__*/function () {
159
175
  */
160
176
  // TODO : change this logic to not save the meeting instance
161
177
  // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date
178
+ // @ts-ignore
162
179
 
163
180
  this.webex = meeting.webex;
164
181
  /**
@@ -170,9 +187,11 @@ var ReconnectionManager = /*#__PURE__*/function () {
170
187
  // TODO: try removing the circular dependency for meeting and reconnection manager
171
188
  // try moving this to meetings collection
172
189
 
173
- this.meeting = meeting;
190
+ this.meeting = meeting; // @ts-ignore
191
+
174
192
  this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;
175
- this.rejoinAttempts = _constants.RECONNECTION.STATE.DEFAULT_TRY_COUNT;
193
+ this.rejoinAttempts = _constants.RECONNECTION.STATE.DEFAULT_TRY_COUNT; // @ts-ignore
194
+
176
195
  this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin; // Make sure reconnection state is in default
177
196
 
178
197
  this.reset();
@@ -1 +1 @@
1
- {"version":3,"names":["NeedsRetryError","Error","NeedsRejoinError","wasSharing","error","ReconnectionManager","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","tryCount","DEFAULT_TRY_COUNT","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","LoggerProxy","logger","log","clearTimeout","reject","setTimeout","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","networkDisconnect","networkRetry","id","validate","Metrics","postEvent","event","eventType","MEDIA_RECONNECTING","executeReconnection","then","MEDIA_RECOVERED","data","recoveredBy","RECOVERED_BY_NEW","catch","reconnectError","reconnect","message","reconnectMetric","CALL_ABORTED","errors","category","errorObjects","expected","errorCode","fatal","name","mediaEngine","shownToUser","rejoinMeeting","IN_PROGRESS","reconnectMercuryWebSocket","internal","device","url","FAILURE","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","meetings","syncMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","media","previousCorrelationId","correlationId","join","rejoin","RoapCollection","deleteSession","Media","stopTracks","mediaProperties","shareTrack","isSharing","NO_SHARE","mediaDirection","sendShare","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","reason","SHARE_STOPPED_REASON","MEETING_REJOIN","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","setupPeerConnection","attachMedia","meetingId","remoteQualityLevel","enableRtx","enableExtmap","peerConnection","setRemoteStream","roap","sendRoapMediaRequest","sdp","roapSeq","mercury","connected","disconnect","connect","PeerConnectionManager","close","unsetPeerConnection","doTurnDiscovery","turnServerResult","reInitiatePeerconnection","turnServerInfo","setPeerConnectionEvents","statsAnalyzer","updatePeerconnection"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectInProgress from '../common/errors/reconnection-in-progress';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport {eventType, reconnection, errorObjects} from '../metrics/config';\nimport Media from '../media';\nimport Metrics from '../metrics';\nimport RoapCollection from '../roap/collection';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({wasSharing, error = new Error('Meeting needs to be rejoined')}) {\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n*/\nexport default class ReconnectionManager {\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout\n };\n\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Number}\n * @private\n * @memberof ReconnectionManager\n */\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise<undefined>}\n * @public\n * @memberof ReconnectionManager\n */\n waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect');\n\n this.iceState.disconnected = true;\n\n return new Promise((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n }\n else {\n this.iceState.disconnected = false;\n reject(new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`));\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n cleanUp() {\n this.reset();\n this.meeting = null;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectionError}\n * @private\n * @memberof ReconnectionManager\n */\n validate() {\n if (this.meeting.config.reconnection.enabled) {\n if (\n this.status === RECONNECTION.STATE.DEFAULT_STATUS ||\n this.status === RECONNECTION.STATE.COMPLETE\n ) {\n return true;\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection already in progress.');\n\n throw new ReconnectInProgress('Reconnection already in progress.');\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection is not enabled.');\n\n throw new ReconnectionError('Reconnection is not enabled.');\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n async reconnect({networkDisconnect = false, networkRetry = false} = {}) {\n LoggerProxy.logger.info(`ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`);\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n }\n catch (error) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection unable to begin.', error);\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect start metric.');\n Metrics.postEvent({\n event: eventType.MEDIA_RECONNECTING,\n meeting: this.meeting\n });\n }\n\n return this.executeReconnection({networkDisconnect})\n .then(() => {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect success metric.');\n Metrics.postEvent({\n event: eventType.MEDIA_RECOVERED,\n meeting: this.meeting,\n data: {recoveredBy: reconnection.RECOVERED_BY_NEW}\n });\n })\n .catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.');\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n return this.reconnect({networkDisconnect: true, networkRetry: true});\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error('ReconnectionManager:index#reconnect --> Reconnection failed.', reconnectError.message);\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect abort metric.');\n\n const reconnectMetric = {\n event: eventType.CALL_ABORTED,\n meeting: this.meeting,\n data: {\n errors: [\n {\n category: errorObjects.category.expected,\n errorCode: 2008,\n fatal: true,\n name: errorObjects.name.mediaEngine,\n shownToUser: false\n }\n ]\n }\n };\n\n Metrics.postEvent(reconnectMetric);\n if (reconnectError instanceof NeedsRejoinError) {\n // send call aborded event with catogery as expected as we are trying to rejoin\n\n if (this.autoRejoinEnabled) {\n return this.rejoinMeeting(reconnectError.wasSharing);\n }\n }\n\n\n throw reconnectError;\n });\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n async executeReconnection({networkDisconnect = false}) {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.');\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Websocket reconnected.', this.webex.internal.device.url);\n }\n catch (error) {\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.');\n this.status = RECONNECTION.STATE.FAILURE;\n throw (error);\n }\n }\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Updating meeting data from server.');\n await this.webex.meetings.syncMeetings();\n }\n catch (syncError) {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.', syncError);\n throw (new NeedsRetryError(syncError));\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely ');\n\n throw new Error('Unable to rejoin a meeting already ended or inactive .');\n }\n\n LoggerProxy.logger.info(`ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`);\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw (new NeedsRejoinError({wasSharing}));\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log('ReconnectionManager:index#executeReconnection --> Media reestablished');\n this.status = RECONNECTION.STATE.COMPLETE;\n\n return media;\n }\n catch (error) {\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Media reestablishment failed');\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw (error);\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing = false) {\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin');\n const previousCorrelationId = this.meeting.correlationId;\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n RoapCollection.deleteSession(previousCorrelationId);\n\n if (wasSharing) {\n // Stop the share streams if user tried to rejoin\n Media.stopTracks(this.meeting.mediaProperties.shareTrack);\n this.meeting.isSharing = false;\n if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;\n }\n this.meeting.mediaProperties.mediaDirection.sendShare = false;\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'rejoinMeeting'\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason: SHARE_STOPPED_REASON.MEETING_REJOIN\n }\n );\n }\n }\n catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(`ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`, joinError);\n this.rejoinMeeting();\n }\n else {\n LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.', joinError);\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE,\n {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack\n }\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n }\n catch (mediaError) {\n LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.', mediaError);\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n reconnectMedia() {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media');\n\n return ReconnectionManager.setupPeerConnection(this.meeting)\n .then(() => Media.attachMedia(this.meeting.mediaProperties, {\n meetingId: this.meeting.id,\n remoteQualityLevel: this.meeting.mediaProperties.remoteQualityLevel,\n enableRtx: this.meeting.config.enableRtx,\n enableExtmap: this.meeting.config.enableExtmap\n }))\n .then((peerConnection) => this.meeting.setRemoteStream(peerConnection))\n .then(() => {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> Sending ROAP media request');\n\n return this.meeting.roap\n .sendRoapMediaRequest({\n sdp: this.meeting.mediaProperties.peerConnection.sdp,\n roapSeq: this.meeting.roapSeq,\n meeting: this.meeting,\n reconnect: true\n });\n });\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.');\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.');\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.');\n }\n catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.', disconnectError);\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.');\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.');\n }\n catch (connectError) {\n LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.', connectError);\n\n throw (connectError);\n }\n }\n\n /**\n * @param {Meeting} meeting\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n static async setupPeerConnection(meeting) {\n LoggerProxy.logger.log('ReconnectionManager:index#setupPeerConnection --> Begin resetting peer connection');\n // close pcs, unset to null and create a new one with out closing any streams\n PeerConnectionManager.close(meeting.mediaProperties.peerConnection);\n meeting.mediaProperties.unsetPeerConnection();\n\n const turnServerResult = await meeting.roap.doTurnDiscovery(meeting, true);\n\n meeting.mediaProperties.reInitiatePeerconnection(turnServerResult.turnServerInfo);\n PeerConnectionManager.setPeerConnectionEvents(meeting);\n\n // update the peerconnection in the stats manager when ever we reconnect\n meeting.statsAnalyzer.updatePeerconnection(meeting.mediaProperties.peerConnection);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["NeedsRetryError","Error","NeedsRejoinError","wasSharing","error","ReconnectionManager","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","tryCount","DEFAULT_TRY_COUNT","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","LoggerProxy","logger","log","clearTimeout","reject","setTimeout","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","networkDisconnect","networkRetry","id","validate","Metrics","postEvent","event","eventType","MEDIA_RECONNECTING","executeReconnection","then","MEDIA_RECOVERED","data","recoveredBy","RECOVERED_BY_NEW","catch","reconnectError","reconnect","message","reconnectMetric","CALL_ABORTED","errors","category","errorObjects","expected","errorCode","fatal","name","mediaEngine","shownToUser","rejoinMeeting","IN_PROGRESS","reconnectMercuryWebSocket","internal","device","url","FAILURE","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","meetings","syncMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","media","previousCorrelationId","correlationId","join","rejoin","RoapCollection","deleteSession","Media","stopTracks","mediaProperties","shareTrack","isSharing","NO_SHARE","mediaDirection","sendShare","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","reason","SHARE_STOPPED_REASON","MEETING_REJOIN","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","setupPeerConnection","attachMedia","meetingId","remoteQualityLevel","enableRtx","enableExtmap","peerConnection","setRemoteStream","roap","sendRoapMediaRequest","sdp","roapSeq","mercury","connected","disconnect","connect","PeerConnectionManager","close","unsetPeerConnection","doTurnDiscovery","turnServerResult","reInitiatePeerconnection","turnServerInfo","setPeerConnectionEvents","statsAnalyzer","updatePeerconnection"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectInProgress from '../common/errors/reconnection-in-progress';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport {eventType, reconnection, errorObjects} from '../metrics/config';\nimport Media from '../media';\nimport Metrics from '../metrics';\nimport RoapCollection from '../roap/collection';\nimport Meeting from '../meeting';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n wasSharing: any;\n\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n*/\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n tryCount: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: Meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout\n };\n\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Number}\n * @private\n * @memberof ReconnectionManager\n */\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n // @ts-ignore\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise<undefined>}\n * @public\n * @memberof ReconnectionManager\n */\n public waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect');\n\n this.iceState.disconnected = true;\n\n return new Promise<void>((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n }\n else {\n this.iceState.disconnected = false;\n reject(new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`));\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n this.meeting = null;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectionError}\n * @private\n * @memberof ReconnectionManager\n */\n private validate() {\n if (this.meeting.config.reconnection.enabled) {\n if (\n this.status === RECONNECTION.STATE.DEFAULT_STATUS ||\n this.status === RECONNECTION.STATE.COMPLETE\n ) {\n return true;\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection already in progress.');\n\n throw new ReconnectInProgress('Reconnection already in progress.');\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection is not enabled.');\n\n throw new ReconnectionError('Reconnection is not enabled.');\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect({\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {}) {\n LoggerProxy.logger.info(`ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`);\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n }\n catch (error) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection unable to begin.', error);\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect start metric.');\n Metrics.postEvent({\n event: eventType.MEDIA_RECONNECTING,\n meeting: this.meeting\n });\n }\n\n return this.executeReconnection({networkDisconnect})\n .then(() => {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect success metric.');\n Metrics.postEvent({\n event: eventType.MEDIA_RECOVERED,\n meeting: this.meeting,\n data: {recoveredBy: reconnection.RECOVERED_BY_NEW}\n });\n })\n .catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.');\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n return this.reconnect({networkDisconnect: true, networkRetry: true});\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error('ReconnectionManager:index#reconnect --> Reconnection failed.', reconnectError.message);\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect abort metric.');\n\n const reconnectMetric = {\n event: eventType.CALL_ABORTED,\n meeting: this.meeting,\n data: {\n errors: [\n {\n category: errorObjects.category.expected,\n errorCode: 2008,\n fatal: true,\n name: errorObjects.name.mediaEngine,\n shownToUser: false\n }\n ]\n }\n };\n\n Metrics.postEvent(reconnectMetric);\n if (reconnectError instanceof NeedsRejoinError) {\n // send call aborded event with catogery as expected as we are trying to rejoin\n\n if (this.autoRejoinEnabled) {\n return this.rejoinMeeting(reconnectError.wasSharing);\n }\n }\n\n\n throw reconnectError;\n });\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n private async executeReconnection({ networkDisconnect = false }: { networkDisconnect?: boolean }) {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.');\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Websocket reconnected.', this.webex.internal.device.url);\n }\n catch (error) {\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.');\n this.status = RECONNECTION.STATE.FAILURE;\n throw (error);\n }\n }\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Updating meeting data from server.');\n await this.webex.meetings.syncMeetings();\n }\n catch (syncError) {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.', syncError);\n throw (new NeedsRetryError(syncError));\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely ');\n\n throw new Error('Unable to rejoin a meeting already ended or inactive .');\n }\n\n LoggerProxy.logger.info(`ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`);\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw (new NeedsRejoinError({wasSharing}));\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log('ReconnectionManager:index#executeReconnection --> Media reestablished');\n this.status = RECONNECTION.STATE.COMPLETE;\n\n return media;\n }\n catch (error) {\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Media reestablishment failed');\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw (error);\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing: boolean = false) {\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin');\n const previousCorrelationId = this.meeting.correlationId;\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n RoapCollection.deleteSession(previousCorrelationId);\n\n if (wasSharing) {\n // Stop the share streams if user tried to rejoin\n Media.stopTracks(this.meeting.mediaProperties.shareTrack);\n this.meeting.isSharing = false;\n if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;\n }\n this.meeting.mediaProperties.mediaDirection.sendShare = false;\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'rejoinMeeting'\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason: SHARE_STOPPED_REASON.MEETING_REJOIN\n }\n );\n }\n }\n catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(`ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`, joinError);\n this.rejoinMeeting();\n }\n else {\n LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.', joinError);\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE,\n {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack\n }\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n }\n catch (mediaError) {\n LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.', mediaError);\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n reconnectMedia() {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media');\n\n return ReconnectionManager.setupPeerConnection(this.meeting)\n .then(() => Media.attachMedia(this.meeting.mediaProperties, {\n meetingId: this.meeting.id,\n remoteQualityLevel: this.meeting.mediaProperties.remoteQualityLevel,\n enableRtx: this.meeting.config.enableRtx,\n enableExtmap: this.meeting.config.enableExtmap\n }))\n .then((peerConnection) => this.meeting.setRemoteStream(peerConnection))\n .then(() => {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> Sending ROAP media request');\n\n return this.meeting.roap\n .sendRoapMediaRequest({\n sdp: this.meeting.mediaProperties.peerConnection.sdp,\n roapSeq: this.meeting.roapSeq,\n meeting: this.meeting,\n reconnect: true\n });\n });\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n private async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.');\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.');\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.');\n }\n catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.', disconnectError);\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.');\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.');\n }\n catch (connectError) {\n LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.', connectError);\n\n throw (connectError);\n }\n }\n\n /**\n * @param {Meeting} meeting\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private static async setupPeerConnection(meeting: Meeting) {\n LoggerProxy.logger.log('ReconnectionManager:index#setupPeerConnection --> Begin resetting peer connection');\n // close pcs, unset to null and create a new one with out closing any streams\n PeerConnectionManager.close(meeting.mediaProperties.peerConnection);\n meeting.mediaProperties.unsetPeerConnection();\n\n const turnServerResult = await meeting.roap.doTurnDiscovery(meeting, true);\n\n meeting.mediaProperties.reInitiatePeerconnection(turnServerResult.turnServerInfo);\n PeerConnectionManager.setPeerConnectionEvents(meeting);\n\n // update the peerconnection in the stats manager when ever we reconnect\n meeting.statsAnalyzer.updatePeerconnection(meeting.mediaProperties.peerConnection);\n }\n}\n"],"mappings":"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"}
@@ -47,6 +47,7 @@ var RoapCollection = {
47
47
 
48
48
  if (seq) {
49
49
  if (!seq.finished) {
50
+ // @ts-ignore
50
51
  session.activeSequences -= 1;
51
52
  }
52
53
 
@@ -1 +1 @@
1
- {"version":3,"names":["RoapCollection","sessions","getSession","id","activeSequences","deleteSession","getSessionSequence","seqId","session","state","RoapStateMachine","createState","finished","deleteSessionSequence","seq","isBusy","onSessionSequenceFinish"],"sources":["collection.js"],"sourcesContent":["import RoapStateMachine from '../roap/state';\n\n/* eslint-disable */\nconst RoapCollection = {\n sessions: {},\n\n getSession(id) {\n if (!this.sessions[id]) {\n this.sessions[id] = {\n activeSequences: 0,\n };\n }\n return this.sessions[id];\n },\n\n deleteSession(id) {\n if (this.getSession(id)) {\n delete this.sessions[id];\n }\n },\n\n getSessionSequence(id, seqId) {\n const session = this.getSession(id);\n if (!session[seqId]) {\n session[seqId] = {\n state: RoapStateMachine.createState(),\n finished: false,\n };\n session.activeSequences += 1;\n\n }\n return session[seqId];\n },\n\n deleteSessionSequence(id, seqId) {\n const seq = this.getSessionSequence(id, seqId);\n if (seq) {\n if (!seq.finished) {\n session.activeSequences -= 1;\n }\n delete this.sessions[id][seqId];\n }\n },\n\n isBusy(id) {\n const session = this.getSession(id);\n if (!session) return false;\n\n return session.activeSequences > 0;\n },\n\n onSessionSequenceFinish(id, seqId) {\n const session = this.getSession(id);\n const seq = session[seqId];\n if (seq && !seq.finished) {\n seq.finished = true;\n session.activeSequences -= 1;\n }\n }\n\n};\n\nexport default RoapCollection;\n"],"mappings":";;;;;;;;;;;;AAAA;;AAEA;AACA,IAAMA,cAAc,GAAG;EACrBC,QAAQ,EAAE,EADW;EAGrBC,UAHqB,sBAGVC,EAHU,EAGN;IACb,IAAI,CAAC,KAAKF,QAAL,CAAcE,EAAd,CAAL,EAAwB;MACtB,KAAKF,QAAL,CAAcE,EAAd,IAAoB;QAClBC,eAAe,EAAE;MADC,CAApB;IAGD;;IACD,OAAO,KAAKH,QAAL,CAAcE,EAAd,CAAP;EACD,CAVoB;EAYrBE,aAZqB,yBAYPF,EAZO,EAYH;IAChB,IAAI,KAAKD,UAAL,CAAgBC,EAAhB,CAAJ,EAAyB;MACvB,OAAO,KAAKF,QAAL,CAAcE,EAAd,CAAP;IACD;EACF,CAhBoB;EAkBrBG,kBAlBqB,8BAkBFH,EAlBE,EAkBEI,KAlBF,EAkBS;IAC5B,IAAMC,OAAO,GAAG,KAAKN,UAAL,CAAgBC,EAAhB,CAAhB;;IACA,IAAI,CAACK,OAAO,CAACD,KAAD,CAAZ,EAAqB;MACnBC,OAAO,CAACD,KAAD,CAAP,GAAiB;QACfE,KAAK,EAAEC,cAAA,CAAiBC,WAAjB,EADQ;QAEfC,QAAQ,EAAE;MAFK,CAAjB;MAIAJ,OAAO,CAACJ,eAAR,IAA2B,CAA3B;IAED;;IACD,OAAOI,OAAO,CAACD,KAAD,CAAd;EACD,CA7BoB;EA+BrBM,qBA/BqB,iCA+BCV,EA/BD,EA+BKI,KA/BL,EA+BY;IAC/B,IAAMO,GAAG,GAAG,KAAKR,kBAAL,CAAwBH,EAAxB,EAA4BI,KAA5B,CAAZ;;IACA,IAAIO,GAAJ,EAAS;MACP,IAAI,CAACA,GAAG,CAACF,QAAT,EAAmB;QACjBJ,OAAO,CAACJ,eAAR,IAA2B,CAA3B;MACD;;MACD,OAAO,KAAKH,QAAL,CAAcE,EAAd,EAAkBI,KAAlB,CAAP;IACD;EACF,CAvCoB;EAyCrBQ,MAzCqB,kBAyCdZ,EAzCc,EAyCV;IACT,IAAMK,OAAO,GAAG,KAAKN,UAAL,CAAgBC,EAAhB,CAAhB;IACA,IAAI,CAACK,OAAL,EAAc,OAAO,KAAP;IAEd,OAAOA,OAAO,CAACJ,eAAR,GAA0B,CAAjC;EACD,CA9CoB;EAgDrBY,uBAhDqB,mCAgDGb,EAhDH,EAgDOI,KAhDP,EAgDc;IACjC,IAAMC,OAAO,GAAG,KAAKN,UAAL,CAAgBC,EAAhB,CAAhB;IACA,IAAMW,GAAG,GAAGN,OAAO,CAACD,KAAD,CAAnB;;IACA,IAAIO,GAAG,IAAI,CAACA,GAAG,CAACF,QAAhB,EAA0B;MACxBE,GAAG,CAACF,QAAJ,GAAe,IAAf;MACAJ,OAAO,CAACJ,eAAR,IAA2B,CAA3B;IACD;EACF;AAvDoB,CAAvB;eA2DeJ,c"}
1
+ {"version":3,"names":["RoapCollection","sessions","getSession","id","activeSequences","deleteSession","getSessionSequence","seqId","session","state","RoapStateMachine","createState","finished","deleteSessionSequence","seq","isBusy","onSessionSequenceFinish"],"sources":["collection.ts"],"sourcesContent":["import RoapStateMachine from '../roap/state';\n\n/* eslint-disable */\nconst RoapCollection = {\n sessions: {},\n\n getSession(id) {\n if (!this.sessions[id]) {\n this.sessions[id] = {\n activeSequences: 0,\n };\n }\n return this.sessions[id];\n },\n\n deleteSession(id) {\n if (this.getSession(id)) {\n delete this.sessions[id];\n }\n },\n\n getSessionSequence(id, seqId) {\n const session = this.getSession(id);\n if (!session[seqId]) {\n session[seqId] = {\n state: RoapStateMachine.createState(),\n finished: false,\n };\n session.activeSequences += 1;\n\n }\n return session[seqId];\n },\n\n deleteSessionSequence(id, seqId) {\n const seq = this.getSessionSequence(id, seqId);\n if (seq) {\n if (!seq.finished) {\n // @ts-ignore\n session.activeSequences -= 1;\n }\n delete this.sessions[id][seqId];\n }\n },\n\n isBusy(id) {\n const session = this.getSession(id);\n if (!session) return false;\n\n return session.activeSequences > 0;\n },\n\n onSessionSequenceFinish(id, seqId) {\n const session = this.getSession(id);\n const seq = session[seqId];\n if (seq && !seq.finished) {\n seq.finished = true;\n session.activeSequences -= 1;\n }\n }\n\n};\n\nexport default RoapCollection;\n"],"mappings":";;;;;;;;;;;;AAAA;;AAEA;AACA,IAAMA,cAAc,GAAG;EACrBC,QAAQ,EAAE,EADW;EAGrBC,UAHqB,sBAGVC,EAHU,EAGN;IACb,IAAI,CAAC,KAAKF,QAAL,CAAcE,EAAd,CAAL,EAAwB;MACtB,KAAKF,QAAL,CAAcE,EAAd,IAAoB;QAClBC,eAAe,EAAE;MADC,CAApB;IAGD;;IACD,OAAO,KAAKH,QAAL,CAAcE,EAAd,CAAP;EACD,CAVoB;EAYrBE,aAZqB,yBAYPF,EAZO,EAYH;IAChB,IAAI,KAAKD,UAAL,CAAgBC,EAAhB,CAAJ,EAAyB;MACvB,OAAO,KAAKF,QAAL,CAAcE,EAAd,CAAP;IACD;EACF,CAhBoB;EAkBrBG,kBAlBqB,8BAkBFH,EAlBE,EAkBEI,KAlBF,EAkBS;IAC5B,IAAMC,OAAO,GAAG,KAAKN,UAAL,CAAgBC,EAAhB,CAAhB;;IACA,IAAI,CAACK,OAAO,CAACD,KAAD,CAAZ,EAAqB;MACnBC,OAAO,CAACD,KAAD,CAAP,GAAiB;QACfE,KAAK,EAAEC,cAAA,CAAiBC,WAAjB,EADQ;QAEfC,QAAQ,EAAE;MAFK,CAAjB;MAIAJ,OAAO,CAACJ,eAAR,IAA2B,CAA3B;IAED;;IACD,OAAOI,OAAO,CAACD,KAAD,CAAd;EACD,CA7BoB;EA+BrBM,qBA/BqB,iCA+BCV,EA/BD,EA+BKI,KA/BL,EA+BY;IAC/B,IAAMO,GAAG,GAAG,KAAKR,kBAAL,CAAwBH,EAAxB,EAA4BI,KAA5B,CAAZ;;IACA,IAAIO,GAAJ,EAAS;MACP,IAAI,CAACA,GAAG,CAACF,QAAT,EAAmB;QACjB;QACAJ,OAAO,CAACJ,eAAR,IAA2B,CAA3B;MACD;;MACD,OAAO,KAAKH,QAAL,CAAcE,EAAd,EAAkBI,KAAlB,CAAP;IACD;EACF,CAxCoB;EA0CrBQ,MA1CqB,kBA0CdZ,EA1Cc,EA0CV;IACT,IAAMK,OAAO,GAAG,KAAKN,UAAL,CAAgBC,EAAhB,CAAhB;IACA,IAAI,CAACK,OAAL,EAAc,OAAO,KAAP;IAEd,OAAOA,OAAO,CAACJ,eAAR,GAA0B,CAAjC;EACD,CA/CoB;EAiDrBY,uBAjDqB,mCAiDGb,EAjDH,EAiDOI,KAjDP,EAiDc;IACjC,IAAMC,OAAO,GAAG,KAAKN,UAAL,CAAgBC,EAAhB,CAAhB;IACA,IAAMW,GAAG,GAAGN,OAAO,CAACD,KAAD,CAAnB;;IACA,IAAIO,GAAG,IAAI,CAACA,GAAG,CAACF,QAAhB,EAA0B;MACxBE,GAAG,CAACF,QAAJ,GAAe,IAAf;MACAJ,OAAO,CAACJ,eAAR,IAA2B,CAA3B;IACD;EACF;AAxDoB,CAAvB;eA4DeJ,c"}
@@ -16,12 +16,16 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
16
16
 
17
17
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
18
18
 
19
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
20
+
19
21
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
20
22
 
21
23
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
22
24
 
23
25
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
24
26
 
27
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
28
+
25
29
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
26
30
 
27
31
  var _webexCore = require("@webex/webex-core");
@@ -116,6 +120,12 @@ var RoapHandler = /*#__PURE__*/function (_StatelessWebexPlugin) {
116
120
 
117
121
  (0, _classCallCheck2.default)(this, RoapHandler);
118
122
  _this = _super.call(this, {}, options);
123
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "attrs", void 0);
124
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastRoapMessage", void 0);
125
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "options", void 0);
126
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roapAnswer", void 0);
127
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roapFinished", void 0);
128
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roapOk", void 0);
119
129
  _this.attrs = attrs;
120
130
  _this.options = options;
121
131
  _this.roapOk = roapOk;
@@ -209,7 +219,8 @@ var RoapHandler = /*#__PURE__*/function (_StatelessWebexPlugin) {
209
219
  _loggerProxy.default.logger.log('Roap:handler#perform --> Roap State remote offer won after GLARE.');
210
220
  }
211
221
 
212
- session.state.step(_constants.ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);
222
+ session.state.step(_constants.ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action); // @ts-ignore
223
+
213
224
  this.perform(session, meeting);
214
225
  break;
215
226
 
@@ -319,7 +330,8 @@ var RoapHandler = /*#__PURE__*/function (_StatelessWebexPlugin) {
319
330
  seq = action.msg.seq;
320
331
  }
321
332
 
322
- var session = _collection.default.getSessionSequence(correlationId, seq);
333
+ var session = _collection.default.getSessionSequence(correlationId, seq); // @ts-ignore
334
+
323
335
 
324
336
  var meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);
325
337
 
@@ -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.js"],"sourcesContent":["/* no-param-reassign */\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';\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 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, meeting, action) {\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 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, session, action, meeting, prefix) {\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, action, meeting, correlationId) {\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) {\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 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\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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"}
@@ -97,6 +97,12 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
97
97
  * @memberof Roap
98
98
  */
99
99
 
100
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "attrs", void 0);
101
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastRoapOffer", void 0);
102
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "options", void 0);
103
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roapHandler", void 0);
104
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roapRequest", void 0);
105
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "turnDiscovery", void 0);
100
106
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sendRoapCallRequest", function (options) {
101
107
  var meeting = options.meeting;
102
108
  var roapMessage = {
@@ -167,6 +173,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
167
173
  * @private
168
174
  * @memberof Roap
169
175
  */
176
+ // @ts-ignore
170
177
 
171
178
  _this.roapRequest = new _request.default({}, _options);
172
179
  /**
@@ -243,6 +250,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
243
250
  var _this2 = this;
244
251
 
245
252
  return _promise.default.resolve().then(function () {
253
+ // @ts-ignore
246
254
  var meeting = _this2.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);
247
255
 
248
256
  var roapMessage = {
@@ -291,6 +299,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
291
299
  value: function sendRoapAnswer(options) {
292
300
  var _this3 = this;
293
301
 
302
+ // @ts-ignore
294
303
  var meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);
295
304
  var roapMessage = {
296
305
  messageType: _constants.ROAP.ROAP_TYPES.ANSWER,
@@ -425,7 +434,8 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
425
434
  * @memberof Roap
426
435
  */
427
436
  function roapFinished(correlationId, sequenceId) {
428
- _collection.default.onSessionSequenceFinish(correlationId, sequenceId);
437
+ _collection.default.onSessionSequenceFinish(correlationId, sequenceId); // @ts-ignore
438
+
429
439
 
430
440
  var meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);
431
441
  meeting.mediaNegotiatedEvent();
@@ -1 +1 @@
1
- {"version":3,"names":["Roap","attrs","options","meeting","roapMessage","messageType","ROAP","ROAP_TYPES","OFFER","sdps","sdp","version","ROAP_VERSION","seq","roapSeq","tieBreaker","roapHandler","submit","type","SEND_ROAP_MSG","msg","correlationId","roapBody","localMedias","localSdp","roapRequest","attachRechabilityData","audioMuted","isAudioMuted","videoMuted","isVideoMuted","MeetingUtil","joinMeetingOptions","then","locus","SEND_ROAP_MSG_SUCCESS","setRoapSeq","RoapHandler","sendRoapOK","bind","sendRoapAnswer","roapFinished","RoapRequest","lastRoapOffer","turnDiscovery","TurnDiscovery","data","message","LoggerProxy","logger","log","TURN_DISCOVERY_RESPONSE","handleTurnDiscoveryResponse","RECEIVE_ROAP_MSG","RECEIVE_CALL_LEAVE","resolve","webex","meetings","meetingCollection","getByKey","OK","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","ANSWER","session","errorType","ERROR","reconnect","sendEmptyMediaId","config","experimental","enableTurnDiscovery","mediaConnections","updateMediaConnections","sequenceId","RoapCollection","onSessionSequenceFinish","mediaNegotiatedEvent","isBusy","processNextQueuedMediaUpdate","isReconnecting","doTurnDiscovery","StatelessWebexPlugin"],"sources":["index.js"],"sourcesContent":["import {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\nimport TurnDiscovery from './turnDiscovery';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs, options) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(this.attrs, this.options, this.sendRoapOK.bind(this), this.sendRoapAnswer.bind(this), this.roapFinished.bind(this));\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n roapEvent(data) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(`Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`);\n\n if (msg.messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n // turn discovery is not part of normal roap protocol and so we are not handling it\n // through the usual roap state machine\n this.turnDiscovery.handleTurnDiscoveryResponse(msg);\n }\n else {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId\n });\n }\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n stop(correlationId, seq) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n sendRoapOK(options) {\n return Promise.resolve().then(() => {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapAnswer(options) {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: options.audioMuted,\n videoMuted: options.videoMuted,\n meetingId: meeting.id\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapError(session, locus, errorType) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n const sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapCallRequest = (options) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!meeting.isAudioMuted(),\n videoMuted: !!meeting.isVideoMuted()\n }))\n // mediaId: meeting.mediaId\n }\n ]\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody})\n .then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n };\n\n /**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\n roapFinished(correlationId, sequenceId) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting, isReconnecting) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Roap","attrs","options","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"}
@@ -120,6 +120,7 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
120
120
  while (1) {
121
121
  switch (_context.prev = _context.next) {
122
122
  case 0:
123
+ // @ts-ignore
123
124
  deviceUrl = _this.webex.internal.device.url;
124
125
  url = '';
125
126
  body = {
@@ -158,6 +159,7 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
158
159
  return _this.webex.internal.services.waitForCatalog('postauth');
159
160
 
160
161
  case 11:
162
+ // @ts-ignore
161
163
  url = "".concat(_this.webex.internal.services.get('locus'), "/").concat(_constants.LOCI, "/").concat(_constants.CALL);
162
164
  body.invitee = {
163
165
  address: options.sipTarget
@@ -235,7 +237,8 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
235
237
  _loggerProxy.default.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
236
238
  }
237
239
 
238
- var mediaUrl = "".concat(locusSelfUrl, "/").concat(_constants.MEDIA);
240
+ var mediaUrl = "".concat(locusSelfUrl, "/").concat(_constants.MEDIA); // @ts-ignore
241
+
239
242
  var deviceUrl = this.webex.internal.device.url;
240
243
 
241
244
  _loggerProxy.default.logger.info("Roap:request#sendRoap --> ".concat(mediaUrl, " \n ").concat(roapMessage.messageType, " \n seq:").concat(roapMessage.seq));
@@ -243,7 +246,8 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
243
246
  _metrics.default.postEvent({
244
247
  event: _config.eventType.MEDIA_REQUEST,
245
248
  meetingId: meetingId
246
- });
249
+ }); // @ts-ignore
250
+
247
251
 
248
252
  return this.webex.request({
249
253
  uri: mediaUrl,
@@ -251,6 +255,7 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
251
255
  body: {
252
256
  device: {
253
257
  url: deviceUrl,
258
+ // @ts-ignore
254
259
  deviceType: this.config.meetings.deviceType
255
260
  },
256
261
  correlationId: correlationId,