@webex/plugin-meetings 2.60.0-next.1 → 2.60.0-next.10

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 (185) hide show
  1. package/dist/annotation/annotation.types.d.ts +42 -0
  2. package/dist/annotation/constants.d.ts +31 -0
  3. package/dist/annotation/index.d.ts +117 -0
  4. package/dist/breakouts/breakout.d.ts +8 -0
  5. package/dist/breakouts/breakout.js +1 -1
  6. package/dist/breakouts/collection.d.ts +5 -0
  7. package/dist/breakouts/edit-lock-error.d.ts +15 -0
  8. package/dist/breakouts/events.d.ts +8 -0
  9. package/dist/breakouts/index.d.ts +5 -0
  10. package/dist/breakouts/index.js +1 -1
  11. package/dist/breakouts/request.d.ts +22 -0
  12. package/dist/breakouts/utils.d.ts +15 -0
  13. package/dist/common/browser-detection.d.ts +9 -0
  14. package/dist/common/collection.d.ts +48 -0
  15. package/dist/common/config.d.ts +2 -0
  16. package/dist/common/errors/captcha-error.d.ts +15 -0
  17. package/dist/common/errors/intent-to-join.d.ts +16 -0
  18. package/dist/common/errors/join-meeting.d.ts +17 -0
  19. package/dist/common/errors/media.d.ts +15 -0
  20. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  21. package/dist/common/errors/parameter.d.ts +15 -0
  22. package/dist/common/errors/password-error.d.ts +15 -0
  23. package/dist/common/errors/permission.d.ts +14 -0
  24. package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
  25. package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
  26. package/dist/common/errors/reconnection.d.ts +15 -0
  27. package/dist/common/errors/stats.d.ts +15 -0
  28. package/dist/common/errors/webex-errors.d.ts +93 -0
  29. package/dist/common/errors/webex-meetings-error.d.ts +20 -0
  30. package/dist/common/events/events-scope.d.ts +17 -0
  31. package/dist/common/events/events.d.ts +12 -0
  32. package/dist/common/events/trigger-proxy.d.ts +2 -0
  33. package/dist/common/events/util.d.ts +2 -0
  34. package/dist/common/logs/logger-config.d.ts +2 -0
  35. package/dist/common/logs/logger-proxy.d.ts +2 -0
  36. package/dist/common/logs/request.d.ts +36 -0
  37. package/dist/common/queue.d.ts +34 -0
  38. package/dist/config.d.ts +71 -0
  39. package/dist/constants.d.ts +1072 -0
  40. package/dist/constants.js +1 -1
  41. package/dist/constants.js.map +1 -1
  42. package/dist/controls-options-manager/constants.d.ts +4 -0
  43. package/dist/controls-options-manager/enums.d.ts +15 -0
  44. package/dist/controls-options-manager/enums.js +2 -1
  45. package/dist/controls-options-manager/enums.js.map +1 -1
  46. package/dist/controls-options-manager/index.d.ts +136 -0
  47. package/dist/controls-options-manager/types.d.ts +43 -0
  48. package/dist/controls-options-manager/util.d.ts +1 -0
  49. package/dist/index.d.ts +7 -0
  50. package/dist/interpretation/collection.d.ts +5 -0
  51. package/dist/interpretation/index.d.ts +5 -0
  52. package/dist/interpretation/index.js +1 -1
  53. package/dist/interpretation/siLanguage.d.ts +5 -0
  54. package/dist/interpretation/siLanguage.js +1 -1
  55. package/dist/locus-info/controlsUtils.d.ts +2 -0
  56. package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
  57. package/dist/locus-info/fullState.d.ts +2 -0
  58. package/dist/locus-info/hostUtils.d.ts +2 -0
  59. package/dist/locus-info/index.d.ts +322 -0
  60. package/dist/locus-info/infoUtils.d.ts +2 -0
  61. package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
  62. package/dist/locus-info/parser.d.ts +272 -0
  63. package/dist/locus-info/parser.js +5 -5
  64. package/dist/locus-info/parser.js.map +1 -1
  65. package/dist/locus-info/selfUtils.d.ts +2 -0
  66. package/dist/media/index.d.ts +34 -0
  67. package/dist/media/index.js +6 -5
  68. package/dist/media/index.js.map +1 -1
  69. package/dist/media/properties.d.ts +93 -0
  70. package/dist/media/util.d.ts +2 -0
  71. package/dist/mediaQualityMetrics/config.d.ts +237 -0
  72. package/dist/mediaQualityMetrics/config.js +1 -202
  73. package/dist/mediaQualityMetrics/config.js.map +1 -1
  74. package/dist/meeting/in-meeting-actions.d.ts +167 -0
  75. package/dist/meeting/in-meeting-actions.js +4 -0
  76. package/dist/meeting/in-meeting-actions.js.map +1 -1
  77. package/dist/meeting/index.d.ts +1719 -0
  78. package/dist/meeting/index.js +288 -155
  79. package/dist/meeting/index.js.map +1 -1
  80. package/dist/meeting/locusMediaRequest.d.ts +74 -0
  81. package/dist/meeting/muteState.d.ts +184 -0
  82. package/dist/meeting/request.d.ts +290 -0
  83. package/dist/meeting/request.type.d.ts +11 -0
  84. package/dist/meeting/state.d.ts +9 -0
  85. package/dist/meeting/util.d.ts +103 -0
  86. package/dist/meeting-info/collection.d.ts +20 -0
  87. package/dist/meeting-info/index.d.ts +69 -0
  88. package/dist/meeting-info/meeting-info-v2.d.ts +123 -0
  89. package/dist/meeting-info/meeting-info-v2.js +3 -0
  90. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  91. package/dist/meeting-info/request.d.ts +22 -0
  92. package/dist/meeting-info/util.d.ts +2 -0
  93. package/dist/meeting-info/utilv2.d.ts +2 -0
  94. package/dist/meeting-info/utilv2.js +14 -29
  95. package/dist/meeting-info/utilv2.js.map +1 -1
  96. package/dist/meetings/collection.d.ts +40 -0
  97. package/dist/meetings/collection.js +17 -0
  98. package/dist/meetings/collection.js.map +1 -1
  99. package/dist/meetings/index.d.ts +378 -0
  100. package/dist/meetings/index.js +30 -9
  101. package/dist/meetings/index.js.map +1 -1
  102. package/dist/meetings/meetings.types.d.ts +4 -0
  103. package/dist/meetings/request.d.ts +27 -0
  104. package/dist/meetings/util.d.ts +18 -0
  105. package/dist/member/index.d.ts +160 -0
  106. package/dist/member/member.types.d.ts +11 -0
  107. package/dist/member/types.d.ts +32 -0
  108. package/dist/member/util.d.ts +2 -0
  109. package/dist/members/collection.d.ts +29 -0
  110. package/dist/members/index.d.ts +353 -0
  111. package/dist/members/request.d.ts +114 -0
  112. package/dist/members/types.d.ts +25 -0
  113. package/dist/members/util.d.ts +215 -0
  114. package/dist/metrics/constants.d.ts +68 -0
  115. package/dist/metrics/constants.js +3 -0
  116. package/dist/metrics/constants.js.map +1 -1
  117. package/dist/metrics/index.d.ts +45 -0
  118. package/dist/multistream/mediaRequestManager.d.ts +118 -0
  119. package/dist/multistream/receiveSlot.d.ts +68 -0
  120. package/dist/multistream/receiveSlotManager.d.ts +56 -0
  121. package/dist/multistream/remoteMedia.d.ts +72 -0
  122. package/dist/multistream/remoteMediaGroup.d.ts +47 -0
  123. package/dist/multistream/remoteMediaManager.d.ts +285 -0
  124. package/dist/multistream/sendSlotManager.d.ts +61 -0
  125. package/dist/networkQualityMonitor/index.d.ts +70 -0
  126. package/dist/personal-meeting-room/index.d.ts +47 -0
  127. package/dist/personal-meeting-room/request.d.ts +14 -0
  128. package/dist/personal-meeting-room/util.d.ts +2 -0
  129. package/dist/reachability/index.d.ts +194 -0
  130. package/dist/reachability/request.d.ts +39 -0
  131. package/dist/reactions/constants.d.ts +3 -0
  132. package/dist/reactions/reactions.d.ts +4 -0
  133. package/dist/reactions/reactions.type.d.ts +52 -0
  134. package/dist/reconnection-manager/index.d.ts +136 -0
  135. package/dist/reconnection-manager/index.js +27 -28
  136. package/dist/reconnection-manager/index.js.map +1 -1
  137. package/dist/recording-controller/enums.d.ts +7 -0
  138. package/dist/recording-controller/index.d.ts +207 -0
  139. package/dist/recording-controller/util.d.ts +14 -0
  140. package/dist/roap/index.d.ts +78 -0
  141. package/dist/roap/request.d.ts +41 -0
  142. package/dist/roap/turnDiscovery.d.ts +92 -0
  143. package/dist/rtcMetrics/constants.d.ts +4 -0
  144. package/dist/rtcMetrics/index.d.ts +54 -0
  145. package/dist/rtcMetrics/index.js +25 -0
  146. package/dist/rtcMetrics/index.js.map +1 -1
  147. package/dist/statsAnalyzer/global.d.ts +36 -0
  148. package/dist/statsAnalyzer/index.d.ts +191 -0
  149. package/dist/statsAnalyzer/index.js +53 -146
  150. package/dist/statsAnalyzer/index.js.map +1 -1
  151. package/dist/statsAnalyzer/mqaUtil.d.ts +24 -0
  152. package/dist/statsAnalyzer/mqaUtil.js +11 -12
  153. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  154. package/dist/transcription/index.d.ts +64 -0
  155. package/dist/webinar/collection.d.ts +16 -0
  156. package/dist/webinar/index.d.ts +5 -0
  157. package/dist/webinar/index.js +1 -1
  158. package/package.json +26 -27
  159. package/src/constants.ts +10 -4
  160. package/src/controls-options-manager/enums.ts +2 -0
  161. package/src/locus-info/parser.ts +6 -6
  162. package/src/media/index.ts +5 -5
  163. package/src/mediaQualityMetrics/config.ts +0 -135
  164. package/src/meeting/in-meeting-actions.ts +8 -0
  165. package/src/meeting/index.ts +263 -125
  166. package/src/meeting-info/meeting-info-v2.ts +4 -0
  167. package/src/meeting-info/utilv2.ts +6 -19
  168. package/src/meetings/collection.ts +13 -0
  169. package/src/meetings/index.ts +28 -10
  170. package/src/metrics/constants.ts +3 -0
  171. package/src/reconnection-manager/index.ts +63 -68
  172. package/src/rtcMetrics/index.ts +24 -0
  173. package/src/statsAnalyzer/index.ts +68 -216
  174. package/src/statsAnalyzer/mqaUtil.ts +17 -22
  175. package/test/unit/spec/media/index.ts +20 -4
  176. package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
  177. package/test/unit/spec/meeting/index.js +1376 -189
  178. package/test/unit/spec/meeting/muteState.js +2 -1
  179. package/test/unit/spec/meeting-info/meetinginfov2.js +28 -0
  180. package/test/unit/spec/meetings/collection.js +12 -0
  181. package/test/unit/spec/meetings/index.js +382 -118
  182. package/test/unit/spec/member/util.js +0 -31
  183. package/test/unit/spec/reconnection-manager/index.js +42 -12
  184. package/test/unit/spec/rtcMetrics/index.ts +20 -0
  185. package/test/unit/spec/stats-analyzer/index.js +12 -2
