@webex/plugin-meetings 3.0.0-beta.14 → 3.0.0-beta.16
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/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +5 -26
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +5 -26
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +6 -27
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +5 -26
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +5 -26
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +4 -25
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +5 -26
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +5 -26
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +6 -41
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -24
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +35 -61
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +1 -5
- package/dist/config.js.map +1 -1
- package/dist/constants.js +45 -40
- package/dist/constants.js.map +1 -1
- package/dist/index.js +1 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +10 -28
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +101 -193
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +0 -38
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +87 -123
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +16 -81
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +43 -97
- package/dist/media/index.js.map +1 -1
- package/dist/media/internal-media-core-wrapper.js +0 -4
- package/dist/media/internal-media-core-wrapper.js.map +1 -1
- package/dist/media/properties.js +64 -110
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +10 -12
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.js +120 -192
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +0 -13
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +819 -1591
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +31 -78
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +160 -230
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +0 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +19 -158
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +10 -33
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +179 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -16
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +137 -228
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +3 -21
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +450 -582
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +7 -30
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +99 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +49 -89
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +17 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +2 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +72 -194
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +21 -56
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +9 -38
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +0 -2
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -2
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +48 -136
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +12 -28
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/multistreamMedia.js +11 -21
- package/dist/multistream/multistreamMedia.js.map +1 -1
- package/dist/multistream/receiveSlot.js +7 -47
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +38 -77
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +11 -56
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +221 -380
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +28 -57
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +10 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -33
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +100 -166
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +2 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.js +0 -2
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +2 -6
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +294 -459
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/index.js +18 -53
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +13 -55
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +10 -52
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +0 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +66 -174
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +54 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +13 -45
- package/dist/transcription/index.js.map +1 -1
- package/internal-README.md +7 -6
- package/package.json +18 -18
- package/src/common/browser-detection.ts +9 -6
- package/src/common/collection.ts +3 -1
- package/src/common/errors/captcha-error.ts +6 -6
- package/src/common/errors/intent-to-join.ts +6 -6
- package/src/common/errors/join-meeting.ts +12 -8
- package/src/common/errors/media.ts +6 -6
- package/src/common/errors/parameter.ts +9 -6
- package/src/common/errors/password-error.ts +6 -6
- package/src/common/errors/permission.ts +5 -5
- package/src/common/errors/reconnection.ts +6 -6
- package/src/common/errors/stats.ts +6 -6
- package/src/common/errors/webex-errors.ts +7 -5
- package/src/common/errors/webex-meetings-error.ts +1 -1
- package/src/common/events/events-scope.ts +5 -1
- package/src/common/events/events.ts +5 -1
- package/src/common/events/trigger-proxy.ts +8 -3
- package/src/common/events/util.ts +1 -2
- package/src/common/logs/logger-proxy.ts +21 -10
- package/src/common/logs/request.ts +11 -8
- package/src/config.ts +11 -11
- package/src/constants.ts +1 -1
- package/src/index.js +1 -1
- package/src/locus-info/controlsUtils.ts +34 -24
- package/src/locus-info/fullState.ts +15 -11
- package/src/locus-info/hostUtils.ts +4 -3
- package/src/locus-info/index.ts +25 -34
- package/src/locus-info/infoUtils.ts +12 -4
- package/src/locus-info/mediaSharesUtils.ts +4 -4
- package/src/locus-info/parser.ts +45 -68
- package/src/locus-info/selfUtils.ts +106 -57
- package/src/media/index.ts +123 -135
- package/src/media/internal-media-core-wrapper.ts +2 -2
- package/src/media/properties.ts +30 -20
- package/src/media/util.ts +1 -1
- package/src/mediaQualityMetrics/config.ts +46 -46
- package/src/meeting/effectsState.ts +35 -35
- package/src/meeting/in-meeting-actions.ts +7 -3
- package/src/meeting/index.ts +1559 -1292
- package/src/meeting/muteState.ts +62 -31
- package/src/meeting/request.ts +155 -116
- package/src/meeting/request.type.ts +8 -8
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +101 -70
- package/src/meeting-info/collection.ts +2 -1
- package/src/meeting-info/index.ts +32 -30
- package/src/meeting-info/meeting-info-v2.ts +106 -108
- package/src/meeting-info/request.ts +9 -3
- package/src/meeting-info/util.ts +54 -46
- package/src/meeting-info/utilv2.ts +59 -53
- package/src/meetings/collection.ts +1 -1
- package/src/meetings/index.ts +512 -440
- package/src/meetings/request.ts +26 -24
- package/src/meetings/util.ts +29 -29
- package/src/member/index.ts +55 -49
- package/src/member/util.ts +26 -13
- package/src/members/collection.ts +0 -1
- package/src/members/index.ts +182 -126
- package/src/members/request.ts +46 -14
- package/src/members/util.ts +44 -42
- package/src/metrics/config.ts +254 -81
- package/src/metrics/constants.ts +0 -2
- package/src/metrics/index.ts +84 -71
- package/src/multistream/multistreamMedia.ts +1 -0
- package/src/multistream/receiveSlot.ts +1 -0
- package/src/multistream/receiveSlotManager.ts +1 -0
- package/src/multistream/remoteMedia.ts +1 -1
- package/src/multistream/remoteMediaGroup.ts +2 -1
- package/src/multistream/remoteMediaManager.ts +3 -0
- package/src/networkQualityMonitor/index.ts +20 -23
- package/src/personal-meeting-room/index.ts +12 -16
- package/src/personal-meeting-room/request.ts +10 -3
- package/src/personal-meeting-room/util.ts +3 -3
- package/src/reachability/index.ts +61 -59
- package/src/reachability/request.ts +36 -32
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +4 -3
- package/src/reconnection-manager/index.ts +139 -84
- package/src/roap/index.ts +46 -38
- package/src/roap/request.ts +44 -31
- package/src/roap/turnDiscovery.ts +59 -30
- package/src/statsAnalyzer/global.ts +30 -33
- package/src/statsAnalyzer/index.ts +432 -175
- package/src/statsAnalyzer/mqaUtil.ts +178 -72
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/journey.js +664 -463
- package/test/integration/spec/space-meeting.js +319 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +5 -5
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1 -2
- package/test/unit/spec/locus-info/infoUtils.js +26 -33
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +72 -103
- package/test/unit/spec/locus-info/selfUtils.js +21 -12
- package/test/unit/spec/meeting/effectsState.js +36 -46
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
- package/test/unit/spec/meeting/index.js +1279 -685
- package/test/unit/spec/meeting/muteState.js +42 -33
- package/test/unit/spec/meeting/request.js +57 -46
- package/test/unit/spec/meeting/utils.js +78 -53
- package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +110 -74
- package/test/unit/spec/meetings/collection.js +1 -1
- package/test/unit/spec/meetings/index.js +438 -257
- package/test/unit/spec/meetings/utils.js +14 -12
- package/test/unit/spec/member/index.js +0 -1
- package/test/unit/spec/member/util.js +5 -6
- package/test/unit/spec/members/index.js +104 -54
- package/test/unit/spec/members/request.js +29 -20
- package/test/unit/spec/members/utils.js +8 -5
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/networkQualityMonitor/index.js +21 -15
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +9 -11
- package/test/unit/spec/reconnection-manager/index.js +16 -18
- package/test/unit/spec/roap/turnDiscovery.ts +22 -19
- package/test/unit/spec/stats-analyzer/index.js +25 -20
- package/test/utils/cmr.js +44 -42
- package/test/utils/testUtils.js +83 -74
- package/test/utils/webex-config.js +18 -18
- package/test/utils/webex-test-users.js +53 -50
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NeedsRetryError","Error","NeedsRejoinError","wasSharing","error","ReconnectionManager","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","tryCount","DEFAULT_TRY_COUNT","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","clearTimeout","LoggerProxy","logger","log","resetReconnectionTimer","reject","setTimeout","IN_PROGRESS","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","networkDisconnect","networkRetry","id","validate","Metrics","postEvent","event","eventType","MEDIA_RECONNECTING","executeReconnection","then","MEDIA_RECOVERED","data","recoveredBy","RECOVERED_BY_NEW","catch","reconnectError","reconnect","message","reconnectMetric","CALL_ABORTED","errors","category","errorObjects","expected","errorCode","fatal","name","mediaEngine","shownToUser","rejoinMeeting","reconnectMercuryWebSocket","internal","device","url","FAILURE","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","meetings","syncMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","media","join","rejoin","Media","stopTracks","mediaProperties","shareTrack","isSharing","NO_SHARE","mediaDirection","sendShare","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","reason","SHARE_STOPPED_REASON","MEETING_REJOIN","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","closePeerConnections","unsetPeerConnection","roap","doTurnDiscovery","turnServerResult","mc","createMediaConnection","turnServerInfo","statsAnalyzer","updateMediaConnection","initiateOffer","mercury","connected","disconnect","connect"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectInProgress from '../common/errors/reconnection-in-progress';\nimport {eventType, reconnection, errorObjects} from '../metrics/config';\nimport Media from '../media';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n wasSharing: any;\n\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n*/\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n tryCount: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: Meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout\n };\n\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Number}\n * @private\n * @memberof ReconnectionManager\n */\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n // @ts-ignore\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @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('ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect');\n\n this.iceState.disconnected = true;\n\n return new Promise<void>((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n }\n else {\n this.iceState.disconnected = false;\n reject(new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`));\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n this.meeting = null;\n }\n\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return (this.status === RECONNECTION.STATE.IN_PROGRESS);\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectionError}\n * @private\n * @memberof ReconnectionManager\n */\n private validate() {\n if (this.meeting.config.reconnection.enabled) {\n if (\n this.status === RECONNECTION.STATE.DEFAULT_STATUS ||\n this.status === RECONNECTION.STATE.COMPLETE\n ) {\n return true;\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection already in progress.');\n\n throw new ReconnectInProgress('Reconnection already in progress.');\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection is not enabled.');\n\n throw new ReconnectionError('Reconnection is not enabled.');\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect({\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {}) {\n LoggerProxy.logger.info(`ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`);\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n }\n catch (error) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection unable to begin.', error);\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect start metric.');\n Metrics.postEvent({\n event: eventType.MEDIA_RECONNECTING,\n meeting: this.meeting\n });\n }\n\n return this.executeReconnection({networkDisconnect})\n .then(() => {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect success metric.');\n Metrics.postEvent({\n event: eventType.MEDIA_RECOVERED,\n meeting: this.meeting,\n data: {recoveredBy: reconnection.RECOVERED_BY_NEW}\n });\n })\n .catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.');\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n return this.reconnect({networkDisconnect: true, networkRetry: true});\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error('ReconnectionManager:index#reconnect --> Reconnection failed.', reconnectError.message);\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Sending reconnect abort metric.');\n\n const reconnectMetric = {\n event: eventType.CALL_ABORTED,\n meeting: this.meeting,\n data: {\n errors: [\n {\n category: errorObjects.category.expected,\n errorCode: 2008,\n fatal: true,\n name: errorObjects.name.mediaEngine,\n shownToUser: false\n }\n ]\n }\n };\n\n Metrics.postEvent(reconnectMetric);\n if (reconnectError instanceof NeedsRejoinError) {\n // send call aborded event with catogery as expected as we are trying to rejoin\n\n if (this.autoRejoinEnabled) {\n return this.rejoinMeeting(reconnectError.wasSharing);\n }\n }\n\n\n throw reconnectError;\n });\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n private async executeReconnection({ networkDisconnect = false }: { networkDisconnect?: boolean }) {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.');\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Websocket reconnected.', this.webex.internal.device.url);\n }\n catch (error) {\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.');\n this.status = RECONNECTION.STATE.FAILURE;\n throw (error);\n }\n }\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Updating meeting data from server.');\n await this.webex.meetings.syncMeetings();\n }\n catch (syncError) {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.', syncError);\n throw (new NeedsRetryError(syncError));\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info('ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely ');\n\n throw new Error('Unable to rejoin a meeting already ended or inactive .');\n }\n\n LoggerProxy.logger.info(`ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`);\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw (new NeedsRejoinError({wasSharing}));\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log('ReconnectionManager:index#executeReconnection --> Media reestablished');\n this.status = RECONNECTION.STATE.COMPLETE;\n\n return media;\n }\n catch (error) {\n LoggerProxy.logger.error('ReconnectionManager:index#executeReconnection --> Media reestablishment failed');\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw (error);\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing: boolean = false) {\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin');\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n // Stop the share streams if user tried to rejoin\n Media.stopTracks(this.meeting.mediaProperties.shareTrack);\n this.meeting.isSharing = false;\n if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;\n }\n this.meeting.mediaProperties.mediaDirection.sendShare = false;\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'rejoinMeeting'\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason: SHARE_STOPPED_REASON.MEETING_REJOIN\n }\n );\n }\n }\n catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(`ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`, joinError);\n this.rejoinMeeting();\n }\n else {\n LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.', joinError);\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE,\n {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack\n }\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n }\n catch (mediaError) {\n LoggerProxy.logger.error('ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.', mediaError);\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media');\n\n // we are not simply calling this.meeting.mediaProperties.webrtcMediaConnection.reconnect(),\n // but instead manually closing and creating new media connection, because we need to do the TURN discovery again\n\n await this.meeting.closePeerConnections();\n this.meeting.mediaProperties.unsetPeerConnection();\n\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true);\n\n const mc = this.meeting.createMediaConnection(turnServerResult.turnServerInfo);\n\n this.meeting.statsAnalyzer.updateMediaConnection(mc);\n\n return mc.initiateOffer();\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n private async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.');\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.');\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.');\n }\n catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.', disconnectError);\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.');\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info('ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.');\n }\n catch (connectError) {\n LoggerProxy.logger.error('ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.', connectError);\n\n throw (connectError);\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["NeedsRetryError","Error","NeedsRejoinError","wasSharing","error","ReconnectionManager","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","tryCount","DEFAULT_TRY_COUNT","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","clearTimeout","LoggerProxy","logger","log","resetReconnectionTimer","reject","setTimeout","IN_PROGRESS","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","networkDisconnect","networkRetry","id","validate","Metrics","postEvent","event","eventType","MEDIA_RECONNECTING","executeReconnection","then","MEDIA_RECOVERED","data","recoveredBy","RECOVERED_BY_NEW","catch","reconnectError","reconnect","message","reconnectMetric","CALL_ABORTED","errors","category","errorObjects","expected","errorCode","fatal","name","mediaEngine","shownToUser","rejoinMeeting","reconnectMercuryWebSocket","internal","device","url","FAILURE","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","meetings","syncMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","media","join","rejoin","Media","stopTracks","mediaProperties","shareTrack","isSharing","NO_SHARE","mediaDirection","sendShare","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","reason","SHARE_STOPPED_REASON","MEETING_REJOIN","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","closePeerConnections","unsetPeerConnection","roap","doTurnDiscovery","turnServerResult","mc","createMediaConnection","turnServerInfo","statsAnalyzer","updateMediaConnection","initiateOffer","mercury","connected","disconnect","connect"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectInProgress from '../common/errors/reconnection-in-progress';\nimport {eventType, reconnection, errorObjects} from '../metrics/config';\nimport Media from '../media';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n wasSharing: any;\n\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n */\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n tryCount: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: Meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,\n };\n\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Number}\n * @private\n * @memberof ReconnectionManager\n */\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n // @ts-ignore\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.resetReconnectionTimer();\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise<undefined>}\n * @public\n * @memberof ReconnectionManager\n */\n public waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\n\n this.iceState.disconnected = true;\n\n return new Promise<void>((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n this.meeting = null;\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectionError}\n * @private\n * @memberof ReconnectionManager\n */\n private validate() {\n if (this.meeting.config.reconnection.enabled) {\n if (\n this.status === RECONNECTION.STATE.DEFAULT_STATUS ||\n this.status === RECONNECTION.STATE.COMPLETE\n ) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#validate --> Reconnection already in progress.'\n );\n\n throw new ReconnectInProgress('Reconnection already in progress.');\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection is not enabled.');\n\n throw new ReconnectionError('Reconnection is not enabled.');\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect({\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {}) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n } catch (error) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection unable to begin.',\n error\n );\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n Metrics.postEvent({\n event: eventType.MEDIA_RECONNECTING,\n meeting: this.meeting,\n });\n }\n\n return this.executeReconnection({networkDisconnect})\n .then(() => {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect success metric.'\n );\n Metrics.postEvent({\n event: eventType.MEDIA_RECOVERED,\n meeting: this.meeting,\n data: {recoveredBy: reconnection.RECOVERED_BY_NEW},\n });\n })\n .catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n return this.reconnect({networkDisconnect: true, networkRetry: true});\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'\n );\n\n const reconnectMetric = {\n event: eventType.CALL_ABORTED,\n meeting: this.meeting,\n data: {\n errors: [\n {\n category: errorObjects.category.expected,\n errorCode: 2008,\n fatal: true,\n name: errorObjects.name.mediaEngine,\n shownToUser: false,\n },\n ],\n },\n };\n\n Metrics.postEvent(reconnectMetric);\n if (reconnectError instanceof NeedsRejoinError) {\n // send call aborded event with catogery as expected as we are trying to rejoin\n\n if (this.autoRejoinEnabled) {\n return this.rejoinMeeting(reconnectError.wasSharing);\n }\n }\n\n throw reconnectError;\n });\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n 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 const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings();\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\n throw new NeedsRetryError(syncError);\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely '\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive .');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw new NeedsRejoinError({wasSharing});\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#executeReconnection --> Media reestablished'\n );\n this.status = RECONNECTION.STATE.COMPLETE;\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Media reestablishment failed'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw error;\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing = false) {\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n // Stop the share streams if user tried to rejoin\n Media.stopTracks(this.meeting.mediaProperties.shareTrack);\n this.meeting.isSharing = false;\n if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;\n }\n this.meeting.mediaProperties.mediaDirection.sendShare = false;\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'rejoinMeeting',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason: SHARE_STOPPED_REASON.MEETING_REJOIN,\n }\n );\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media'\n );\n\n // we are not simply calling this.meeting.mediaProperties.webrtcMediaConnection.reconnect(),\n // but instead manually closing and creating new media connection, because we need to do the TURN discovery again\n\n await this.meeting.closePeerConnections();\n this.meeting.mediaProperties.unsetPeerConnection();\n\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true);\n\n const mc = this.meeting.createMediaConnection(turnServerResult.turnServerInfo);\n\n this.meeting.statsAnalyzer.updateMediaConnection(mc);\n\n return mc.initiateOffer();\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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"}
|
package/dist/roap/index.js
CHANGED
|
@@ -1,47 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
|
|
5
4
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
6
|
-
|
|
7
5
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
8
|
-
|
|
9
6
|
_Object$defineProperty(exports, "__esModule", {
|
|
10
7
|
value: true
|
|
11
8
|
});
|
|
12
|
-
|
|
13
9
|
exports.default = void 0;
|
|
14
|
-
|
|
15
10
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
16
|
-
|
|
17
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
18
|
-
|
|
19
12
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
20
|
-
|
|
21
13
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
|
22
|
-
|
|
23
14
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
24
|
-
|
|
25
15
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
26
|
-
|
|
27
16
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
28
|
-
|
|
29
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
30
|
-
|
|
31
18
|
var _webexCore = require("@webex/webex-core");
|
|
32
|
-
|
|
33
19
|
var _constants = require("../constants");
|
|
34
|
-
|
|
35
20
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
36
|
-
|
|
37
21
|
var _request = _interopRequireDefault(require("./request"));
|
|
38
|
-
|
|
39
22
|
var _turnDiscovery = _interopRequireDefault(require("./turnDiscovery"));
|
|
40
|
-
|
|
41
23
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
42
|
-
|
|
43
24
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
44
|
-
|
|
45
25
|
/**
|
|
46
26
|
* Roap options
|
|
47
27
|
* @typedef {Object} RoapOptions
|
|
@@ -51,14 +31,12 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
|
|
|
51
31
|
* @property {Number} tieBreaker
|
|
52
32
|
* @property {Boolean} reconnect
|
|
53
33
|
*/
|
|
54
|
-
|
|
55
34
|
/**
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
35
|
+
* @typedef {Object} SeqOptions
|
|
36
|
+
* @property {String} correlationId
|
|
37
|
+
* @property {String} mediaId
|
|
38
|
+
* @property {Number} seq
|
|
39
|
+
*/
|
|
62
40
|
/**
|
|
63
41
|
* @class Roap
|
|
64
42
|
* @export
|
|
@@ -66,9 +44,7 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
|
|
|
66
44
|
*/
|
|
67
45
|
var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
68
46
|
(0, _inherits2.default)(Roap, _StatelessWebexPlugin);
|
|
69
|
-
|
|
70
47
|
var _super = _createSuper(Roap);
|
|
71
|
-
|
|
72
48
|
/**
|
|
73
49
|
*
|
|
74
50
|
* @param {Object} attrs
|
|
@@ -76,7 +52,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
76
52
|
*/
|
|
77
53
|
function Roap(attrs, options) {
|
|
78
54
|
var _this;
|
|
79
|
-
|
|
80
55
|
(0, _classCallCheck2.default)(this, Roap);
|
|
81
56
|
_this = _super.call(this, {}, options);
|
|
82
57
|
/**
|
|
@@ -85,7 +60,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
85
60
|
* @private
|
|
86
61
|
* @memberof Roap
|
|
87
62
|
*/
|
|
88
|
-
|
|
89
63
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "attrs", void 0);
|
|
90
64
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastRoapOffer", void 0);
|
|
91
65
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "options", void 0);
|
|
@@ -99,7 +73,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
99
73
|
* @private
|
|
100
74
|
* @memberof Roap
|
|
101
75
|
*/
|
|
102
|
-
|
|
103
76
|
_this.options = options;
|
|
104
77
|
/**
|
|
105
78
|
* The Roap Request Server Proxy Object
|
|
@@ -109,36 +82,30 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
109
82
|
* @memberof Roap
|
|
110
83
|
*/
|
|
111
84
|
// @ts-ignore
|
|
112
|
-
|
|
113
85
|
_this.roapRequest = new _request.default({}, options);
|
|
114
86
|
_this.turnDiscovery = new _turnDiscovery.default(_this.roapRequest);
|
|
115
87
|
return _this;
|
|
116
88
|
}
|
|
89
|
+
|
|
117
90
|
/**
|
|
118
91
|
*
|
|
119
92
|
* @param {SeqOptions} options
|
|
120
93
|
* @returns {null}
|
|
121
94
|
* @memberof Roap
|
|
122
95
|
*/
|
|
123
|
-
|
|
124
|
-
|
|
125
96
|
(0, _createClass2.default)(Roap, [{
|
|
126
97
|
key: "sendRoapOK",
|
|
127
98
|
value: function sendRoapOK(options) {
|
|
128
99
|
var _this2 = this;
|
|
129
|
-
|
|
130
100
|
return _promise.default.resolve().then(function () {
|
|
131
101
|
// @ts-ignore
|
|
132
102
|
var meeting = _this2.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);
|
|
133
|
-
|
|
134
103
|
var roapMessage = {
|
|
135
104
|
messageType: _constants.ROAP.ROAP_TYPES.OK,
|
|
136
105
|
version: _constants.ROAP.ROAP_VERSION,
|
|
137
106
|
seq: options.seq
|
|
138
107
|
};
|
|
139
|
-
|
|
140
108
|
_loggerProxy.default.logger.log("Roap:index#sendRoapOK --> ROAP OK sending with seq ".concat(options.seq));
|
|
141
|
-
|
|
142
109
|
return _this2.roapRequest.sendRoap({
|
|
143
110
|
roapMessage: roapMessage,
|
|
144
111
|
locusSelfUrl: meeting.selfUrl,
|
|
@@ -153,6 +120,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
153
120
|
});
|
|
154
121
|
});
|
|
155
122
|
}
|
|
123
|
+
|
|
156
124
|
/**
|
|
157
125
|
* Sends a ROAP answer...
|
|
158
126
|
* @param {SeqOptions} options
|
|
@@ -161,7 +129,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
161
129
|
* @returns {Promise}
|
|
162
130
|
* @memberof Roap
|
|
163
131
|
*/
|
|
164
|
-
|
|
165
132
|
}, {
|
|
166
133
|
key: "sendRoapAnswer",
|
|
167
134
|
value: function sendRoapAnswer(options) {
|
|
@@ -184,13 +151,13 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
184
151
|
preferTranscoding: !meeting.isMultistream
|
|
185
152
|
});
|
|
186
153
|
}
|
|
154
|
+
|
|
187
155
|
/**
|
|
188
156
|
* Sends a ROAP error...
|
|
189
157
|
* @param {Object} options
|
|
190
158
|
* @returns {Promise}
|
|
191
159
|
* @memberof Roap
|
|
192
160
|
*/
|
|
193
|
-
|
|
194
161
|
}, {
|
|
195
162
|
key: "sendRoapError",
|
|
196
163
|
value: function sendRoapError(options) {
|
|
@@ -215,31 +182,32 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
215
182
|
_loggerProxy.default.logger.log("Roap:index#sendRoapError --> ROAP ERROR sent with seq ".concat(options.seq));
|
|
216
183
|
});
|
|
217
184
|
}
|
|
185
|
+
|
|
218
186
|
/**
|
|
219
187
|
* sends a roap media request
|
|
220
188
|
* @param {RoapOptions} options
|
|
221
189
|
* @returns {Promise}
|
|
222
190
|
* @memberof Roap
|
|
223
191
|
*/
|
|
224
|
-
|
|
225
192
|
}, {
|
|
226
193
|
key: "sendRoapMediaRequest",
|
|
227
194
|
value: function sendRoapMediaRequest(options) {
|
|
228
195
|
var meeting = options.meeting,
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
196
|
+
seq = options.seq,
|
|
197
|
+
sdp = options.sdp,
|
|
198
|
+
reconnect = options.reconnect,
|
|
199
|
+
tieBreaker = options.tieBreaker;
|
|
233
200
|
var roapMessage = {
|
|
234
201
|
messageType: _constants.ROAP.ROAP_TYPES.OFFER,
|
|
235
202
|
sdps: [sdp],
|
|
236
203
|
version: _constants.ROAP.ROAP_VERSION,
|
|
237
204
|
seq: seq,
|
|
238
205
|
tieBreaker: tieBreaker
|
|
239
|
-
};
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
// When reconnecting, it's important that the first roap message being sent out has empty media id.
|
|
240
209
|
// Normally this is the roap offer, but when TURN discovery is enabled,
|
|
241
210
|
// then this is the TURN discovery request message
|
|
242
|
-
|
|
243
211
|
var sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;
|
|
244
212
|
return this.roapRequest.sendRoap({
|
|
245
213
|
roapMessage: roapMessage,
|
|
@@ -252,15 +220,14 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
252
220
|
preferTranscoding: !meeting.isMultistream
|
|
253
221
|
}).then(function (_ref) {
|
|
254
222
|
var locus = _ref.locus,
|
|
255
|
-
|
|
256
|
-
|
|
223
|
+
mediaConnections = _ref.mediaConnections;
|
|
257
224
|
if (mediaConnections) {
|
|
258
225
|
meeting.updateMediaConnections(mediaConnections);
|
|
259
226
|
}
|
|
260
|
-
|
|
261
227
|
return locus;
|
|
262
228
|
});
|
|
263
229
|
}
|
|
230
|
+
|
|
264
231
|
/**
|
|
265
232
|
* Performs a TURN server discovery procedure, which involves exchanging
|
|
266
233
|
* some roap messages with the server. This exchange has to be done before
|
|
@@ -271,7 +238,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
271
238
|
* media connection just after a reconnection
|
|
272
239
|
* @returns {Promise}
|
|
273
240
|
*/
|
|
274
|
-
|
|
275
241
|
}, {
|
|
276
242
|
key: "doTurnDiscovery",
|
|
277
243
|
value: function doTurnDiscovery(meeting, isReconnecting) {
|
|
@@ -280,6 +246,5 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
280
246
|
}]);
|
|
281
247
|
return Roap;
|
|
282
248
|
}(_webexCore.StatelessWebexPlugin);
|
|
283
|
-
|
|
284
249
|
exports.default = Roap;
|
|
285
250
|
//# sourceMappingURL=index.js.map
|
package/dist/roap/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Roap","attrs","options","roapRequest","RoapRequest","turnDiscovery","TurnDiscovery","resolve","then","meeting","webex","meetings","meetingCollection","getByKey","correlationId","roapMessage","messageType","ROAP","ROAP_TYPES","OK","version","ROAP_VERSION","seq","LoggerProxy","logger","log","sendRoap","locusSelfUrl","selfUrl","mediaId","audioMuted","isAudioMuted","videoMuted","isVideoMuted","meetingId","id","preferTranscoding","isMultistream","ANSWER","sdps","sdp","ERROR","errorType","reconnect","tieBreaker","OFFER","sendEmptyMediaId","config","experimental","enableTurnDiscovery","locus","mediaConnections","updateMediaConnections","isReconnecting","doTurnDiscovery","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport RoapRequest from './request';\nimport TurnDiscovery from './turnDiscovery';\nimport Meeting from '../meeting';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} 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: any;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap 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('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\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('correlationId', options.correlationId);\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\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\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('correlationId', options.correlationId);\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\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`);\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 {\n meeting, seq, sdp, reconnect, tieBreaker\n } = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker\n };\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n const sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n })\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n return locus;\n });\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Roap","attrs","options","roapRequest","RoapRequest","turnDiscovery","TurnDiscovery","resolve","then","meeting","webex","meetings","meetingCollection","getByKey","correlationId","roapMessage","messageType","ROAP","ROAP_TYPES","OK","version","ROAP_VERSION","seq","LoggerProxy","logger","log","sendRoap","locusSelfUrl","selfUrl","mediaId","audioMuted","isAudioMuted","videoMuted","isVideoMuted","meetingId","id","preferTranscoding","isMultistream","ANSWER","sdps","sdp","ERROR","errorType","reconnect","tieBreaker","OFFER","sendEmptyMediaId","config","experimental","enableTurnDiscovery","locus","mediaConnections","updateMediaConnections","isReconnecting","doTurnDiscovery","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport RoapRequest from './request';\nimport TurnDiscovery from './turnDiscovery';\nimport Meeting from '../meeting';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} 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: any;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap 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 correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\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 correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\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 correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\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, reconnect, tieBreaker} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker,\n };\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n const sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n })\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n return locus;\n });\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":"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"}
|
package/dist/roap/request.js
CHANGED
|
@@ -1,74 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
|
|
5
4
|
var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
6
|
-
|
|
7
5
|
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
8
|
-
|
|
9
6
|
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
10
|
-
|
|
11
7
|
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
12
|
-
|
|
13
8
|
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
14
|
-
|
|
15
9
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
16
|
-
|
|
17
10
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
18
|
-
|
|
19
11
|
_Object$defineProperty(exports, "__esModule", {
|
|
20
12
|
value: true
|
|
21
13
|
});
|
|
22
|
-
|
|
23
14
|
exports.default = void 0;
|
|
24
|
-
|
|
25
15
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
26
|
-
|
|
27
16
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
28
|
-
|
|
29
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
30
|
-
|
|
31
18
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
32
|
-
|
|
33
19
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
34
|
-
|
|
35
20
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
36
|
-
|
|
37
21
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
38
|
-
|
|
39
22
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
40
|
-
|
|
41
23
|
var _webexCore = require("@webex/webex-core");
|
|
42
|
-
|
|
43
24
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
44
|
-
|
|
45
25
|
var _constants = require("../constants");
|
|
46
|
-
|
|
47
26
|
var _metrics = _interopRequireDefault(require("../metrics"));
|
|
48
|
-
|
|
49
27
|
var _config = require("../metrics/config");
|
|
50
|
-
|
|
51
28
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
52
|
-
|
|
53
29
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
54
|
-
|
|
55
30
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
56
|
-
|
|
57
31
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
58
|
-
|
|
59
32
|
/**
|
|
60
33
|
* @class RoapRequest
|
|
61
34
|
*/
|
|
62
35
|
var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
63
36
|
(0, _inherits2.default)(RoapRequest, _StatelessWebexPlugin);
|
|
64
|
-
|
|
65
37
|
var _super = _createSuper(RoapRequest);
|
|
66
|
-
|
|
67
38
|
function RoapRequest() {
|
|
68
39
|
(0, _classCallCheck2.default)(this, RoapRequest);
|
|
69
40
|
return _super.apply(this, arguments);
|
|
70
41
|
}
|
|
71
|
-
|
|
72
42
|
(0, _createClass2.default)(RoapRequest, [{
|
|
73
43
|
key: "attachRechabilityData",
|
|
74
44
|
value:
|
|
@@ -77,14 +47,14 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
77
47
|
* @param {Object} options
|
|
78
48
|
* @returns {Promise} returns a promise that resolves/rejects whatever the request does
|
|
79
49
|
*/
|
|
50
|
+
|
|
80
51
|
function attachRechabilityData(localSdp) {
|
|
81
52
|
var reachabilityData = window.localStorage.getItem(_constants.REACHABILITY.localStorage);
|
|
82
|
-
|
|
83
53
|
if (reachabilityData) {
|
|
84
54
|
try {
|
|
85
55
|
var reachabilityResult = JSON.parse(reachabilityData);
|
|
86
|
-
/* istanbul ignore else */
|
|
87
56
|
|
|
57
|
+
/* istanbul ignore else */
|
|
88
58
|
if (reachabilityResult && (0, _keys.default)(reachabilityResult).length) {
|
|
89
59
|
localSdp.reachability = reachabilityResult;
|
|
90
60
|
}
|
|
@@ -92,9 +62,9 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
92
62
|
_loggerProxy.default.logger.error("Roap:request#attachReachabilityData --> Error in parsing reachability data: ".concat(e));
|
|
93
63
|
}
|
|
94
64
|
}
|
|
95
|
-
|
|
96
65
|
return localSdp;
|
|
97
66
|
}
|
|
67
|
+
|
|
98
68
|
/**
|
|
99
69
|
* Sends a ROAP message
|
|
100
70
|
* @param {Object} options
|
|
@@ -107,34 +77,28 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
107
77
|
* @param {String} options.meetingId
|
|
108
78
|
* @returns {Promise} returns the response/failure of the request
|
|
109
79
|
*/
|
|
110
|
-
|
|
111
80
|
}, {
|
|
112
81
|
key: "sendRoap",
|
|
113
82
|
value: function sendRoap(options) {
|
|
114
83
|
var _options$preferTransc;
|
|
115
|
-
|
|
116
84
|
var roapMessage = options.roapMessage,
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
85
|
+
locusSelfUrl = options.locusSelfUrl,
|
|
86
|
+
mediaId = options.mediaId,
|
|
87
|
+
correlationId = options.correlationId,
|
|
88
|
+
meetingId = options.meetingId;
|
|
122
89
|
if (!mediaId) {
|
|
123
90
|
_loggerProxy.default.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
|
|
124
91
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
92
|
+
var mediaUrl = "".concat(locusSelfUrl, "/").concat(_constants.MEDIA);
|
|
93
|
+
// @ts-ignore
|
|
128
94
|
var deviceUrl = this.webex.internal.device.url;
|
|
129
|
-
|
|
130
95
|
_loggerProxy.default.logger.info("Roap:request#sendRoap --> ".concat(mediaUrl, " \n ").concat(roapMessage.messageType, " \n seq:").concat(roapMessage.seq));
|
|
131
|
-
|
|
132
96
|
_metrics.default.postEvent({
|
|
133
97
|
event: _config.eventType.MEDIA_REQUEST,
|
|
134
98
|
meetingId: meetingId
|
|
135
|
-
});
|
|
136
|
-
|
|
99
|
+
});
|
|
137
100
|
|
|
101
|
+
// @ts-ignore
|
|
138
102
|
return this.webex.request({
|
|
139
103
|
uri: mediaUrl,
|
|
140
104
|
method: _constants.HTTP_VERBS.PUT,
|
|
@@ -163,13 +127,11 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
163
127
|
_metrics.default.postEvent({
|
|
164
128
|
event: _config.eventType.MEDIA_RESPONSE,
|
|
165
129
|
meetingId: meetingId
|
|
166
|
-
});
|
|
167
|
-
|
|
130
|
+
});
|
|
168
131
|
|
|
132
|
+
// always it will be the first mediaConnection Object
|
|
169
133
|
var mediaConnections = res.body.mediaConnections && res.body.mediaConnections.length > 0 && res.body.mediaConnections[0];
|
|
170
|
-
|
|
171
134
|
_loggerProxy.default.logger.info("Roap:request#sendRoap --> response:".concat((0, _stringify.default)(mediaConnections, null, 2), "'\n StatusCode:'").concat(res.statusCode));
|
|
172
|
-
|
|
173
135
|
var locus = res.body.locus;
|
|
174
136
|
locus.roapSeq = options.roapMessage.seq;
|
|
175
137
|
return _objectSpread({
|
|
@@ -185,17 +147,13 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
185
147
|
error: _metrics.default.parseLocusError(err, true)
|
|
186
148
|
}
|
|
187
149
|
});
|
|
188
|
-
|
|
189
150
|
_loggerProxy.default.logger.error("Roap:request#sendRoap --> Error:".concat((0, _stringify.default)(err, null, 2)));
|
|
190
|
-
|
|
191
151
|
_loggerProxy.default.logger.error("Roap:request#sendRoapRequest --> errorBody:".concat((0, _stringify.default)(roapMessage, null, 2), " + '\\n mediaId:'").concat(options.mediaId));
|
|
192
|
-
|
|
193
152
|
throw err;
|
|
194
153
|
});
|
|
195
154
|
}
|
|
196
155
|
}]);
|
|
197
156
|
return RoapRequest;
|
|
198
157
|
}(_webexCore.StatelessWebexPlugin);
|
|
199
|
-
|
|
200
158
|
exports.default = RoapRequest;
|
|
201
159
|
//# sourceMappingURL=request.js.map
|