@webex/plugin-meetings 2.37.0 → 2.37.1
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 +7 -46
- 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 +46 -42
- 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 -37
- 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 +74 -137
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +64 -110
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +3 -17
- 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 +812 -1487
- 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 +157 -227
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +25 -169
- 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 +451 -570
- 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 +94 -148
- 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 +68 -184
- 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/networkQualityMonitor/index.js +28 -57
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.js +60 -190
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/peer-connection-manager/util.js +10 -24
- package/dist/peer-connection-manager/util.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 +0 -5
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +294 -468
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/collection.js +1 -12
- package/dist/roap/collection.js.map +1 -1
- package/dist/roap/handler.js +15 -85
- package/dist/roap/handler.js.map +1 -1
- package/dist/roap/index.js +42 -94
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +81 -148
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.js +2 -39
- package/dist/roap/state.js.map +1 -1
- package/dist/roap/turnDiscovery.js +8 -52
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.js +0 -26
- package/dist/roap/util.js.map +1 -1
- package/dist/statsAnalyzer/global.js +0 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +68 -168
- 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 +17 -17
- 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 +138 -119
- 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 +118 -109
- package/src/media/properties.ts +26 -20
- package/src/media/util.ts +2 -2
- 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 +1435 -1210
- package/src/meeting/muteState.ts +62 -31
- package/src/meeting/request.ts +160 -113
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +131 -90
- 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 +513 -441
- package/src/meetings/request.ts +26 -24
- package/src/meetings/util.ts +26 -23
- 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 +172 -121
- 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/networkQualityMonitor/index.ts +20 -23
- package/src/peer-connection-manager/index.ts +321 -241
- package/src/peer-connection-manager/util.ts +4 -2
- 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 +2 -3
- package/src/reconnection-manager/index.ts +159 -98
- package/src/roap/collection.ts +2 -4
- package/src/roap/handler.ts +63 -32
- package/src/roap/index.ts +78 -58
- package/src/roap/request.ts +69 -54
- package/src/roap/state.ts +17 -11
- package/src/roap/turnDiscovery.ts +60 -31
- package/src/roap/util.ts +39 -31
- package/src/statsAnalyzer/global.ts +30 -33
- package/src/statsAnalyzer/index.ts +397 -169
- package/src/statsAnalyzer/mqaUtil.ts +178 -72
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/journey.js +666 -462
- package/test/integration/spec/space-meeting.js +318 -203
- package/test/integration/spec/transcription.js +6 -7
- 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 +24 -31
- 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 +33 -45
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
- package/test/unit/spec/meeting/index.js +1141 -649
- package/test/unit/spec/meeting/muteState.js +42 -33
- package/test/unit/spec/meeting/request.js +56 -45
- package/test/unit/spec/meeting/utils.js +66 -49
- 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 +84 -35
- 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/peerconnection-manager/index.js +88 -58
- package/test/unit/spec/peerconnection-manager/utils.js +5 -4
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +7 -8
- 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 +14 -17
- package/test/unit/spec/roap/index.ts +18 -8
- package/test/unit/spec/roap/turnDiscovery.ts +22 -19
- package/test/unit/spec/roap/util.js +3 -3
- package/test/unit/spec/stats-analyzer/index.js +29 -24
- 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
package/dist/roap/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["checkForAndHandleErrors","action","meeting","correlationId","type","msg","messageType","errorType","RoapUtil","findError","handleError","mediaProperties","peerConnection","then","res","RoapCollection","deleteSessionSequence","seq","catch","err","LoggerProxy","logger","warn","ensureMeeting","compareWithLastRoapMessage","lastRoapMessage","currentRoapMessage","handleSessionStep","roap","session","locusUrl","sequenceId","OFFER","_OFFER_","GLARE_OFFER","remote","metricName","BEHAVIORAL_METRICS","ROAP_GLARE_CONDITION","data","correlation_id","locus_id","split","pop","sequence","Metrics","sendBehavioralMetric","info","state","RoapHandler","attrs","options","roapOk","roapAnswer","roapFinished","ROAP","ROAP_STATE","INIT","WAIT_TX_ANSWER","shouldHandleMedia","updatePeerConnection","answerSdps","mediaId","sdps","audioMuted","isAudioMuted","videoMuted","isVideoMuted","error","ROAP_ANSWER_FAILURE","reason","message","stack","metadata","name","WAIT_TX_OK","setRemoteDescription","ERROR","GLARE","tieBreaker","log","step","ROAP_SIGNAL","GLARE_RESOLVED","perform","signal","prefix","RECEIVE_ROAP_MSG","execute","RX_","SEND_ROAP_MSG","local","TX_","SEND_ROAP_MSG_SUCCESS","RECEIVE_CALL_LEAVE","deleteSession","RESET_ROAP_STATE","getSessionSequence","webex","meetings","meetingCollection","getByKey","handleAction","StatelessWebexPlugin"],"sources":["handler.ts"],"sourcesContent":["/* no-param-reassign */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_} from '../constants';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nimport RoapUtil from './util';\nimport RoapCollection from './collection';\nimport Meeting from '../meeting';\n\n\nconst checkForAndHandleErrors = (action, meeting, correlationId) => {\n if (action && action.type) {\n if (action.msg && action.msg.messageType && action.msg.errorType) {\n if (RoapUtil.findError(action.msg.messageType, action.msg.errorType, action.type)) {\n RoapUtil.handleError(meeting.mediaProperties.peerConnection)\n .then((res) => {\n if (res) {\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.warn(`Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ${err}`);\n });\n\n return true;\n }\n }\n if (!RoapUtil.ensureMeeting(meeting, action.type)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst compareWithLastRoapMessage = (lastRoapMessage, currentRoapMessage) => lastRoapMessage?.msg?.seq === currentRoapMessage.msg.seq && lastRoapMessage?.msg?.messageType === currentRoapMessage.msg.messageType;\n\nconst handleSessionStep = ({\n roap, session, locusUrl, correlationId\n}) => {\n const {seq: sequenceId, messageType} = roap.msg;\n\n if (session.OFFER && messageType === _OFFER_) {\n session.GLARE_OFFER = roap.msg;\n session.GLARE_OFFER.remote = !!roap.remote;\n const metricName = BEHAVIORAL_METRICS.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId\n };\n\n Metrics.sendBehavioralMetric(metricName, data);\n\n LoggerProxy.logger.warn(`Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ${sequenceId}`);\n }\n else {\n LoggerProxy.logger.info(`Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:${sequenceId} new mercury event ${messageType}local state: ${JSON.stringify(session.state.state, null, 2)}`);\n session[messageType] = roap.msg;\n session[messageType].remote = !!roap.remote;\n }\n};\n\n/**\n * @class RoapHandler\n */\nexport default class RoapHandler extends StatelessWebexPlugin {\n attrs: any;\n lastRoapMessage: any;\n options: any;\n roapAnswer: any;\n roapFinished: any;\n roapOk: any;\n \n constructor(attrs, options, roapOk, roapAnswer, roapFinished) {\n super({}, options);\n this.attrs = attrs;\n this.options = options;\n this.roapOk = roapOk;\n this.roapFinished = roapFinished;\n this.roapAnswer = roapAnswer;\n this.lastRoapMessage = null;\n }\n\n /**\n *\n * @param {Object} session\n * @param {Meeting} meeting\n * @param {Object} action\n * @returns {null}\n */\n perform(session: any, meeting: any, action: any) {\n switch (session.state.state) {\n case ROAP.ROAP_STATE.INIT:\n this.roapFinished(meeting.correlationId, action.msg.seq);\n break;\n\n // TODO: (important )handle roap state for sending offers as well\n // case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n // case ROAP.ROAP_STATE.WAIT_RX_OK:\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n // eslint-disable-next-line no-warning-comments\n // TODO: sometime the you get an answer while you are creating an offer so SKIP\n // Server will send the mercury event comes back\n if (RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.updatePeerConnection(meeting, session)\n .then((answerSdps) => {\n this.roapAnswer({\n mediaId: meeting.mediaId,\n sdps: answerSdps,\n seq: session.OFFER.seq,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted()\n });\n })\n .catch((error) => {\n const metricName = BEHAVIORAL_METRICS.ROAP_ANSWER_FAILURE;\n const data = {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack\n };\n const metadata = {\n type: error.name\n };\n\n Metrics.sendBehavioralMetric(metricName, data, metadata);\n LoggerProxy.logger.error(`Roap:handler#perform --> Error occured during wait receive answer, continuing, ${error}`);\n });\n }\n break;\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (!RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.setRemoteDescription(meeting, session).then((res) => {\n this.roapOk(res);\n });\n }\n break;\n // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:\n case ROAP.ROAP_STATE.ERROR:\n LoggerProxy.logger.error(`Roap:handler#perform --> Roap State ERROR for session: ${session}`);\n break;\n case ROAP.ROAP_STATE.GLARE:\n session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;\n session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;\n LoggerProxy.logger.warn('Roap:handler#perform --> Roap State resolved the GLARE condition.');\n if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {\n // 2\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State local offer won after GLARE.');\n }\n else {\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State remote offer won after GLARE.');\n }\n session.state.step(ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);\n // @ts-ignore\n this.perform(session, meeting);\n break;\n default:\n break;\n }\n }\n\n /**\n *\n * @param {String} signal\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} prefix\n * @returns {null}\n */\n execute(signal: string, session: any, action: any, meeting: Meeting, prefix: string) {\n if (session && session.state) {\n handleSessionStep({\n roap: action,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n session\n });\n signal = ROAP.ROAP_SIGNAL[`${prefix}${action.msg.messageType}`];\n session.state.step(signal, meeting, action);\n this.perform(session, meeting, action);\n }\n }\n\n /**\n *\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} correlationId\n * @returns {Boolean}\n */\n handleAction(session: object, action: any, meeting: Meeting, correlationId: string) {\n let signal;\n\n\n switch (action.type) {\n case ROAP.RECEIVE_ROAP_MSG:\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ${JSON.stringify(action)}`);\n if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {\n LoggerProxy.logger.warn(`Roap:handler#handleAction --> duplicate roap offer from server: ${action.msg.seq}`);\n }\n else {\n this.lastRoapMessage = action;\n action.remote = true;\n this.execute(signal, session, action, meeting, ROAP.RX_);\n }\n break;\n case ROAP.SEND_ROAP_MSG:\n LoggerProxy.logger.log(`Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ${JSON.stringify(action)}`);\n\n action.local = true;\n this.execute(signal, session, action, meeting, ROAP.TX_);\n break;\n case ROAP.SEND_ROAP_MSG_SUCCESS:\n // NOTE: When server send back an answer via mercury the\n // remote SDP is already saved sent and ok message is sent back\n // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS\n break;\n case ROAP.RECEIVE_CALL_LEAVE:\n RoapCollection.deleteSession(correlationId);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ${correlationId}`); break;\n case ROAP.RESET_ROAP_STATE:\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ${action.msg.seq}`); break;\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n *\n * @param {Object} action\n * @returns {Boolean}\n */\n submit(action: any) {\n const {correlationId} = action;\n let {seq} = action;\n\n if (!seq && action.msg) {\n seq = action.msg.seq;\n }\n const session = RoapCollection.getSessionSequence(correlationId, seq);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n if (checkForAndHandleErrors(action, meeting, correlationId)) {\n return true;\n }\n\n return this.handleAction(session, action, meeting, correlationId);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["checkForAndHandleErrors","action","meeting","correlationId","type","msg","messageType","errorType","RoapUtil","findError","handleError","mediaProperties","peerConnection","then","res","RoapCollection","deleteSessionSequence","seq","catch","err","LoggerProxy","logger","warn","ensureMeeting","compareWithLastRoapMessage","lastRoapMessage","currentRoapMessage","handleSessionStep","roap","session","locusUrl","sequenceId","OFFER","_OFFER_","GLARE_OFFER","remote","metricName","BEHAVIORAL_METRICS","ROAP_GLARE_CONDITION","data","correlation_id","locus_id","split","pop","sequence","Metrics","sendBehavioralMetric","info","state","RoapHandler","attrs","options","roapOk","roapAnswer","roapFinished","ROAP","ROAP_STATE","INIT","WAIT_TX_ANSWER","shouldHandleMedia","updatePeerConnection","answerSdps","mediaId","sdps","audioMuted","isAudioMuted","videoMuted","isVideoMuted","error","ROAP_ANSWER_FAILURE","reason","message","stack","metadata","name","WAIT_TX_OK","setRemoteDescription","ERROR","GLARE","tieBreaker","log","step","ROAP_SIGNAL","GLARE_RESOLVED","perform","signal","prefix","RECEIVE_ROAP_MSG","execute","RX_","SEND_ROAP_MSG","local","TX_","SEND_ROAP_MSG_SUCCESS","RECEIVE_CALL_LEAVE","deleteSession","RESET_ROAP_STATE","getSessionSequence","webex","meetings","meetingCollection","getByKey","handleAction","StatelessWebexPlugin"],"sources":["handler.ts"],"sourcesContent":["/* no-param-reassign */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_} from '../constants';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nimport RoapUtil from './util';\nimport RoapCollection from './collection';\nimport Meeting from '../meeting';\n\nconst checkForAndHandleErrors = (action, meeting, correlationId) => {\n if (action && action.type) {\n if (action.msg && action.msg.messageType && action.msg.errorType) {\n if (RoapUtil.findError(action.msg.messageType, action.msg.errorType, action.type)) {\n RoapUtil.handleError(meeting.mediaProperties.peerConnection)\n .then((res) => {\n if (res) {\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.warn(\n `Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ${err}`\n );\n });\n\n return true;\n }\n }\n if (!RoapUtil.ensureMeeting(meeting, action.type)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst compareWithLastRoapMessage = (lastRoapMessage, currentRoapMessage) =>\n lastRoapMessage?.msg?.seq === currentRoapMessage.msg.seq &&\n lastRoapMessage?.msg?.messageType === currentRoapMessage.msg.messageType;\n\nconst handleSessionStep = ({roap, session, locusUrl, correlationId}) => {\n const {seq: sequenceId, messageType} = roap.msg;\n\n if (session.OFFER && messageType === _OFFER_) {\n session.GLARE_OFFER = roap.msg;\n session.GLARE_OFFER.remote = !!roap.remote;\n const metricName = BEHAVIORAL_METRICS.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId,\n };\n\n Metrics.sendBehavioralMetric(metricName, data);\n\n LoggerProxy.logger.warn(\n `Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ${sequenceId}`\n );\n } else {\n LoggerProxy.logger.info(\n `Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:${sequenceId} new mercury event ${messageType}local state: ${JSON.stringify(\n session.state.state,\n null,\n 2\n )}`\n );\n session[messageType] = roap.msg;\n session[messageType].remote = !!roap.remote;\n }\n};\n\n/**\n * @class RoapHandler\n */\nexport default class RoapHandler extends StatelessWebexPlugin {\n attrs: any;\n lastRoapMessage: any;\n options: any;\n roapAnswer: any;\n roapFinished: any;\n roapOk: any;\n\n constructor(attrs, options, roapOk, roapAnswer, roapFinished) {\n super({}, options);\n this.attrs = attrs;\n this.options = options;\n this.roapOk = roapOk;\n this.roapFinished = roapFinished;\n this.roapAnswer = roapAnswer;\n this.lastRoapMessage = null;\n }\n\n /**\n *\n * @param {Object} session\n * @param {Meeting} meeting\n * @param {Object} action\n * @returns {null}\n */\n perform(session: any, meeting: any, action: any) {\n switch (session.state.state) {\n case ROAP.ROAP_STATE.INIT:\n this.roapFinished(meeting.correlationId, action.msg.seq);\n break;\n\n // TODO: (important )handle roap state for sending offers as well\n // case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n // case ROAP.ROAP_STATE.WAIT_RX_OK:\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n // eslint-disable-next-line no-warning-comments\n // TODO: sometime the you get an answer while you are creating an offer so SKIP\n // Server will send the mercury event comes back\n if (RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.updatePeerConnection(meeting, session)\n .then((answerSdps) => {\n this.roapAnswer({\n mediaId: meeting.mediaId,\n sdps: answerSdps,\n seq: session.OFFER.seq,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n });\n })\n .catch((error) => {\n const metricName = BEHAVIORAL_METRICS.ROAP_ANSWER_FAILURE;\n const data = {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n };\n const metadata = {\n type: error.name,\n };\n\n Metrics.sendBehavioralMetric(metricName, data, metadata);\n LoggerProxy.logger.error(\n `Roap:handler#perform --> Error occured during wait receive answer, continuing, ${error}`\n );\n });\n }\n break;\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (!RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.setRemoteDescription(meeting, session).then((res) => {\n this.roapOk(res);\n });\n }\n break;\n // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:\n case ROAP.ROAP_STATE.ERROR:\n LoggerProxy.logger.error(\n `Roap:handler#perform --> Roap State ERROR for session: ${session}`\n );\n break;\n case ROAP.ROAP_STATE.GLARE:\n session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;\n session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;\n LoggerProxy.logger.warn(\n 'Roap:handler#perform --> Roap State resolved the GLARE condition.'\n );\n if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {\n // 2\n LoggerProxy.logger.log(\n 'Roap:handler#perform --> Roap State local offer won after GLARE.'\n );\n } else {\n LoggerProxy.logger.log(\n 'Roap:handler#perform --> Roap State remote offer won after GLARE.'\n );\n }\n session.state.step(ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);\n // @ts-ignore\n this.perform(session, meeting);\n break;\n default:\n break;\n }\n }\n\n /**\n *\n * @param {String} signal\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} prefix\n * @returns {null}\n */\n execute(signal: string, session: any, action: any, meeting: Meeting, prefix: string) {\n if (session && session.state) {\n handleSessionStep({\n roap: action,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n session,\n });\n signal = ROAP.ROAP_SIGNAL[`${prefix}${action.msg.messageType}`];\n session.state.step(signal, meeting, action);\n this.perform(session, meeting, action);\n }\n }\n\n /**\n *\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} correlationId\n * @returns {Boolean}\n */\n handleAction(session: object, action: any, meeting: Meeting, correlationId: string) {\n let signal;\n\n switch (action.type) {\n case ROAP.RECEIVE_ROAP_MSG:\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ${JSON.stringify(\n action\n )}`\n );\n if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {\n LoggerProxy.logger.warn(\n `Roap:handler#handleAction --> duplicate roap offer from server: ${action.msg.seq}`\n );\n } else {\n this.lastRoapMessage = action;\n action.remote = true;\n this.execute(signal, session, action, meeting, ROAP.RX_);\n }\n break;\n case ROAP.SEND_ROAP_MSG:\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ${JSON.stringify(\n action\n )}`\n );\n\n action.local = true;\n this.execute(signal, session, action, meeting, ROAP.TX_);\n break;\n case ROAP.SEND_ROAP_MSG_SUCCESS:\n // NOTE: When server send back an answer via mercury the\n // remote SDP is already saved sent and ok message is sent back\n // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS\n break;\n case ROAP.RECEIVE_CALL_LEAVE:\n RoapCollection.deleteSession(correlationId);\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ${correlationId}`\n );\n break;\n case ROAP.RESET_ROAP_STATE:\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ${action.msg.seq}`\n );\n break;\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n *\n * @param {Object} action\n * @returns {Boolean}\n */\n submit(action: any) {\n const {correlationId} = action;\n let {seq} = action;\n\n if (!seq && action.msg) {\n seq = action.msg.seq;\n }\n const session = RoapCollection.getSessionSequence(correlationId, seq);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n if (checkForAndHandleErrors(action, meeting, correlationId)) {\n return true;\n }\n\n return this.handleAction(session, action, meeting, correlationId);\n }\n}\n"],"mappings":"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"}
|
package/dist/roap/index.js
CHANGED
|
@@ -1,59 +1,33 @@
|
|
|
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 _isNan = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/is-nan"));
|
|
16
|
-
|
|
17
11
|
var _parseFloat2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-float"));
|
|
18
|
-
|
|
19
12
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
20
|
-
|
|
21
13
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
22
|
-
|
|
23
14
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
24
|
-
|
|
25
15
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
26
|
-
|
|
27
16
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
|
28
|
-
|
|
29
17
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
30
|
-
|
|
31
18
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
32
|
-
|
|
33
19
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
34
|
-
|
|
35
20
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
36
|
-
|
|
37
21
|
var _webexCore = require("@webex/webex-core");
|
|
38
|
-
|
|
39
22
|
var _constants = require("../constants");
|
|
40
|
-
|
|
41
23
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
42
|
-
|
|
43
24
|
var _util = _interopRequireDefault(require("../meeting/util"));
|
|
44
|
-
|
|
45
25
|
var _handler = _interopRequireDefault(require("./handler"));
|
|
46
|
-
|
|
47
26
|
var _request = _interopRequireDefault(require("./request"));
|
|
48
|
-
|
|
49
27
|
var _collection = _interopRequireDefault(require("./collection"));
|
|
50
|
-
|
|
51
28
|
var _turnDiscovery = _interopRequireDefault(require("./turnDiscovery"));
|
|
52
|
-
|
|
53
29
|
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); }; }
|
|
54
|
-
|
|
55
30
|
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; } }
|
|
56
|
-
|
|
57
31
|
/**
|
|
58
32
|
* Roap options
|
|
59
33
|
* @typedef {Object} RoapOptions
|
|
@@ -62,14 +36,12 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
|
|
|
62
36
|
* @property {Number} roapSeq
|
|
63
37
|
* @property {Boolean} reconnect
|
|
64
38
|
*/
|
|
65
|
-
|
|
66
39
|
/**
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
40
|
+
* @typedef {Object} SeqOptions
|
|
41
|
+
* @property {String} correlationId
|
|
42
|
+
* @property {String} mediaId
|
|
43
|
+
* @property {Number} seq
|
|
44
|
+
*/
|
|
73
45
|
/**
|
|
74
46
|
* @class Roap
|
|
75
47
|
* @export
|
|
@@ -77,9 +49,7 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
|
|
|
77
49
|
*/
|
|
78
50
|
var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
79
51
|
(0, _inherits2.default)(Roap, _StatelessWebexPlugin);
|
|
80
|
-
|
|
81
52
|
var _super = _createSuper(Roap);
|
|
82
|
-
|
|
83
53
|
/**
|
|
84
54
|
*
|
|
85
55
|
* @param {Object} attrs
|
|
@@ -87,7 +57,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
87
57
|
*/
|
|
88
58
|
function Roap(attrs, _options) {
|
|
89
59
|
var _this;
|
|
90
|
-
|
|
91
60
|
(0, _classCallCheck2.default)(this, Roap);
|
|
92
61
|
_this = _super.call(this, {}, _options);
|
|
93
62
|
/**
|
|
@@ -96,7 +65,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
96
65
|
* @private
|
|
97
66
|
* @memberof Roap
|
|
98
67
|
*/
|
|
99
|
-
|
|
100
68
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "attrs", void 0);
|
|
101
69
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastRoapOffer", void 0);
|
|
102
70
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "options", void 0);
|
|
@@ -111,7 +79,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
111
79
|
version: _constants.ROAP.ROAP_VERSION,
|
|
112
80
|
seq: typeof options.roapSeq !== 'number' && (0, _isNan.default)((0, _parseFloat2.default)(options.roapSeq)) ? 0 : options.roapSeq + 1,
|
|
113
81
|
tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario
|
|
114
|
-
|
|
115
82
|
};
|
|
116
83
|
|
|
117
84
|
_this.roapHandler.submit({
|
|
@@ -119,7 +86,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
119
86
|
msg: roapMessage,
|
|
120
87
|
correlationId: meeting.correlationId
|
|
121
88
|
});
|
|
122
|
-
|
|
123
89
|
var roapBody = {
|
|
124
90
|
localMedias: [{
|
|
125
91
|
localSdp: (0, _stringify.default)(_this.roapRequest.attachRechabilityData({
|
|
@@ -128,10 +94,11 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
128
94
|
// TODO: check whats the need for video and audiomute
|
|
129
95
|
audioMuted: !!meeting.isAudioMuted(),
|
|
130
96
|
videoMuted: !!meeting.isVideoMuted()
|
|
131
|
-
}))
|
|
132
|
-
|
|
97
|
+
}))
|
|
98
|
+
// mediaId: meeting.mediaId
|
|
133
99
|
}]
|
|
134
100
|
};
|
|
101
|
+
|
|
135
102
|
return _util.default.joinMeetingOptions(meeting, {
|
|
136
103
|
roapMessage: roapBody
|
|
137
104
|
}).then(function (locus) {
|
|
@@ -140,11 +107,12 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
140
107
|
seq: roapMessage.seq,
|
|
141
108
|
correlationId: meeting.correlationId
|
|
142
109
|
});
|
|
110
|
+
meeting.setRoapSeq(roapMessage.seq);
|
|
143
111
|
|
|
144
|
-
|
|
112
|
+
// eslint-disable-next-line no-warning-comments
|
|
145
113
|
// TODO: we need to attach peerconenction to locus not sure if we need to pass everything here
|
|
146
|
-
|
|
147
|
-
|
|
114
|
+
return locus;
|
|
115
|
+
// eslint-disable-next-line no-warning-comments
|
|
148
116
|
// TODO: check where to update the sequence number
|
|
149
117
|
});
|
|
150
118
|
});
|
|
@@ -155,7 +123,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
155
123
|
* @private
|
|
156
124
|
* @memberof Roap
|
|
157
125
|
*/
|
|
158
|
-
|
|
159
126
|
_this.options = _options;
|
|
160
127
|
/**
|
|
161
128
|
* The Roap Process State Handler
|
|
@@ -164,7 +131,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
164
131
|
* @private
|
|
165
132
|
* @memberof Roap
|
|
166
133
|
*/
|
|
167
|
-
|
|
168
134
|
_this.roapHandler = new _handler.default(_this.attrs, _this.options, _this.sendRoapOK.bind((0, _assertThisInitialized2.default)(_this)), _this.sendRoapAnswer.bind((0, _assertThisInitialized2.default)(_this)), _this.roapFinished.bind((0, _assertThisInitialized2.default)(_this)));
|
|
169
135
|
/**
|
|
170
136
|
* The Roap Request Server Proxy Object
|
|
@@ -174,7 +140,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
174
140
|
* @memberof Roap
|
|
175
141
|
*/
|
|
176
142
|
// @ts-ignore
|
|
177
|
-
|
|
178
143
|
_this.roapRequest = new _request.default({}, _options);
|
|
179
144
|
/**
|
|
180
145
|
* The last roap offer sent to server and acked
|
|
@@ -183,11 +148,11 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
183
148
|
* @private
|
|
184
149
|
* @memberof Roap
|
|
185
150
|
*/
|
|
186
|
-
|
|
187
151
|
_this.lastRoapOffer = {};
|
|
188
152
|
_this.turnDiscovery = new _turnDiscovery.default(_this.roapRequest);
|
|
189
153
|
return _this;
|
|
190
154
|
}
|
|
155
|
+
|
|
191
156
|
/**
|
|
192
157
|
* Starts listening to mercury events for Roap messages
|
|
193
158
|
* @param {object} data event object
|
|
@@ -195,16 +160,12 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
195
160
|
* @private
|
|
196
161
|
* @memberof Roap
|
|
197
162
|
*/
|
|
198
|
-
|
|
199
|
-
|
|
200
163
|
(0, _createClass2.default)(Roap, [{
|
|
201
164
|
key: "roapEvent",
|
|
202
165
|
value: function roapEvent(data) {
|
|
203
166
|
var msg = data.message;
|
|
204
167
|
var correlationId = data.correlationId;
|
|
205
|
-
|
|
206
168
|
_loggerProxy.default.logger.log("Roap:index#roapEvent --> Received Roap Message [".concat((0, _stringify.default)(msg, null, 2), "]"));
|
|
207
|
-
|
|
208
169
|
if (msg.messageType === _constants.ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
|
|
209
170
|
// turn discovery is not part of normal roap protocol and so we are not handling it
|
|
210
171
|
// through the usual roap state machine
|
|
@@ -217,6 +178,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
217
178
|
});
|
|
218
179
|
}
|
|
219
180
|
}
|
|
181
|
+
|
|
220
182
|
/**
|
|
221
183
|
*
|
|
222
184
|
* @param {String} correlationId correlation id of a meeting
|
|
@@ -225,7 +187,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
225
187
|
* @private
|
|
226
188
|
* @memberof Roap
|
|
227
189
|
*/
|
|
228
|
-
|
|
229
190
|
}, {
|
|
230
191
|
key: "stop",
|
|
231
192
|
value: function stop(correlationId, seq) {
|
|
@@ -236,6 +197,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
236
197
|
});
|
|
237
198
|
return _promise.default.resolve();
|
|
238
199
|
}
|
|
200
|
+
|
|
239
201
|
/**
|
|
240
202
|
*
|
|
241
203
|
* @param {SeqOptions} options
|
|
@@ -243,24 +205,19 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
243
205
|
* @private
|
|
244
206
|
* @memberof Roap
|
|
245
207
|
*/
|
|
246
|
-
|
|
247
208
|
}, {
|
|
248
209
|
key: "sendRoapOK",
|
|
249
210
|
value: function sendRoapOK(options) {
|
|
250
211
|
var _this2 = this;
|
|
251
|
-
|
|
252
212
|
return _promise.default.resolve().then(function () {
|
|
253
213
|
// @ts-ignore
|
|
254
214
|
var meeting = _this2.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);
|
|
255
|
-
|
|
256
215
|
var roapMessage = {
|
|
257
216
|
messageType: _constants.ROAP.ROAP_TYPES.OK,
|
|
258
217
|
version: _constants.ROAP.ROAP_VERSION,
|
|
259
218
|
seq: options.seq
|
|
260
219
|
};
|
|
261
|
-
|
|
262
220
|
_loggerProxy.default.logger.log("Roap:index#sendRoapOK --> ROAP OK sending with seq ".concat(options.seq));
|
|
263
|
-
|
|
264
221
|
return _this2.roapRequest.sendRoap({
|
|
265
222
|
roapMessage: roapMessage,
|
|
266
223
|
locusSelfUrl: meeting.selfUrl,
|
|
@@ -275,15 +232,14 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
275
232
|
msg: roapMessage,
|
|
276
233
|
correlationId: options.correlationId
|
|
277
234
|
});
|
|
278
|
-
|
|
279
235
|
_loggerProxy.default.logger.log("Roap:index#sendRoapOK --> ROAP OK sent with seq ".concat(options.seq));
|
|
280
|
-
|
|
281
236
|
meeting.setRoapSeq(options.seq);
|
|
282
237
|
});
|
|
283
238
|
});
|
|
284
|
-
}
|
|
285
|
-
// TODO: try to merge sendRoapOk and roapAnswer
|
|
239
|
+
}
|
|
286
240
|
|
|
241
|
+
// eslint-disable-next-line no-warning-comments
|
|
242
|
+
// TODO: try to merge sendRoapOk and roapAnswer
|
|
287
243
|
/**
|
|
288
244
|
* Sends a ROAP answer...
|
|
289
245
|
* @param {SeqOptions} options
|
|
@@ -293,12 +249,10 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
293
249
|
* @private
|
|
294
250
|
* @memberof Roap
|
|
295
251
|
*/
|
|
296
|
-
|
|
297
252
|
}, {
|
|
298
253
|
key: "sendRoapAnswer",
|
|
299
254
|
value: function sendRoapAnswer(options) {
|
|
300
255
|
var _this3 = this;
|
|
301
|
-
|
|
302
256
|
// @ts-ignore
|
|
303
257
|
var meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);
|
|
304
258
|
var roapMessage = {
|
|
@@ -322,7 +276,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
322
276
|
meetingId: meeting.id
|
|
323
277
|
}).then(function () {
|
|
324
278
|
meeting.setRoapSeq(options.seq);
|
|
325
|
-
|
|
326
279
|
_this3.roapHandler.submit({
|
|
327
280
|
type: _constants.ROAP.SEND_ROAP_MSG_SUCCESS,
|
|
328
281
|
seq: roapMessage.seq,
|
|
@@ -330,6 +283,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
330
283
|
});
|
|
331
284
|
});
|
|
332
285
|
}
|
|
286
|
+
|
|
333
287
|
/**
|
|
334
288
|
* Sends a ROAP error...
|
|
335
289
|
* @param {Object} session
|
|
@@ -339,7 +293,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
339
293
|
* @private
|
|
340
294
|
* @memberof Roap
|
|
341
295
|
*/
|
|
342
|
-
|
|
343
296
|
}, {
|
|
344
297
|
key: "sendRoapError",
|
|
345
298
|
value: function sendRoapError(session, locus, errorType) {
|
|
@@ -351,6 +304,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
351
304
|
};
|
|
352
305
|
return this.roapRequest.sendRoap(msg, locus);
|
|
353
306
|
}
|
|
307
|
+
|
|
354
308
|
/**
|
|
355
309
|
* sends a roap media request
|
|
356
310
|
* @param {RoapOptions} options
|
|
@@ -358,14 +312,12 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
358
312
|
* @private
|
|
359
313
|
* @memberof Roap
|
|
360
314
|
*/
|
|
361
|
-
|
|
362
315
|
}, {
|
|
363
316
|
key: "sendRoapMediaRequest",
|
|
364
317
|
value: function sendRoapMediaRequest(options) {
|
|
365
318
|
var _this4 = this;
|
|
366
|
-
|
|
367
319
|
var meeting = options.meeting,
|
|
368
|
-
|
|
320
|
+
reconnect = options.reconnect;
|
|
369
321
|
var roapMessage = {
|
|
370
322
|
messageType: _constants.ROAP.ROAP_TYPES.OFFER,
|
|
371
323
|
sdps: [options.sdp],
|
|
@@ -373,16 +325,17 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
373
325
|
version: _constants.ROAP.ROAP_VERSION,
|
|
374
326
|
seq: typeof options.roapSeq !== 'number' && (0, _isNan.default)((0, _parseFloat2.default)(options.roapSeq)) ? 0 : options.roapSeq + 1,
|
|
375
327
|
tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario
|
|
376
|
-
|
|
377
328
|
};
|
|
329
|
+
|
|
378
330
|
this.roapHandler.submit({
|
|
379
331
|
type: _constants.ROAP.SEND_ROAP_MSG,
|
|
380
332
|
msg: roapMessage,
|
|
381
333
|
correlationId: meeting.correlationId
|
|
382
|
-
});
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
// When reconnecting, it's important that the first roap message being sent out has empty media id.
|
|
383
337
|
// Normally this is the roap offer, but when TURN discovery is enabled,
|
|
384
338
|
// then this is the TURN discovery request message
|
|
385
|
-
|
|
386
339
|
var sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;
|
|
387
340
|
return this.roapRequest.sendRoap({
|
|
388
341
|
roapMessage: roapMessage,
|
|
@@ -394,26 +347,25 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
394
347
|
meetingId: meeting.id
|
|
395
348
|
}).then(function (_ref) {
|
|
396
349
|
var locus = _ref.locus,
|
|
397
|
-
|
|
398
|
-
|
|
350
|
+
mediaConnections = _ref.mediaConnections;
|
|
399
351
|
_this4.roapHandler.submit({
|
|
400
352
|
type: _constants.ROAP.SEND_ROAP_MSG_SUCCESS,
|
|
401
353
|
seq: roapMessage.seq,
|
|
402
354
|
correlationId: meeting.correlationId
|
|
403
355
|
});
|
|
404
|
-
|
|
405
356
|
meeting.setRoapSeq(roapMessage.seq);
|
|
406
|
-
|
|
407
357
|
if (mediaConnections) {
|
|
408
358
|
meeting.updateMediaConnections(mediaConnections);
|
|
409
|
-
}
|
|
410
|
-
// TODO: we need to attach peerconenction to locus not sure if we need to pass everything here
|
|
359
|
+
}
|
|
411
360
|
|
|
412
|
-
|
|
413
|
-
|
|
361
|
+
// eslint-disable-next-line no-warning-comments
|
|
362
|
+
// TODO: we need to attach peerconenction to locus not sure if we need to pass everything here
|
|
363
|
+
return locus;
|
|
364
|
+
// eslint-disable-next-line no-warning-comments
|
|
414
365
|
// TODO: check where to update the sequence number
|
|
415
366
|
});
|
|
416
367
|
}
|
|
368
|
+
|
|
417
369
|
/**
|
|
418
370
|
* sends a roap media request
|
|
419
371
|
* @param {RoapOptions} options
|
|
@@ -421,29 +373,27 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
421
373
|
* @private
|
|
422
374
|
* @memberof Roap
|
|
423
375
|
*/
|
|
424
|
-
|
|
425
376
|
}, {
|
|
426
377
|
key: "roapFinished",
|
|
427
378
|
value:
|
|
428
379
|
/**
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
380
|
+
* Called when the roap sequence is finished (completed successfully or failed)
|
|
381
|
+
* @param {String} correlationId id of the meeting affected
|
|
382
|
+
* @param {String} sequenceId the id of the finished sequence
|
|
383
|
+
* @returns {undefined}
|
|
384
|
+
* @private
|
|
385
|
+
* @memberof Roap
|
|
386
|
+
*/
|
|
436
387
|
function roapFinished(correlationId, sequenceId) {
|
|
437
|
-
_collection.default.onSessionSequenceFinish(correlationId, sequenceId);
|
|
438
|
-
|
|
439
|
-
|
|
388
|
+
_collection.default.onSessionSequenceFinish(correlationId, sequenceId);
|
|
389
|
+
// @ts-ignore
|
|
440
390
|
var meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);
|
|
441
391
|
meeting.mediaNegotiatedEvent();
|
|
442
|
-
|
|
443
392
|
if (!_collection.default.isBusy(correlationId)) {
|
|
444
393
|
meeting.processNextQueuedMediaUpdate();
|
|
445
394
|
}
|
|
446
395
|
}
|
|
396
|
+
|
|
447
397
|
/**
|
|
448
398
|
* Performs a TURN server discovery procedure, which involves exchanging
|
|
449
399
|
* some roap messages with the server. This exchange has to be done before
|
|
@@ -454,7 +404,6 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
454
404
|
* media connection just after a reconnection
|
|
455
405
|
* @returns {Promise}
|
|
456
406
|
*/
|
|
457
|
-
|
|
458
407
|
}, {
|
|
459
408
|
key: "doTurnDiscovery",
|
|
460
409
|
value: function doTurnDiscovery(meeting, isReconnecting) {
|
|
@@ -463,6 +412,5 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
463
412
|
}]);
|
|
464
413
|
return Roap;
|
|
465
414
|
}(_webexCore.StatelessWebexPlugin);
|
|
466
|
-
|
|
467
415
|
exports.default = Roap;
|
|
468
416
|
//# sourceMappingURL=index.js.map
|
package/dist/roap/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Roap","attrs","options","meeting","roapMessage","messageType","ROAP","ROAP_TYPES","OFFER","sdps","sdp","version","ROAP_VERSION","seq","roapSeq","tieBreaker","roapHandler","submit","type","SEND_ROAP_MSG","msg","correlationId","roapBody","localMedias","localSdp","roapRequest","attachRechabilityData","audioMuted","isAudioMuted","videoMuted","isVideoMuted","MeetingUtil","joinMeetingOptions","then","locus","SEND_ROAP_MSG_SUCCESS","setRoapSeq","RoapHandler","sendRoapOK","bind","sendRoapAnswer","roapFinished","RoapRequest","lastRoapOffer","turnDiscovery","TurnDiscovery","data","message","LoggerProxy","logger","log","TURN_DISCOVERY_RESPONSE","handleTurnDiscoveryResponse","RECEIVE_ROAP_MSG","RECEIVE_CALL_LEAVE","resolve","webex","meetings","meetingCollection","getByKey","OK","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","ANSWER","session","errorType","ERROR","reconnect","sendEmptyMediaId","config","experimental","enableTurnDiscovery","mediaConnections","updateMediaConnections","sequenceId","RoapCollection","onSessionSequenceFinish","mediaNegotiatedEvent","isBusy","processNextQueuedMediaUpdate","isReconnecting","doTurnDiscovery","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\nimport TurnDiscovery from './turnDiscovery';\nimport Meeting from '../meeting';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: any;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(this.attrs, this.options, this.sendRoapOK.bind(this), this.sendRoapAnswer.bind(this), this.roapFinished.bind(this));\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private roapEvent(data: any) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(`Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`);\n\n if (msg.messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n // turn discovery is not part of normal roap protocol and so we are not handling it\n // through the usual roap state machine\n this.turnDiscovery.handleTurnDiscoveryResponse(msg);\n }\n else {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId\n });\n }\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private stop(correlationId: string, seq: number) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n private sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: options.audioMuted,\n videoMuted: options.videoMuted,\n meetingId: meeting.id\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapError(session: any, locus: object, errorType: string) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n const sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapCallRequest = (options: any) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!meeting.isAudioMuted(),\n videoMuted: !!meeting.isVideoMuted()\n }))\n // mediaId: meeting.mediaId\n }\n ]\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody})\n .then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n };\n\n /**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\n private roapFinished(correlationId: string, sequenceId: string) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Roap","attrs","options","meeting","roapMessage","messageType","ROAP","ROAP_TYPES","OFFER","sdps","sdp","version","ROAP_VERSION","seq","roapSeq","tieBreaker","roapHandler","submit","type","SEND_ROAP_MSG","msg","correlationId","roapBody","localMedias","localSdp","roapRequest","attachRechabilityData","audioMuted","isAudioMuted","videoMuted","isVideoMuted","MeetingUtil","joinMeetingOptions","then","locus","SEND_ROAP_MSG_SUCCESS","setRoapSeq","RoapHandler","sendRoapOK","bind","sendRoapAnswer","roapFinished","RoapRequest","lastRoapOffer","turnDiscovery","TurnDiscovery","data","message","LoggerProxy","logger","log","TURN_DISCOVERY_RESPONSE","handleTurnDiscoveryResponse","RECEIVE_ROAP_MSG","RECEIVE_CALL_LEAVE","resolve","webex","meetings","meetingCollection","getByKey","OK","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","ANSWER","session","errorType","ERROR","reconnect","sendEmptyMediaId","config","experimental","enableTurnDiscovery","mediaConnections","updateMediaConnections","sequenceId","RoapCollection","onSessionSequenceFinish","mediaNegotiatedEvent","isBusy","processNextQueuedMediaUpdate","isReconnecting","doTurnDiscovery","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\nimport TurnDiscovery from './turnDiscovery';\nimport Meeting from '../meeting';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: any;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(\n this.attrs,\n this.options,\n this.sendRoapOK.bind(this),\n this.sendRoapAnswer.bind(this),\n this.roapFinished.bind(this)\n );\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private roapEvent(data: any) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(\n `Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`\n );\n\n if (msg.messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n // turn discovery is not part of normal roap protocol and so we are not handling it\n // through the usual roap state machine\n this.turnDiscovery.handleTurnDiscoveryResponse(msg);\n } else {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId,\n });\n }\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private stop(correlationId: string, seq: number) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId,\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n private sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\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 })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId,\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId,\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: options.audioMuted,\n videoMuted: options.videoMuted,\n meetingId: meeting.id,\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapError(session: any, locus: object, errorType: string) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq,\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : options.roapSeq + 1,\n tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId,\n });\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n const sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id,\n })\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapCallRequest = (options: any) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : options.roapSeq + 1,\n tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId,\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(\n this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!meeting.isAudioMuted(),\n videoMuted: !!meeting.isVideoMuted(),\n })\n ),\n // mediaId: meeting.mediaId\n },\n ],\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody}).then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n };\n\n /**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\n private roapFinished(correlationId: string, sequenceId: string) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":"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"}
|