@@ -1 +1 @@
1
- {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_triggerProxy","_constants","_constants2","_reconnection","_reconnectionInProgress","_metrics","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","NeedsRetryError","_Error","_inherits2","_super","_classCallCheck2","_createClass2","_wrapNativeSuper2","Error","NeedsRejoinError","_Error2","_super2","_ref","_this","wasSharing","_ref$error","error","_defineProperty2","_assertThisInitialized2","ReconnectionManager","exports","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","key","value","resetReconnectionTimer","clearTimeout","iceReconnected","LoggerProxy","logger","log","waitForIceReconnect","_this2","_promise","reject","setTimeout","concat","cleanUp","_stopLocalShareStream","_asyncToGenerator2","_regenerator","mark","_callee","reason","wrap","_callee$","_context","prev","next","unpublishStreams","mediaProperties","shareVideoStream","shareAudioStream","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","stop","stopLocalShareStream","_x","isReconnectInProgress","IN_PROGRESS","validate","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","_reconnect","_callee2","_this3","_ref2","_ref2$networkDisconne","networkDisconnect","_ref2$networkRetry","networkRetry","_args2","_callee2$","_context2","length","id","t0","internal","newMetrics","submitClientEvent","name","options","meetingId","abrupt","executeReconnection","then","payload","recoveredBy","catch","reconnectError","reconnect","message","errors","category","errorCode","fatal","shownToUser","rejoinMeeting","_executeReconnection","_callee3","_ref3","_ref3$networkDisconne","media","_callee3$","_context3","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","device","url","FAILURE","credentials","isUnverifiedGuest","meetings","syncMeetings","t1","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","sent","t2","_x2","_rejoinMeeting","_callee4","_args4","_callee4$","_context4","join","rejoin","MEETING_REJOIN","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","_reconnectMedia","_callee5","turnServerResult","iceServers","_callee5$","_context5","roap","doTurnDiscovery","turnServerInfo","push","urls","username","credential","password","webrtcMediaConnection","isMultistream","_values","mediaRequestManagers","forEach","mediaRequestManager","clearPreviousRequests","commit","_reconnectMercuryWebSocket","_callee6","_callee6$","_context6","mercury","connected","disconnect","connect"],"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 Metrics from '../metrics';\nimport Meeting from '../meeting';\nimport {MediaRequestManager} from '../multistream/mediaRequestManager';\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 // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\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\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.resetReconnectionTimer();\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(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\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 } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\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 * Stop the local share stream.\n *\n * @param {string} reason a {@link SHARE_STOPPED_REASON}\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private async stopLocalShareStream(reason: string) {\n await this.meeting.unpublishStreams([\n this.meeting.mediaProperties.shareVideoStream,\n this.meeting.mediaProperties.shareAudioStream,\n ]);\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'stopLocalShareStream',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason,\n }\n );\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\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(\n 'ReconnectionManager:index#validate --> Reconnection already in progress.'\n );\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(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n } catch (error) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection unable to begin.',\n error\n );\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.reconnecting',\n options: {\n meetingId: this.meeting.id,\n },\n });\n }\n\n return this.executeReconnection({networkDisconnect})\n .then(() => {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect success metric.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.recovered',\n payload: {\n recoveredBy: 'new',\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\n })\n .catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\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(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.aborted',\n payload: {\n errors: [\n {\n category: 'expected',\n errorCode: 2008,\n fatal: true,\n name: 'media-engine',\n shownToUser: false,\n },\n ],\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\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 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(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);\n }\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',\n this.webex.internal.device.url\n );\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw error;\n }\n }\n\n if (!this.webex.credentials.isUnverifiedGuest) {\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings();\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\n throw new NeedsRetryError(syncError);\n }\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(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive.');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\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(\n 'ReconnectionManager:index#executeReconnection --> Media reestablished'\n );\n this.status = RECONNECTION.STATE.COMPLETE;\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Media reestablishment failed'\n );\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(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEETING_REJOIN);\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media'\n );\n\n // do the TURN server discovery again and ignore reachability results since the TURN server might change\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true, true);\n\n const iceServers = [];\n\n if (turnServerResult.turnServerInfo) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.url,\n username: turnServerResult.turnServerInfo.username || '',\n credential: turnServerResult.turnServerInfo.password || '',\n });\n }\n\n await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);\n\n // resend media requests\n if (this.meeting.isMultistream) {\n Object.values(this.meeting.mediaRequestManagers).forEach(\n (mediaRequestManager: MediaRequestManager) => {\n mediaRequestManager.clearPreviousRequests();\n mediaRequestManager.commit();\n }\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(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'\n );\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'\n );\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info(\n '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(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',\n disconnectError\n );\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'\n );\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'\n );\n } catch (connectError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',\n connectError\n );\n\n throw connectError;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_triggerProxy","_constants","_constants2","_reconnectionInProgress","_metrics","_reconnection","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","NeedsRetryError","_Error","_inherits2","_super","_classCallCheck2","_createClass2","_wrapNativeSuper2","Error","NeedsRejoinError","_Error2","_super2","_ref","_this","wasSharing","_ref$error","error","_defineProperty2","_assertThisInitialized2","ReconnectionManager","exports","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","key","value","resetReconnectionTimer","clearTimeout","iceReconnected","LoggerProxy","logger","log","waitForIceReconnect","_this2","_promise","reject","setTimeout","concat","cleanUp","_stopLocalShareStream","_asyncToGenerator2","_regenerator","mark","_callee","reason","wrap","_callee$","_context","prev","next","unpublishStreams","mediaProperties","shareVideoStream","shareAudioStream","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","stop","stopLocalShareStream","_x","isReconnectInProgress","IN_PROGRESS","setStatus","validate","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","_reconnect","_callee2","_this3","_ref2","_ref2$networkDisconne","networkDisconnect","_ref2$networkRetry","networkRetry","_args2","_callee2$","_context2","length","id","t0","internal","newMetrics","submitClientEvent","name","options","meetingId","abrupt","executeReconnection","catch","reconnectError","reconnect","message","payload","errors","category","errorCode","fatal","shownToUser","rejoinMeeting","_executeReconnection","_callee3","_ref3","_ref3$networkDisconne","media","_callee3$","_context3","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","device","url","FAILURE","credentials","isUnverifiedGuest","meetings","syncMeetings","t1","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","sent","t2","_x2","_rejoinMeeting","_callee4","_args4","_callee4$","_context4","join","rejoin","MEETING_REJOIN","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","_reconnectMedia","_callee5","turnServerResult","iceServers","_callee5$","_context5","roap","doTurnDiscovery","turnServerInfo","push","urls","username","credential","password","webrtcMediaConnection","isMultistream","_values","mediaRequestManagers","forEach","mediaRequestManager","clearPreviousRequests","commit","_reconnectMercuryWebSocket","_callee6","_callee6$","_context6","mercury","connected","disconnect","connect"],"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 RECONNECTION_STATE,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectInProgress from '../common/errors/reconnection-in-progress';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\nimport {MediaRequestManager} from '../multistream/mediaRequestManager';\nimport ReconnectionError from '../common/errors/reconnection';\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 {RECONNECTION_STATE}\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 // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\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\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.resetReconnectionTimer();\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(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\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 } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\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 }\n\n /**\n * Stop the local share stream.\n *\n * @param {string} reason a {@link SHARE_STOPPED_REASON}\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private async stopLocalShareStream(reason: string) {\n await this.meeting.unpublishStreams([\n this.meeting.mediaProperties.shareVideoStream,\n this.meeting.mediaProperties.shareAudioStream,\n ]);\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'stopLocalShareStream',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason,\n }\n );\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\n }\n\n /**\n * Sets the reconnection status\n *\n * @public\n * @param {RECONNECTION_STATE} status\n * @memberof ReconnectionManager\n * @returns {undefined}\n */\n public setStatus(status: RECONNECTION_STATE) {\n this.status = status;\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(\n 'ReconnectionManager:index#validate --> Reconnection already in progress.'\n );\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(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n } catch (error) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection unable to begin.',\n error\n );\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.reconnecting',\n options: {\n meetingId: this.meeting.id,\n },\n });\n }\n\n return this.executeReconnection({networkDisconnect}).catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\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(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.aborted',\n payload: {\n errors: [\n {\n category: 'expected',\n errorCode: 2008,\n fatal: true,\n name: 'media-engine',\n shownToUser: false,\n },\n ],\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\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 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(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);\n }\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',\n this.webex.internal.device.url\n );\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw error;\n }\n }\n\n if (!this.webex.credentials.isUnverifiedGuest) {\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings();\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\n throw new NeedsRetryError(syncError);\n }\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(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive.');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\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(\n 'ReconnectionManager:index#executeReconnection --> webRTC media connection renewed and local sdp offer sent'\n );\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> failed to renew webRTC media connection or initiate offer'\n );\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(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEETING_REJOIN);\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> do turn discovery');\n\n // do the TURN server discovery again and ignore reachability results since the TURN server might change\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true, true);\n\n const iceServers = [];\n\n if (turnServerResult.turnServerInfo) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.url,\n username: turnServerResult.turnServerInfo.username || '',\n credential: turnServerResult.turnServerInfo.password || '',\n });\n }\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> renew webRTC media connection and send local sdp offer'\n );\n\n await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);\n\n // resend media requests\n if (this.meeting.isMultistream) {\n Object.values(this.meeting.mediaRequestManagers).forEach(\n (mediaRequestManager: MediaRequestManager) => {\n mediaRequestManager.clearPreviousRequests();\n mediaRequestManager.commit();\n }\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(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'\n );\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'\n );\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info(\n '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(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',\n disconnectError\n );\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'\n );\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'\n );\n } catch (connectError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',\n connectError\n );\n\n throw connectError;\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ declare enum RecordingAction {
2
+ Start = "Start",
3
+ Stop = "Stop",
4
+ Pause = "Pause",
5
+ Resume = "Resume"
6
+ }
7
+ export default RecordingAction;
@@ -0,0 +1,207 @@
1
+ import { SELF_POLICY } from '../constants';
2
+ import MeetingRequest from '../meeting/request';
3
+ /**
4
+ * @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting
5
+ * @export
6
+ * @private
7
+ * @class Recording
8
+ */
9
+ export default class RecordingController {
10
+ /**
11
+ * @instance
12
+ * @type {MeetingRequest}
13
+ * @private
14
+ * @memberof RecordingController
15
+ */
16
+ private request;
17
+ /**
18
+ * @instance
19
+ * @type {Array}
20
+ * @private
21
+ * @memberof RecordingInfo
22
+ */
23
+ private displayHints;
24
+ /**
25
+ * @instance
26
+ * @type {Object}
27
+ * @private
28
+ * @memberof RecordingInfo
29
+ */
30
+ private selfUserPolicies;
31
+ /**
32
+ * @instance
33
+ * @type {string}
34
+ * @private
35
+ * @memberof RecordingInfo
36
+ */
37
+ private serviceUrl;
38
+ /**
39
+ * @instance
40
+ * @type {string}
41
+ * @private
42
+ * @memberof RecordingInfo
43
+ */
44
+ private sessionId;
45
+ /**
46
+ * @instance
47
+ * @type {string}
48
+ * @private
49
+ * @memberof RecordingInfo
50
+ */
51
+ private locusUrl;
52
+ /**
53
+ * @instance
54
+ * @type {string}
55
+ * @private
56
+ * @memberof RecordingInfo
57
+ */
58
+ private locusId;
59
+ /**
60
+ * @param {MeetingRequest} request
61
+ * @param {Object} options
62
+ * @constructor
63
+ * @memberof RecordingController
64
+ */
65
+ constructor(request: MeetingRequest, options?: {
66
+ serviceUrl?: string;
67
+ sessionId: string;
68
+ locusUrl: string;
69
+ displayHints?: Array<string>;
70
+ });
71
+ /**
72
+ * @param {MeetingRequest} request
73
+ * @returns {void}
74
+ * @private
75
+ * @memberof RecordingController
76
+ */
77
+ private initialize;
78
+ /**
79
+ * @param {Object} options
80
+ * @returns {void}
81
+ * @public
82
+ * @memberof RecordingController
83
+ */
84
+ set(options?: {
85
+ serviceUrl?: string;
86
+ sessionId: string;
87
+ locusUrl: string;
88
+ displayHints?: Array<string>;
89
+ }): void;
90
+ /**
91
+ * @param {string} url
92
+ * @returns {void}
93
+ * @public
94
+ * @memberof RecordingController
95
+ */
96
+ setLocusUrl(url: string): void;
97
+ /**
98
+ * @param {Array} hints
99
+ * @returns {void}
100
+ * @public
101
+ * @memberof RecordingController
102
+ */
103
+ setDisplayHints(hints: Array<string>): void;
104
+ /**
105
+ * @param {Object} selfUserPolicies
106
+ * @returns {void}
107
+ * @public
108
+ * @memberof RecordingController
109
+ */
110
+ setUserPolicy(selfUserPolicies: Record<SELF_POLICY, boolean>): void;
111
+ /**
112
+ * @param {string} id
113
+ * @returns {void}
114
+ * @public
115
+ * @memberof RecordingController
116
+ */
117
+ setSessionId(id: string): void;
118
+ /**
119
+ * @param {string} url
120
+ * @returns {void}
121
+ * @public
122
+ * @memberof RecordingController
123
+ */
124
+ setServiceUrl(url: string): void;
125
+ /**
126
+ * @returns {string}
127
+ * @public
128
+ * @memberof RecordingController
129
+ */
130
+ getLocusUrl(): string;
131
+ /**
132
+ * @returns {string}
133
+ * @public
134
+ * @memberof RecordingController
135
+ */
136
+ getLocusId(): string;
137
+ /**
138
+ * @returns {string}
139
+ * @public
140
+ * @memberof RecordingController
141
+ */
142
+ getSessionId(): string;
143
+ /**
144
+ * @returns {string}
145
+ * @public
146
+ * @memberof RecordingController
147
+ */
148
+ getServiceUrl(): string;
149
+ /**
150
+ * @returns {Array}
151
+ * @public
152
+ * @memberof RecordingController
153
+ */
154
+ getDisplayHints(): string[];
155
+ /**
156
+ * @param {Object} options
157
+ * @returns {void}
158
+ * @private
159
+ * @memberof RecordingController
160
+ */
161
+ private extract;
162
+ /**
163
+ * @param {RecordingAction} action
164
+ * @private
165
+ * @memberof RecordingController
166
+ * @returns {Promise}
167
+ */
168
+ private recordingService;
169
+ /**
170
+ * @param {RecordingAction} action
171
+ * @private
172
+ * @memberof RecordingController
173
+ * @returns {Promise}
174
+ */
175
+ private recordingControls;
176
+ /**
177
+ * @param {RecordingAction} action
178
+ * @private
179
+ * @memberof RecordingController
180
+ * @returns {Promise}
181
+ */
182
+ private recordingFacade;
183
+ /**
184
+ * @private
185
+ * @memberof RecordingController
186
+ * @returns {Promise}
187
+ */
188
+ startRecording(): Promise<any>;
189
+ /**
190
+ * @private
191
+ * @memberof RecordingController
192
+ * @returns {Promise}
193
+ */
194
+ stopRecording(): Promise<any>;
195
+ /**
196
+ * @private
197
+ * @memberof RecordingController
198
+ * @returns {Promise}
199
+ */
200
+ pauseRecording(): Promise<any>;
201
+ /**
202
+ * @private
203
+ * @memberof RecordingController
204
+ * @returns {Promise}
205
+ */
206
+ resumeRecording(): Promise<any>;
207
+ }
@@ -0,0 +1,14 @@
1
+ import { SELF_POLICY } from '../constants';
2
+ import RecordingAction from './enums';
3
+ declare const _default: {
4
+ canUserStart: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
5
+ canUserPause: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
6
+ canUserResume: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
7
+ canUserStop: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
8
+ deriveRecordingStates: (action: RecordingAction) => {
9
+ recording: boolean;
10
+ paused: boolean;
11
+ };
12
+ extractLocusId: (url: string) => string;
13
+ };
14
+ export default _default;
@@ -0,0 +1,78 @@
1
+ import { StatelessWebexPlugin } from '@webex/webex-core';
2
+ import Meeting from '../meeting';
3
+ /**
4
+ * Roap options
5
+ * @typedef {Object} RoapOptions
6
+ * @property {String} sdp
7
+ * @property {Meeting} meeting
8
+ * @property {Number} seq
9
+ * @property {Number} tieBreaker
10
+ * @property {Boolean} reconnect
11
+ */
12
+ /**
13
+ * @typedef {Object} SeqOptions
14
+ * @property {String} correlationId
15
+ * @property {String} mediaId
16
+ * @property {Number} seq
17
+ */
18
+ /**
19
+ * @class Roap
20
+ * @export
21
+ * @private
22
+ */
23
+ export default class Roap extends StatelessWebexPlugin {
24
+ attrs: any;
25
+ lastRoapOffer: any;
26
+ options: any;
27
+ roapHandler: any;
28
+ roapRequest: any;
29
+ turnDiscovery: any;
30
+ /**
31
+ *
32
+ * @param {Object} attrs
33
+ * @param {Object} options
34
+ */
35
+ constructor(attrs: any, options: any);
36
+ /**
37
+ *
38
+ * @param {SeqOptions} options
39
+ * @returns {null}
40
+ * @memberof Roap
41
+ */
42
+ sendRoapOK(options: any): Promise<any>;
43
+ /**
44
+ * Sends a ROAP answer...
45
+ * @param {SeqOptions} options
46
+ * @param {Boolean} options.audioMuted
47
+ * @param {Boolean} options.videoMuted
48
+ * @returns {Promise}
49
+ * @memberof Roap
50
+ */
51
+ sendRoapAnswer(options: any): any;
52
+ /**
53
+ * Sends a ROAP error...
54
+ * @param {Object} options
55
+ * @returns {Promise}
56
+ * @memberof Roap
57
+ */
58
+ sendRoapError(options: any): any;
59
+ /**
60
+ * sends a roap media request
61
+ * @param {RoapOptions} options
62
+ * @returns {Promise}
63
+ * @memberof Roap
64
+ */
65
+ sendRoapMediaRequest(options: any): any;
66
+ /**
67
+ * Performs a TURN server discovery procedure, which involves exchanging
68
+ * some roap messages with the server. This exchange has to be done before
69
+ * any other roap messages are sent
70
+ *
71
+ * @param {Meeting} meeting
72
+ * @param {Boolean} isReconnecting should be set to true if this is a new
73
+ * media connection just after a reconnection
74
+ * @param {Boolean} [isForced]
75
+ * @returns {Promise}
76
+ */
77
+ doTurnDiscovery(meeting: Meeting, isReconnecting: boolean, isForced?: boolean): any;
78
+ }
@@ -0,0 +1,41 @@
1
+ import { StatelessWebexPlugin } from '@webex/webex-core';
2
+ import { IP_VERSION } from '../constants';
3
+ import { LocusMediaRequest } from '../meeting/locusMediaRequest';
4
+ /**
5
+ * @class RoapRequest
6
+ */
7
+ export default class RoapRequest extends StatelessWebexPlugin {
8
+ /**
9
+ * Returns reachability data.
10
+ * @param {Object} localSdp
11
+ * @returns {Object}
12
+ */
13
+ attachReachabilityData(localSdp: any): Promise<{
14
+ localSdp: any;
15
+ joinCookie: any;
16
+ }>;
17
+ /**
18
+ * Sends a ROAP message
19
+ * @param {Object} options
20
+ * @param {Object} options.roapMessage
21
+ * @param {String} options.locusSelfUrl
22
+ * @param {String} options.mediaId
23
+ * @param {String} options.correlationId
24
+ * @param {String} options.meetingId
25
+ * @param {IP_VERSION} options.ipVersion only required for offers
26
+ * @returns {Promise} returns the response/failure of the request
27
+ */
28
+ sendRoap(options: {
29
+ roapMessage: any;
30
+ locusSelfUrl: string;
31
+ mediaId: string;
32
+ meetingId: string;
33
+ ipVersion?: IP_VERSION;
34
+ locusMediaRequest?: LocusMediaRequest;
35
+ audioMuted?: boolean;
36
+ videoMuted?: boolean;
37
+ }): Promise<{
38
+ mediaConnections: any;
39
+ locus: any;
40
+ }>;
41
+ }
@@ -0,0 +1,92 @@
1
+ import RoapRequest from './request';
2
+ import Meeting from '../meeting';
3
+ /**
4
+ * Handles the process of finding out TURN server information from Linus.
5
+ * This is achieved by sending a TURN_DISCOVERY_REQUEST.
6
+ */
7
+ export default class TurnDiscovery {
8
+ private roapRequest;
9
+ private defer?;
10
+ private turnInfo;
11
+ private responseTimer?;
12
+ /**
13
+ * Constructor
14
+ *
15
+ * @param {RoapRequest} roapRequest
16
+ */
17
+ constructor(roapRequest: RoapRequest);
18
+ /**
19
+ * waits for TURN_DISCOVERY_RESPONSE message to arrive
20
+ *
21
+ * @returns {Promise}
22
+ * @private
23
+ * @memberof Roap
24
+ */
25
+ private waitForTurnDiscoveryResponse;
26
+ /**
27
+ * handles TURN_DISCOVERY_RESPONSE roap message
28
+ *
29
+ * @param {Object} roapMessage
30
+ * @returns {void}
31
+ * @public
32
+ * @memberof Roap
33
+ */
34
+ handleTurnDiscoveryResponse(roapMessage: object): void;
35
+ /**
36
+ * sends the TURN_DISCOVERY_REQUEST roap request
37
+ *
38
+ * @param {Meeting} meeting
39
+ * @param {Boolean} isReconnecting
40
+ * @returns {Promise}
41
+ * @private
42
+ * @memberof Roap
43
+ */
44
+ sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean): Promise<void>;
45
+ /**
46
+ * Sends the OK message that server expects to receive
47
+ * after it sends us TURN_DISCOVERY_RESPONSE
48
+ *
49
+ * @param {Meeting} meeting
50
+ * @returns {Promise}
51
+ */
52
+ sendRoapOK(meeting: Meeting): Promise<{
53
+ mediaConnections: any;
54
+ locus: any;
55
+ }>;
56
+ /**
57
+ * Gets the reason why reachability is skipped.
58
+ *
59
+ * @param {Meeting} meeting
60
+ * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
61
+ */
62
+ private getSkipReason;
63
+ /**
64
+ * Checks if TURN discovery is skipped.
65
+ *
66
+ * @param {Meeting} meeting
67
+ * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
68
+ */
69
+ isSkipped(meeting: any): Promise<boolean>;
70
+ /**
71
+ * Retrieves TURN server information from the backend by doing
72
+ * a roap message exchange:
73
+ * client server
74
+ * | -----TURN_DISCOVERY_REQUEST-----> |
75
+ * | <----TURN_DISCOVERY_RESPONSE----- |
76
+ * | --------------OK----------------> |
77
+ *
78
+ * This TURN discovery roap exchange is always done with seq=0.
79
+ * The RoapMediaConnection SDP exchange always starts with seq=1,
80
+ * so it works fine no matter if TURN discovery is done or not.
81
+ *
82
+ * @param {Meeting} meeting
83
+ * @param {Boolean} [isReconnecting] should be set to true if this is a new
84
+ * media connection just after a reconnection
85
+ * @param {Boolean} [isForced]
86
+ * @returns {Promise}
87
+ */
88
+ doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean, isForced?: boolean): Promise<{
89
+ turnServerInfo: any;
90
+ turnDiscoverySkippedReason: any;
91
+ }>;
92
+ }
@@ -0,0 +1,4 @@
1
+ declare const RTC_METRICS: {
2
+ APP_ID: string;
3
+ };
4
+ export { RTC_METRICS as default };