@webex/plugin-meetings 3.8.0 → 3.8.1-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.
- package/README.md +26 -13
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +70 -6
- package/dist/breakouts/index.js.map +1 -1
- package/dist/common/errors/webex-errors.js +12 -2
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +28 -123
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +3 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +78 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/interpretation/index.js +4 -4
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +37 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +92 -12
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/selfUtils.js +432 -418
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +17 -17
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +94 -6
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/brbState.js +9 -2
- package/dist/meeting/brbState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +21 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +678 -344
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +21 -22
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +4 -4
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +30 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +13 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +373 -68
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +5 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/index.js +136 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +14 -0
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +55 -9
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +3 -0
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js +335 -353
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +137 -29
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +38 -0
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +36 -1
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +10 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +40 -8
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/reachability/clusterReachability.js +63 -27
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +107 -47
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachability.types.js +14 -0
- package/dist/reachability/reachability.types.js.map +1 -1
- package/dist/reachability/request.js +19 -3
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +2 -2
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/util.js +5 -5
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/turnDiscovery.js +45 -27
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/types.js +17 -0
- package/dist/roap/types.js.map +1 -0
- package/dist/types/common/errors/webex-errors.d.ts +7 -1
- package/dist/types/config.d.ts +3 -0
- package/dist/types/constants.d.ts +20 -85
- package/dist/types/controls-options-manager/enums.d.ts +4 -1
- package/dist/types/controls-options-manager/types.d.ts +10 -1
- package/dist/types/locus-info/index.d.ts +3 -3
- package/dist/types/locus-info/selfUtils.d.ts +216 -1
- package/dist/types/media/properties.d.ts +15 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +20 -0
- package/dist/types/meeting/index.d.ts +65 -1
- package/dist/types/meeting/muteState.d.ts +0 -1
- package/dist/types/meeting/request.d.ts +12 -1
- package/dist/types/meeting/request.type.d.ts +6 -0
- package/dist/types/meeting/util.d.ts +3 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
- package/dist/types/meetings/index.d.ts +57 -0
- package/dist/types/member/index.d.ts +21 -6
- package/dist/types/member/types.d.ts +73 -14
- package/dist/types/member/util.d.ts +156 -1
- package/dist/types/members/collection.d.ts +6 -5
- package/dist/types/members/index.d.ts +32 -43
- package/dist/types/members/request.d.ts +26 -0
- package/dist/types/members/util.d.ts +27 -0
- package/dist/types/metrics/constants.d.ts +10 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +10 -1
- package/dist/types/reachability/clusterReachability.d.ts +15 -7
- package/dist/types/reachability/index.d.ts +10 -1
- package/dist/types/reachability/reachability.types.d.ts +5 -0
- package/dist/types/roap/index.d.ts +3 -2
- package/dist/types/roap/turnDiscovery.d.ts +5 -17
- package/dist/types/roap/types.d.ts +16 -0
- package/dist/webinar/index.js +2 -2
- package/dist/webinar/index.js.map +1 -1
- package/package.json +24 -23
- package/src/breakouts/index.ts +69 -0
- package/src/common/errors/webex-errors.ts +8 -1
- package/src/config.ts +3 -0
- package/src/constants.ts +30 -90
- package/src/controls-options-manager/enums.ts +3 -0
- package/src/controls-options-manager/types.ts +16 -1
- package/src/controls-options-manager/util.ts +93 -0
- package/src/interpretation/index.ts +3 -3
- package/src/locus-info/controlsUtils.ts +59 -14
- package/src/locus-info/index.ts +97 -13
- package/src/locus-info/selfUtils.ts +496 -442
- package/src/media/index.ts +23 -21
- package/src/media/properties.ts +96 -0
- package/src/meeting/brbState.ts +11 -2
- package/src/meeting/in-meeting-actions.ts +40 -0
- package/src/meeting/index.ts +470 -105
- package/src/meeting/locusMediaRequest.ts +27 -22
- package/src/meeting/muteState.ts +4 -4
- package/src/meeting/request.ts +36 -1
- package/src/meeting/request.type.ts +7 -0
- package/src/meeting/util.ts +11 -2
- package/src/meeting-info/meeting-info-v2.ts +254 -8
- package/src/meeting-info/utilv2.ts +5 -0
- package/src/meetings/index.ts +148 -1
- package/src/meetings/util.ts +18 -0
- package/src/member/index.ts +68 -22
- package/src/member/types.ts +82 -16
- package/src/member/util.ts +357 -350
- package/src/members/collection.ts +4 -3
- package/src/members/index.ts +137 -18
- package/src/members/request.ts +44 -0
- package/src/members/util.ts +43 -1
- package/src/metrics/constants.ts +10 -0
- package/src/multistream/remoteMediaManager.ts +32 -10
- package/src/reachability/clusterReachability.ts +73 -26
- package/src/reachability/index.ts +62 -1
- package/src/reachability/reachability.types.ts +6 -0
- package/src/reachability/request.ts +7 -0
- package/src/reconnection-manager/index.ts +2 -2
- package/src/recording-controller/util.ts +17 -13
- package/src/roap/index.ts +3 -7
- package/src/roap/turnDiscovery.ts +34 -39
- package/src/roap/types.ts +23 -0
- package/src/webinar/index.ts +1 -1
- package/test/unit/spec/breakouts/index.ts +167 -95
- package/test/unit/spec/controls-options-manager/util.js +178 -0
- package/test/unit/spec/interpretation/index.ts +39 -1
- package/test/unit/spec/locus-info/controlsUtils.js +155 -9
- package/test/unit/spec/locus-info/index.js +209 -73
- package/test/unit/spec/locus-info/selfUtils.js +98 -24
- package/test/unit/spec/media/index.ts +150 -18
- package/test/unit/spec/media/properties.ts +130 -0
- package/test/unit/spec/meeting/brbState.ts +40 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +23 -4
- package/test/unit/spec/meeting/index.js +804 -139
- package/test/unit/spec/meeting/locusMediaRequest.ts +95 -87
- package/test/unit/spec/meeting/muteState.js +73 -2
- package/test/unit/spec/meeting/request.js +32 -1
- package/test/unit/spec/meeting/utils.js +119 -18
- package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
- package/test/unit/spec/meeting-info/utilv2.js +19 -0
- package/test/unit/spec/meetings/index.js +146 -2
- package/test/unit/spec/member/index.js +7 -0
- package/test/unit/spec/member/util.js +24 -0
- package/test/unit/spec/members/index.js +304 -78
- package/test/unit/spec/members/request.js +68 -22
- package/test/unit/spec/members/utils.js +75 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +397 -118
- package/test/unit/spec/reachability/clusterReachability.ts +88 -56
- package/test/unit/spec/reachability/index.ts +97 -0
- package/test/unit/spec/reachability/request.js +47 -2
- package/test/unit/spec/reconnection-manager/index.js +4 -4
- package/test/unit/spec/roap/turnDiscovery.ts +110 -28
- package/test/unit/spec/webinar/index.ts +5 -0
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/index.d.ts +0 -117
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/common/browser-detection.d.ts +0 -9
- package/dist/common/collection.d.ts +0 -48
- package/dist/common/config.d.ts +0 -2
- package/dist/common/errors/captcha-error.d.ts +0 -15
- package/dist/common/errors/intent-to-join.d.ts +0 -16
- package/dist/common/errors/join-meeting.d.ts +0 -17
- package/dist/common/errors/media.d.ts +0 -15
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/parameter.d.ts +0 -15
- package/dist/common/errors/password-error.d.ts +0 -15
- package/dist/common/errors/permission.d.ts +0 -14
- package/dist/common/errors/reclaim-host-role-error.js +0 -149
- package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
- package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/common/errors/reconnection-in-progress.js +0 -33
- package/dist/common/errors/reconnection-in-progress.js.map +0 -1
- package/dist/common/errors/reconnection.d.ts +0 -15
- package/dist/common/errors/stats.d.ts +0 -15
- package/dist/common/errors/webex-errors.d.ts +0 -93
- package/dist/common/errors/webex-meetings-error.d.ts +0 -20
- package/dist/common/events/events-scope.d.ts +0 -17
- package/dist/common/events/events.d.ts +0 -12
- package/dist/common/events/trigger-proxy.d.ts +0 -2
- package/dist/common/events/util.d.ts +0 -2
- package/dist/common/logs/logger-config.d.ts +0 -2
- package/dist/common/logs/logger-proxy.d.ts +0 -2
- package/dist/common/logs/request.d.ts +0 -36
- package/dist/common/queue.d.ts +0 -34
- package/dist/config.d.ts +0 -72
- package/dist/constants.d.ts +0 -1088
- package/dist/controls-options-manager/constants.d.ts +0 -4
- package/dist/controls-options-manager/enums.d.ts +0 -15
- package/dist/controls-options-manager/index.d.ts +0 -136
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/util.d.ts +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/locus-info/controlsUtils.d.ts +0 -2
- package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
- package/dist/locus-info/fullState.d.ts +0 -2
- package/dist/locus-info/hostUtils.d.ts +0 -2
- package/dist/locus-info/index.d.ts +0 -322
- package/dist/locus-info/infoUtils.d.ts +0 -2
- package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
- package/dist/locus-info/parser.d.ts +0 -272
- package/dist/locus-info/selfUtils.d.ts +0 -2
- package/dist/media/index.d.ts +0 -34
- package/dist/media/properties.d.ts +0 -93
- package/dist/media/util.d.ts +0 -2
- package/dist/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/mediaQualityMetrics/config.js +0 -502
- package/dist/mediaQualityMetrics/config.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/meeting/in-meeting-actions.d.ts +0 -167
- package/dist/meeting/index.d.ts +0 -1825
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/muteState.d.ts +0 -178
- package/dist/meeting/request.d.ts +0 -295
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/state.d.ts +0 -9
- package/dist/meeting/util.d.ts +0 -119
- package/dist/meeting/voicea-meeting.d.ts +0 -16
- package/dist/meeting-info/collection.d.ts +0 -20
- package/dist/meeting-info/index.d.ts +0 -69
- package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
- package/dist/meeting-info/request.d.ts +0 -22
- package/dist/meeting-info/util.d.ts +0 -2
- package/dist/meeting-info/utilv2.d.ts +0 -2
- package/dist/meetings/collection.d.ts +0 -40
- package/dist/meetings/index.d.ts +0 -390
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/request.d.ts +0 -27
- package/dist/meetings/util.d.ts +0 -18
- package/dist/member/index.d.ts +0 -160
- package/dist/member/member.types.js +0 -17
- package/dist/member/member.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/util.d.ts +0 -2
- package/dist/members/collection.d.ts +0 -29
- package/dist/members/index.d.ts +0 -353
- package/dist/members/request.d.ts +0 -114
- package/dist/members/types.d.ts +0 -25
- package/dist/members/util.d.ts +0 -215
- package/dist/metrics/config.js +0 -276
- package/dist/metrics/config.js.map +0 -1
- package/dist/metrics/constants.d.ts +0 -70
- package/dist/metrics/index.d.ts +0 -45
- package/dist/multistream/mediaRequestManager.d.ts +0 -119
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMediaGroup.d.ts +0 -49
- package/dist/multistream/remoteMediaManager.d.ts +0 -300
- package/dist/multistream/sendSlotManager.d.ts +0 -69
- package/dist/networkQualityMonitor/index.d.ts +0 -70
- package/dist/networkQualityMonitor/index.js +0 -221
- package/dist/networkQualityMonitor/index.js.map +0 -1
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -109
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/personal-meeting-room/index.d.ts +0 -47
- package/dist/personal-meeting-room/request.d.ts +0 -14
- package/dist/personal-meeting-room/util.d.ts +0 -2
- package/dist/reachability/clusterReachability.d.ts +0 -109
- package/dist/reachability/index.d.ts +0 -105
- package/dist/reachability/request.d.ts +0 -39
- package/dist/reachability/util.d.ts +0 -8
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/reactions.d.ts +0 -4
- package/dist/reactions/reactions.type.d.ts +0 -52
- package/dist/reconnection-manager/index.d.ts +0 -136
- package/dist/recording-controller/enums.d.ts +0 -7
- package/dist/recording-controller/index.d.ts +0 -207
- package/dist/recording-controller/util.d.ts +0 -14
- package/dist/roap/collection.js +0 -62
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.js +0 -275
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/index.d.ts +0 -86
- package/dist/roap/request.d.ts +0 -39
- package/dist/roap/state.js +0 -126
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/turnDiscovery.d.ts +0 -155
- package/dist/roap/util.js +0 -75
- package/dist/roap/util.js.map +0 -1
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/constants.js +0 -11
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.d.ts +0 -61
- package/dist/rtcMetrics/index.js +0 -197
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/statsAnalyzer/global.d.ts +0 -36
- package/dist/statsAnalyzer/global.js +0 -126
- package/dist/statsAnalyzer/global.js.map +0 -1
- package/dist/statsAnalyzer/index.d.ts +0 -217
- package/dist/statsAnalyzer/index.js +0 -1013
- package/dist/statsAnalyzer/index.js.map +0 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/statsAnalyzer/mqaUtil.js +0 -179
- package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
- package/dist/transcription/index.d.ts +0 -64
- package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/types/networkQualityMonitor/index.d.ts +0 -70
- package/dist/types/rtcMetrics/constants.d.ts +0 -4
- package/dist/types/rtcMetrics/index.d.ts +0 -71
- package/dist/types/statsAnalyzer/global.d.ts +0 -36
- package/dist/types/statsAnalyzer/index.d.ts +0 -217
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/index.d.ts +0 -5
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_triggerProxy","_constants","_constants2","_reconnection","_reconnectionNotStarted","_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","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","canStartReconnection","enabled","info","_reconnect","_callee2","_this3","_ref2","_ref2$networkDisconne","networkDisconnect","_ref2$networkRetry","networkRetry","completionCallback","triggerEvent","_args2","_callee2$","_context2","length","id","event","payload","ReconnectionNotStartedError","MEETING_RECONNECTION_STARTING","internal","newMetrics","submitClientEvent","name","options","meetingId","meetings","startReachability","t0","executeReconnection","t1","reconnect","abrupt","message","errors","category","errorCode","fatal","shownToUser","rejoinMeeting","MEETING_RECONNECTION_SUCCESS","recoveredBy","t2","MEETING_RECONNECTION_FAILURE","ReconnectionError","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_RECONNECT_FAILURE","correlation_id","correlationId","locus_id","locusUrl","split","pop","stack","finish","_executeReconnection","_callee3","_ref3","_ref3$networkDisconne","media","_callee3$","_context3","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","device","url","FAILURE","syncMeetings","keepOnlyLocusMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","sent","_x2","_rejoinMeeting","_callee4","_args4","_callee4$","_context4","join","rejoin","MEETING_REJOIN","MEETING_MAX_REJOIN_FAILURE","_reconnectMedia","_callee5","_turnServerResult$tur","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 ReconnectionError from '../common/errors/reconnection';\nimport ReconnectionNotStartedError from '../common/errors/reconnection-not-started';\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 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 {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 = 0;\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.rejoinAttempts = 0;\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 * @returns {Boolean}\n * @throws {ReconnectInProgress, ReconnectionDisabled}\n * @private\n * @memberof ReconnectionManager\n */\n private canStartReconnection() {\n if (this.meeting.config.reconnection.enabled) {\n if (this.status === RECONNECTION.STATE.DEFAULT_STATUS) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection already in progress.'\n );\n\n return false;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection is not enabled.'\n );\n\n return false;\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 * @param {Function} [completionCallback] callback that gets called when reconnection is started successfully\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect(\n {\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {},\n completionCallback: (() => Promise<void>) | undefined = undefined\n ) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n\n const triggerEvent = (event, payload = undefined) =>\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'reconnect',\n },\n event,\n payload\n );\n\n if (!this.canStartReconnection()) {\n throw new ReconnectionNotStartedError();\n }\n\n try {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_STARTING);\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 try {\n await this.webex.meetings.startReachability('reconnection');\n } catch (err) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reachability failed, continuing with reconnection attempt, err: ',\n err\n );\n }\n\n try {\n await this.executeReconnection({networkDisconnect});\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 await this.reconnect({networkDisconnect: true, networkRetry: true}, completionCallback);\n\n return;\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n\n // send call aborted event with category as expected as we are trying to rejoin\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\n if (reconnectError instanceof NeedsRejoinError && this.autoRejoinEnabled) {\n await this.rejoinMeeting(reconnectError.wasSharing);\n\n return;\n }\n\n throw reconnectError;\n }\n\n // finalize the reconnection process by calling the completionCallback\n if (completionCallback) {\n await completionCallback();\n }\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_SUCCESS);\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 } catch (error) {\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_FAILURE, {\n error: new ReconnectionError('Reconnection failure event', error),\n });\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_RECONNECT_FAILURE, {\n correlation_id: this.meeting.correlationId,\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw new ReconnectionError('Reconnection failure event', error);\n } finally {\n this.reset();\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 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 try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings({keepOnlyLocusMeetings: false});\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 // 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?.url) {\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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"}
|
1
|
+
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_triggerProxy","_constants","_constants2","_reconnection","_reconnectionNotStarted","_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","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","canStartReconnection","enabled","info","_reconnect","_callee2","_this3","_ref2","_ref2$networkDisconne","networkDisconnect","_ref2$networkRetry","networkRetry","completionCallback","triggerEvent","_args2","_callee2$","_context2","length","id","event","payload","ReconnectionNotStartedError","MEETING_RECONNECTION_STARTING","internal","newMetrics","submitClientEvent","name","options","meetingId","meetings","startReachability","t0","executeReconnection","t1","reconnect","abrupt","message","errors","category","errorCode","fatal","shownToUser","rejoinMeeting","MEETING_RECONNECTION_SUCCESS","recoveredBy","t2","MEETING_RECONNECTION_FAILURE","ReconnectionError","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_RECONNECT_FAILURE","correlation_id","correlationId","locus_id","locusUrl","split","pop","stack","finish","_executeReconnection","_callee3","_ref3","_ref3$networkDisconne","media","_callee3$","_context3","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","device","url","FAILURE","syncMeetings","keepOnlyLocusMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","sent","_x2","_rejoinMeeting","_callee4","_args4","_callee4$","_context4","join","rejoin","MEETING_REJOIN","MEETING_MAX_REJOIN_FAILURE","_reconnectMedia","_callee5","_turnServerResult$tur","turnServerResult","iceServers","_callee5$","_context5","roap","doTurnDiscovery","turnServerInfo","urls","push","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 ReconnectionError from '../common/errors/reconnection';\nimport ReconnectionNotStartedError from '../common/errors/reconnection-not-started';\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 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 {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 = 0;\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.rejoinAttempts = 0;\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 * @returns {Boolean}\n * @throws {ReconnectInProgress, ReconnectionDisabled}\n * @private\n * @memberof ReconnectionManager\n */\n private canStartReconnection() {\n if (this.meeting.config.reconnection.enabled) {\n if (this.status === RECONNECTION.STATE.DEFAULT_STATUS) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection already in progress.'\n );\n\n return false;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection is not enabled.'\n );\n\n return false;\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 * @param {Function} [completionCallback] callback that gets called when reconnection is started successfully\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect(\n {\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {},\n completionCallback: (() => Promise<void>) | undefined = undefined\n ) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n\n const triggerEvent = (event, payload = undefined) =>\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'reconnect',\n },\n event,\n payload\n );\n\n if (!this.canStartReconnection()) {\n throw new ReconnectionNotStartedError();\n }\n\n try {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_STARTING);\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 try {\n await this.webex.meetings.startReachability('reconnection');\n } catch (err) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reachability failed, continuing with reconnection attempt, err: ',\n err\n );\n }\n\n try {\n await this.executeReconnection({networkDisconnect});\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 await this.reconnect({networkDisconnect: true, networkRetry: true}, completionCallback);\n\n return;\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n\n // send call aborted event with category as expected as we are trying to rejoin\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\n if (reconnectError instanceof NeedsRejoinError && this.autoRejoinEnabled) {\n await this.rejoinMeeting(reconnectError.wasSharing);\n\n return;\n }\n\n throw reconnectError;\n }\n\n // finalize the reconnection process by calling the completionCallback\n if (completionCallback) {\n await completionCallback();\n }\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_SUCCESS);\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 } catch (error) {\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_FAILURE, {\n error: new ReconnectionError('Reconnection failure event', error),\n });\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_RECONNECT_FAILURE, {\n correlation_id: this.meeting.correlationId,\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw new ReconnectionError('Reconnection failure event', error);\n } finally {\n this.reset();\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 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 try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings({keepOnlyLocusMeetings: false});\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 // 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?.urls.length > 0) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.urls,\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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"}
|
@@ -10,19 +10,19 @@ var _constants = require("../constants");
|
|
10
10
|
var _enums = require("./enums");
|
11
11
|
var _util = _interopRequireDefault(require("../meeting/util"));
|
12
12
|
var canUserStart = function canUserStart(displayHints, userPolicies) {
|
13
|
-
return
|
13
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_START) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);
|
14
14
|
};
|
15
15
|
var canUserPause = function canUserPause(displayHints, userPolicies) {
|
16
|
-
return
|
16
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_PAUSE) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);
|
17
17
|
};
|
18
18
|
var canUserResume = function canUserResume(displayHints, userPolicies) {
|
19
|
-
return
|
19
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_RESUME) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);
|
20
20
|
};
|
21
21
|
var canUserStop = function canUserStop(displayHints, userPolicies) {
|
22
|
-
return
|
22
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_STOP) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);
|
23
23
|
};
|
24
24
|
var isPremiseRecordingEnabled = function isPremiseRecordingEnabled(displayHints, userPolicies) {
|
25
|
-
return (displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME)) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.
|
25
|
+
return (displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME)) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);
|
26
26
|
};
|
27
27
|
var extractLocusId = function extractLocusId(url) {
|
28
28
|
return url === null || url === void 0 ? void 0 : url.split('/').pop();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_constants","require","_enums","_util","_interopRequireDefault","canUserStart","displayHints","userPolicies","includes","DISPLAY_HINTS","RECORDING_CONTROL_START","
|
1
|
+
{"version":3,"names":["_constants","require","_enums","_util","_interopRequireDefault","canUserStart","displayHints","userPolicies","includes","DISPLAY_HINTS","RECORDING_CONTROL_START","MeetingUtil","selfSupportsFeature","SELF_POLICY","SUPPORT_NETWORK_BASED_RECORD","PREMISE_RECORDING_CONTROL_START","SUPPORT_PREMISE_RECORD","canUserPause","RECORDING_CONTROL_PAUSE","PREMISE_RECORDING_CONTROL_PAUSE","canUserResume","RECORDING_CONTROL_RESUME","PREMISE_RECORDING_CONTROL_RESUME","canUserStop","RECORDING_CONTROL_STOP","PREMISE_RECORDING_CONTROL_STOP","isPremiseRecordingEnabled","extractLocusId","url","split","pop","deriveRecordingStates","action","recording","paused","RecordingAction","Start","Stop","Resume","Pause","Error","concat","_default","exports","default"],"sources":["util.ts"],"sourcesContent":["import {DISPLAY_HINTS, SELF_POLICY} from '../constants';\nimport {RecordingAction} from './enums';\nimport MeetingUtil from '../meeting/util';\n\nconst canUserStart = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies)) ||\n (displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies));\n\nconst canUserPause = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies)) ||\n (displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies));\n\nconst canUserResume = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies)) ||\n (displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies));\n\nconst canUserStop = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies)) ||\n (displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies));\n\nconst isPremiseRecordingEnabled = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME)) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);\n\nconst extractLocusId = (url: string) => {\n return url?.split('/').pop();\n};\n\nconst deriveRecordingStates = (action: RecordingAction): {recording: boolean; paused: boolean} => {\n let recording;\n let paused;\n\n switch (action) {\n case RecordingAction.Start:\n recording = true;\n paused = false;\n break;\n case RecordingAction.Stop:\n recording = false;\n paused = false;\n break;\n case RecordingAction.Resume:\n recording = true;\n paused = false;\n break;\n case RecordingAction.Pause:\n recording = true;\n paused = true;\n break;\n default:\n throw new Error(`Recording state cannot be derived from invalid action: ${action}`);\n }\n\n return {\n recording,\n paused,\n };\n};\n\nexport default {\n canUserStart,\n canUserPause,\n canUserResume,\n canUserStop,\n isPremiseRecordingEnabled,\n deriveRecordingStates,\n extractLocusId,\n};\n"],"mappings":"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"}
|
package/dist/roap/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_constants","_loggerProxy","_interopRequireDefault","_request","_turnDiscovery","_metrics","_constants2","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Roap","exports","_StatelessWebexPlugin","_inherits2","_super","attrs","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","roapRequest","RoapRequest","turnDiscovery","TurnDiscovery","_createClass2","key","value","sendRoapOK","_this2","_promise","resolve","then","meeting","webex","meetings","meetingCollection","getByKey","correlationId","roapMessage","messageType","ROAP","ROAP_TYPES","OK","version","ROAP_VERSION","seq","LoggerProxy","logger","log","concat","sendRoap","locusSelfUrl","selfUrl","mediaId","isMultistream","locusMediaRequest","sendRoapAnswer","ANSWER","sdps","sdp","sendRoapError","ERROR","errorType","sendRoapMediaRequest","tieBreaker","OFFER","headers","sendEmptyMediaId","preferTranscoding","_ref","_mediaConnections$","locus","mediaConnections","updateMediaConnections","roapAnswer","remoteSdp","JSON","parse","_remoteSdp$roapMessag","answerSeq","errorCause","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","ROAP_HTTP_RESPONSE_MISSING","doTurnDiscovery","isReconnecting","isForced","generateTurnDiscoveryRequestMessage","handleTurnDiscoveryHttpResponse","httpResponse","abortTurnDiscovery","abort","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';\n\nimport RoapRequest from './request';\nimport TurnDiscovery, {TurnDiscoveryResult} from './turnDiscovery';\nimport Meeting from '../meeting';\nimport MeetingUtil from '../meeting/util';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nexport {\n type TurnDiscoveryResult,\n type TurnServerInfo,\n type TurnDiscoverySkipReason,\n} from './turnDiscovery';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} seq\n * @property {Number} tieBreaker\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: TurnDiscovery;\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 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 this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @memberof Roap\n */\n public sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n });\n });\n }\n\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @memberof Roap\n */\n public sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapError(options) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType: options.errorType,\n seq: options.seq,\n };\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(\n `Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`\n );\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, seq, sdp, tieBreaker} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n // The only time we want to send an empty media id is when we are reconnecting, because this way we tell Locus\n // that it needs to create a new confluence, but when reconnecting we always send TURN_DISCOVERY_REQUEST first,\n // so we don't need to ever send an empty media id here\n const sendEmptyMediaId = false;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n isMultistream: meeting.isMultistream,\n preferTranscoding: !meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n let roapAnswer;\n\n if (mediaConnections?.[0]?.remoteSdp) {\n const remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);\n\n if (remoteSdp.roapMessage) {\n const {\n seq: answerSeq,\n messageType,\n sdps,\n errorType,\n errorCause,\n headers,\n } = remoteSdp.roapMessage;\n\n if (messageType === ROAP.ROAP_TYPES.ANSWER) {\n roapAnswer = {\n seq: answerSeq,\n messageType,\n sdp: sdps[0],\n errorType,\n errorCause,\n headers,\n };\n }\n }\n }\n\n if (!roapAnswer) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {\n correlationId: meeting.correlationId,\n messageType: 'ANSWER',\n isMultistream: meeting.isMultistream,\n });\n }\n\n return {locus, roapAnswer};\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 * @param {Boolean} [isForced]\n * @returns {Promise}\n */\n doTurnDiscovery(\n meeting: Meeting,\n isReconnecting: boolean,\n isForced?: boolean\n ): Promise<TurnDiscoveryResult> {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting, isForced);\n }\n\n generateTurnDiscoveryRequestMessage(meeting: Meeting, isForced: boolean) {\n return this.turnDiscovery.generateTurnDiscoveryRequestMessage(meeting, isForced);\n }\n\n handleTurnDiscoveryHttpResponse(meeting: Meeting, httpResponse: object) {\n return this.turnDiscovery.handleTurnDiscoveryHttpResponse(meeting, httpResponse);\n }\n\n abortTurnDiscovery() {\n return this.turnDiscovery.abort();\n }\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["_webexCore","require","_constants","_loggerProxy","_interopRequireDefault","_request","_turnDiscovery","_metrics","_constants2","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Roap","exports","_StatelessWebexPlugin","_inherits2","_super","attrs","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","roapRequest","RoapRequest","turnDiscovery","TurnDiscovery","_createClass2","key","value","sendRoapOK","_this2","_promise","resolve","then","meeting","webex","meetings","meetingCollection","getByKey","correlationId","roapMessage","messageType","ROAP","ROAP_TYPES","OK","version","ROAP_VERSION","seq","LoggerProxy","logger","log","concat","sendRoap","locusSelfUrl","selfUrl","mediaId","isMultistream","locusMediaRequest","sendRoapAnswer","ANSWER","sdps","sdp","sendRoapError","ERROR","errorType","sendRoapMediaRequest","tieBreaker","OFFER","headers","sendEmptyMediaId","preferTranscoding","_ref","_mediaConnections$","locus","mediaConnections","updateMediaConnections","roapAnswer","remoteSdp","JSON","parse","_remoteSdp$roapMessag","answerSeq","errorCause","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","ROAP_HTTP_RESPONSE_MISSING","doTurnDiscovery","isReconnecting","isForced","generateTurnDiscoveryRequestMessage","handleTurnDiscoveryHttpResponse","httpResponse","abortTurnDiscovery","abort","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';\n\nimport RoapRequest from './request';\nimport TurnDiscovery from './turnDiscovery';\nimport {TurnDiscoveryResult} from './types';\nimport Meeting from '../meeting';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nexport {type TurnDiscoveryResult, type TurnServerInfo, type TurnDiscoverySkipReason} from './types';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} seq\n * @property {Number} tieBreaker\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: TurnDiscovery;\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 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 this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @memberof Roap\n */\n public sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n });\n });\n }\n\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @memberof Roap\n */\n public sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapError(options) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType: options.errorType,\n seq: options.seq,\n };\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(\n `Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`\n );\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, seq, sdp, tieBreaker} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n // The only time we want to send an empty media id is when we are reconnecting, because this way we tell Locus\n // that it needs to create a new confluence, but when reconnecting we always send TURN_DISCOVERY_REQUEST first,\n // so we don't need to ever send an empty media id here\n const sendEmptyMediaId = false;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n isMultistream: meeting.isMultistream,\n preferTranscoding: !meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n let roapAnswer;\n\n if (mediaConnections?.[0]?.remoteSdp) {\n const remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);\n\n if (remoteSdp.roapMessage) {\n const {\n seq: answerSeq,\n messageType,\n sdps,\n errorType,\n errorCause,\n headers,\n } = remoteSdp.roapMessage;\n\n if (messageType === ROAP.ROAP_TYPES.ANSWER) {\n roapAnswer = {\n seq: answerSeq,\n messageType,\n sdp: sdps[0],\n errorType,\n errorCause,\n headers,\n };\n }\n }\n }\n\n if (!roapAnswer) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {\n correlationId: meeting.correlationId,\n messageType: 'ANSWER',\n isMultistream: meeting.isMultistream,\n });\n }\n\n return {locus, roapAnswer};\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 * @param {Boolean} [isForced]\n * @returns {Promise}\n */\n doTurnDiscovery(\n meeting: Meeting,\n isReconnecting: boolean,\n isForced?: boolean\n ): Promise<TurnDiscoveryResult> {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting, isForced);\n }\n\n generateTurnDiscoveryRequestMessage(meeting: Meeting, isForced: boolean) {\n return this.turnDiscovery.generateTurnDiscoveryRequestMessage(meeting, isForced);\n }\n\n handleTurnDiscoveryHttpResponse(meeting: Meeting, httpResponse: object) {\n return this.turnDiscovery.handleTurnDiscoveryHttpResponse(meeting, httpResponse);\n }\n\n abortTurnDiscovery() {\n return this.turnDiscovery.abort();\n }\n}\n"],"mappings":"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"}
|
@@ -18,6 +18,7 @@ var _metrics = _interopRequireDefault(require("../metrics"));
|
|
18
18
|
var _constants = _interopRequireDefault(require("../metrics/constants"));
|
19
19
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
20
20
|
var _constants2 = require("../constants");
|
21
|
+
var _types = require("./types");
|
21
22
|
// @ts-ignore - Types not available for @webex/common
|
22
23
|
|
23
24
|
var TURN_DISCOVERY_TIMEOUT = 10; // in seconds
|
@@ -27,15 +28,7 @@ var TURN_DISCOVERY_TIMEOUT = 10; // in seconds
|
|
27
28
|
// so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection
|
28
29
|
// and do the SDP offer with seq=1
|
29
30
|
var TURN_DISCOVERY_SEQ = 0;
|
30
|
-
var TurnDiscoverySkipReason = {
|
31
|
-
missingHttpResponse: 'missing http response',
|
32
|
-
// when we asked for the TURN discovery response to be in the http response, but it wasn't there
|
33
|
-
reachability: 'reachability',
|
34
|
-
// when udp reachability to public clusters is ok, so we don't need TURN (this doens't apply when joinWithMedia() is used)
|
35
|
-
alreadyInProgress: 'already in progress' // when we try to start TURN discovery while it's already in progress
|
36
|
-
};
|
37
31
|
|
38
|
-
// used when TURN discovery is not skipped
|
39
32
|
/**
|
40
33
|
* Handles the process of finding out TURN server information from Linus.
|
41
34
|
* This is achieved by sending a TURN_DISCOVERY_REQUEST.
|
@@ -54,11 +47,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
54
47
|
(0, _defineProperty2.default)(this, "turnInfo", void 0);
|
55
48
|
(0, _defineProperty2.default)(this, "responseTimer", void 0);
|
56
49
|
this.roapRequest = roapRequest;
|
57
|
-
this.
|
58
|
-
url: '',
|
59
|
-
username: '',
|
60
|
-
password: ''
|
61
|
-
};
|
50
|
+
this.resetTurnInfo();
|
62
51
|
}
|
63
52
|
|
64
53
|
/**
|
@@ -69,6 +58,19 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
69
58
|
* @memberof Roap
|
70
59
|
*/
|
71
60
|
(0, _createClass2.default)(TurnDiscovery, [{
|
61
|
+
key: "resetTurnInfo",
|
62
|
+
value:
|
63
|
+
/** Resets the turnInfo structure to the defaults
|
64
|
+
* @returns {void}
|
65
|
+
*/
|
66
|
+
function resetTurnInfo() {
|
67
|
+
this.turnInfo = {
|
68
|
+
urls: [],
|
69
|
+
username: '',
|
70
|
+
password: ''
|
71
|
+
};
|
72
|
+
}
|
73
|
+
}, {
|
72
74
|
key: "waitForTurnDiscoveryResponse",
|
73
75
|
value: function waitForTurnDiscoveryResponse() {
|
74
76
|
if (!this.defer) {
|
@@ -108,31 +110,47 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
108
110
|
}
|
109
111
|
var expectedHeaders = [{
|
110
112
|
headerName: 'x-cisco-turn-url',
|
111
|
-
field: '
|
113
|
+
field: 'urls',
|
114
|
+
multipleAllowed: true
|
112
115
|
}, {
|
113
116
|
headerName: 'x-cisco-turn-username',
|
114
|
-
field: 'username'
|
117
|
+
field: 'username',
|
118
|
+
multipleAllowed: false
|
115
119
|
}, {
|
116
120
|
headerName: 'x-cisco-turn-password',
|
117
|
-
field: 'password'
|
121
|
+
field: 'password',
|
122
|
+
multipleAllowed: false
|
118
123
|
}];
|
119
|
-
var foundHeaders =
|
124
|
+
var foundHeaders = {};
|
125
|
+
this.resetTurnInfo();
|
120
126
|
headers === null || headers === void 0 ? void 0 : headers.forEach(function (receivedHeader) {
|
121
127
|
// check if it matches any of our expected headers
|
122
128
|
expectedHeaders.forEach(function (expectedHeader) {
|
123
129
|
if (receivedHeader.startsWith("".concat(expectedHeader.headerName, "="))) {
|
124
|
-
|
125
|
-
|
130
|
+
foundHeaders[expectedHeader.headerName] = true;
|
131
|
+
var headerValue = receivedHeader.substring(expectedHeader.headerName.length + 1);
|
132
|
+
if (expectedHeader.multipleAllowed) {
|
133
|
+
_this.turnInfo[expectedHeader.field].push(headerValue);
|
134
|
+
} else {
|
135
|
+
// just store the last one we find
|
136
|
+
_this.turnInfo[expectedHeader.field] = headerValue;
|
137
|
+
}
|
126
138
|
}
|
127
139
|
});
|
128
140
|
});
|
129
141
|
clearTimeout(this.responseTimer);
|
130
142
|
this.responseTimer = undefined;
|
131
|
-
if (
|
143
|
+
if (expectedHeaders.some(function (header) {
|
144
|
+
return !foundHeaders[header.headerName];
|
145
|
+
})) {
|
132
146
|
_loggerProxy.default.logger.warn("Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received ".concat(from, ": ").concat((0, _stringify.default)(headers)));
|
133
147
|
this.defer.reject(new Error("TURN_DISCOVERY_RESPONSE ".concat(from, " missing some headers: ").concat((0, _stringify.default)(headers))));
|
134
148
|
} else {
|
135
|
-
_loggerProxy.default.logger.info("Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response ".concat(from, ",
|
149
|
+
_loggerProxy.default.logger.info("Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response ".concat(from, ", urls=").concat(this.turnInfo.urls));
|
150
|
+
this.turnInfo.urls = this.turnInfo.urls.filter(function (url) {
|
151
|
+
return url !== '';
|
152
|
+
}); // remove empty urls, we might get them if we land on video-mesh nodes (VMN)
|
153
|
+
|
136
154
|
this.defer.resolve({
|
137
155
|
isOkRequired: !(headers !== null && headers !== void 0 && headers.includes('noOkInTransaction'))
|
138
156
|
});
|
@@ -163,7 +181,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
163
181
|
_loggerProxy.default.logger.warn('Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> TURN discovery already in progress');
|
164
182
|
return _context.abrupt("return", {
|
165
183
|
roapMessage: undefined,
|
166
|
-
turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress
|
184
|
+
turnDiscoverySkippedReason: _types.TurnDiscoverySkipReason.alreadyInProgress
|
167
185
|
});
|
168
186
|
case 3:
|
169
187
|
if (isForced) {
|
@@ -263,7 +281,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
263
281
|
}
|
264
282
|
return _context2.abrupt("return", {
|
265
283
|
turnServerInfo: undefined,
|
266
|
-
turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse
|
284
|
+
turnDiscoverySkippedReason: _types.TurnDiscoverySkipReason.missingHttpResponse
|
267
285
|
});
|
268
286
|
case 5:
|
269
287
|
_context2.prev = 5;
|
@@ -274,7 +292,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
274
292
|
}
|
275
293
|
return _context2.abrupt("return", {
|
276
294
|
turnServerInfo: undefined,
|
277
|
-
turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse
|
295
|
+
turnDiscoverySkippedReason: _types.TurnDiscoverySkipReason.missingHttpResponse
|
278
296
|
});
|
279
297
|
case 9:
|
280
298
|
this.handleTurnDiscoveryResponse(roapMessage, 'in http response');
|
@@ -386,7 +404,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
386
404
|
_loggerProxy.default.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
|
387
405
|
return _promise.default.resolve({
|
388
406
|
turnServerInfo: undefined,
|
389
|
-
turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress
|
407
|
+
turnDiscoverySkippedReason: _types.TurnDiscoverySkipReason.alreadyInProgress
|
390
408
|
});
|
391
409
|
}
|
392
410
|
this.defer = new _common.Defer();
|
@@ -481,7 +499,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
481
499
|
break;
|
482
500
|
}
|
483
501
|
_loggerProxy.default.logger.info('Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery');
|
484
|
-
return _context4.abrupt("return", TurnDiscoverySkipReason.reachability);
|
502
|
+
return _context4.abrupt("return", _types.TurnDiscoverySkipReason.reachability);
|
485
503
|
case 6:
|
486
504
|
return _context4.abrupt("return", undefined);
|
487
505
|
case 7:
|
@@ -576,7 +594,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
|
|
576
594
|
return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting);
|
577
595
|
case 9:
|
578
596
|
turnDiscoveryResult = _context6.sent;
|
579
|
-
if (!(turnDiscoveryResult.turnDiscoverySkippedReason !== TurnDiscoverySkipReason.missingHttpResponse)) {
|
597
|
+
if (!(turnDiscoveryResult.turnDiscoverySkippedReason !== _types.TurnDiscoverySkipReason.missingHttpResponse)) {
|
580
598
|
_context6.next = 12;
|
581
599
|
break;
|
582
600
|
}
|