@webex/plugin-meetings 2.25.0 → 2.26.0
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/dist/common/logs/logger-proxy.js +7 -6
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +4 -11
- package/dist/constants.js.map +1 -1
- package/dist/media/properties.js +2 -2
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +18 -4
- package/dist/media/util.js.map +1 -1
- package/dist/meeting/index.js +3 -1
- package/dist/meeting/index.js.map +1 -1
- package/dist/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/peer-connection-manager/index.js +6 -4
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/reconnection-manager/index.js +40 -14
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/handler.js +0 -2
- package/dist/roap/handler.js.map +1 -1
- package/dist/roap/index.js +36 -7
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +5 -3
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +273 -0
- package/dist/roap/turnDiscovery.js.map +1 -0
- package/dist/roap/util.js +0 -2
- package/dist/roap/util.js.map +1 -1
- package/package.json +5 -5
- package/src/common/logs/logger-proxy.js +7 -6
- package/src/config.js +2 -1
- package/src/constants.ts +3 -4
- package/src/media/properties.js +2 -2
- package/src/media/util.js +17 -7
- package/src/meeting/index.js +3 -2
- package/src/metrics/constants.js +2 -1
- package/src/peer-connection-manager/index.js +6 -3
- package/src/reconnection-manager/index.js +13 -10
- package/src/roap/handler.js +0 -2
- package/src/roap/index.js +36 -6
- package/src/roap/request.js +5 -3
- package/src/roap/turnDiscovery.ts +238 -0
- package/src/roap/util.js +0 -2
- package/test/unit/spec/meeting/index.js +35 -0
- package/test/unit/spec/peerconnection-manager/index.js +47 -4
- package/test/unit/spec/roap/index.ts +113 -0
- package/test/unit/spec/roap/turnDiscovery.ts +334 -0
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","locusId","locusSelfId","locusInfo","self","id","mediaId","sdps","audioMuted","isAudioMuted","videoMuted","isVideoMuted","error","ROAP_ANSWER_FAILURE","reason","message","stack","metadata","name","WAIT_TX_OK","setRemoteDescription","ERROR","GLARE","tieBreaker","log","step","ROAP_SIGNAL","GLARE_RESOLVED","perform","signal","prefix","RECEIVE_ROAP_MSG","execute","RX_","SEND_ROAP_MSG","local","TX_","SEND_ROAP_MSG_SUCCESS","RECEIVE_CALL_LEAVE","deleteSession","RESET_ROAP_STATE","getSessionSequence","webex","meetings","meetingCollection","getByKey","handleAction","StatelessWebexPlugin"],"sources":["handler.js"],"sourcesContent":["/* no-param-reassign */\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_} from '../constants';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nimport RoapUtil from './util';\nimport RoapCollection from './collection';\n\n\nconst checkForAndHandleErrors = (action, meeting, correlationId) => {\n if (action && action.type) {\n if (action.msg && action.msg.messageType && action.msg.errorType) {\n if (RoapUtil.findError(action.msg.messageType, action.msg.errorType, action.type)) {\n RoapUtil.handleError(meeting.mediaProperties.peerConnection)\n .then((res) => {\n if (res) {\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.warn(`Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ${err}`);\n });\n\n return true;\n }\n }\n if (!RoapUtil.ensureMeeting(meeting, action.type)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst compareWithLastRoapMessage = (lastRoapMessage, currentRoapMessage) => lastRoapMessage?.msg?.seq === currentRoapMessage.msg.seq && lastRoapMessage?.msg?.messageType === currentRoapMessage.msg.messageType;\n\nconst handleSessionStep = ({\n roap, session, locusUrl, correlationId\n}) => {\n const {seq: sequenceId, messageType} = roap.msg;\n\n if (session.OFFER && messageType === _OFFER_) {\n session.GLARE_OFFER = roap.msg;\n session.GLARE_OFFER.remote = !!roap.remote;\n const metricName = BEHAVIORAL_METRICS.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId\n };\n\n Metrics.sendBehavioralMetric(metricName, data);\n\n LoggerProxy.logger.warn(`Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ${sequenceId}`);\n }\n else {\n LoggerProxy.logger.info(`Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:${sequenceId} new mercury event ${messageType}local state: ${JSON.stringify(session.state.state, null, 2)}`);\n session[messageType] = roap.msg;\n session[messageType].remote = !!roap.remote;\n }\n};\n\n/**\n * @class RoapHandler\n */\nexport default class RoapHandler extends StatelessWebexPlugin {\n constructor(attrs, options, roapOk, roapAnswer, roapFinished) {\n super({}, options);\n this.attrs = attrs;\n this.options = options;\n this.roapOk = roapOk;\n this.roapFinished = roapFinished;\n this.roapAnswer = roapAnswer;\n this.lastRoapMessage = null;\n }\n\n /**\n *\n * @param {Object} session\n * @param {Meeting} meeting\n * @param {Object} action\n * @returns {null}\n */\n perform(session, meeting, action) {\n switch (session.state.state) {\n case ROAP.ROAP_STATE.INIT:\n this.roapFinished(meeting.correlationId, action.msg.seq);\n break;\n\n // TODO: (important )handle roap state for sending offers as well\n // case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n // case ROAP.ROAP_STATE.WAIT_RX_OK:\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n // eslint-disable-next-line no-warning-comments\n // TODO: sometime the you get an answer while you are creating an offer so SKIP\n // Server will send the mercury event comes back\n if (RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.updatePeerConnection(meeting, session)\n .then((answerSdps) => {\n this.roapAnswer({\n locusId: meeting.locusId,\n locusSelfId: meeting.locusInfo.self.id,\n mediaId: meeting.mediaId,\n sdps: answerSdps,\n seq: session.OFFER.seq,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted()\n });\n })\n .catch((error) => {\n const metricName = BEHAVIORAL_METRICS.ROAP_ANSWER_FAILURE;\n const data = {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack\n };\n const metadata = {\n type: error.name\n };\n\n Metrics.sendBehavioralMetric(metricName, data, metadata);\n LoggerProxy.logger.error(`Roap:handler#perform --> Error occured during wait receive answer, continuing, ${error}`);\n });\n }\n break;\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (!RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.setRemoteDescription(meeting, session).then((res) => {\n this.roapOk(res);\n });\n }\n break;\n // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:\n case ROAP.ROAP_STATE.ERROR:\n LoggerProxy.logger.error(`Roap:handler#perform --> Roap State ERROR for session: ${session}`);\n break;\n case ROAP.ROAP_STATE.GLARE:\n session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;\n session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;\n LoggerProxy.logger.warn('Roap:handler#perform --> Roap State resolved the GLARE condition.');\n if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {\n // 2\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State local offer won after GLARE.');\n }\n else {\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State remote offer won after GLARE.');\n }\n session.state.step(ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);\n this.perform(session, meeting);\n break;\n default:\n break;\n }\n }\n\n /**\n *\n * @param {String} signal\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} prefix\n * @returns {null}\n */\n execute(signal, session, action, meeting, prefix) {\n if (session && session.state) {\n handleSessionStep({\n roap: action,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n session\n });\n signal = ROAP.ROAP_SIGNAL[`${prefix}${action.msg.messageType}`];\n session.state.step(signal, meeting, action);\n this.perform(session, meeting, action);\n }\n }\n\n /**\n *\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} correlationId\n * @returns {Boolean}\n */\n handleAction(session, action, meeting, correlationId) {\n let signal;\n\n\n switch (action.type) {\n case ROAP.RECEIVE_ROAP_MSG:\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ${JSON.stringify(action)}`);\n if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {\n LoggerProxy.logger.warn(`Roap:handler#handleAction --> duplicate roap offer from server: ${action.msg.seq}`);\n }\n else {\n this.lastRoapMessage = action;\n action.remote = true;\n this.execute(signal, session, action, meeting, ROAP.RX_);\n }\n break;\n case ROAP.SEND_ROAP_MSG:\n LoggerProxy.logger.log(`Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ${JSON.stringify(action)}`);\n\n action.local = true;\n this.execute(signal, session, action, meeting, ROAP.TX_);\n break;\n case ROAP.SEND_ROAP_MSG_SUCCESS:\n // NOTE: When server send back an answer via mercury the\n // remote SDP is already saved sent and ok message is sent back\n // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS\n break;\n case ROAP.RECEIVE_CALL_LEAVE:\n RoapCollection.deleteSession(correlationId);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ${correlationId}`); break;\n case ROAP.RESET_ROAP_STATE:\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ${action.msg.seq}`); break;\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n *\n * @param {Object} action\n * @returns {Boolean}\n */\n submit(action) {\n const {correlationId} = action;\n let {seq} = action;\n\n if (!seq && action.msg) {\n seq = action.msg.seq;\n }\n const session = RoapCollection.getSessionSequence(correlationId, seq);\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n if (checkForAndHandleErrors(action, meeting, correlationId)) {\n return true;\n }\n\n return this.handleAction(session, action, meeting, correlationId);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["checkForAndHandleErrors","action","meeting","correlationId","type","msg","messageType","errorType","RoapUtil","findError","handleError","mediaProperties","peerConnection","then","res","RoapCollection","deleteSessionSequence","seq","catch","err","LoggerProxy","logger","warn","ensureMeeting","compareWithLastRoapMessage","lastRoapMessage","currentRoapMessage","handleSessionStep","roap","session","locusUrl","sequenceId","OFFER","_OFFER_","GLARE_OFFER","remote","metricName","BEHAVIORAL_METRICS","ROAP_GLARE_CONDITION","data","correlation_id","locus_id","split","pop","sequence","Metrics","sendBehavioralMetric","info","state","RoapHandler","attrs","options","roapOk","roapAnswer","roapFinished","ROAP","ROAP_STATE","INIT","WAIT_TX_ANSWER","shouldHandleMedia","updatePeerConnection","answerSdps","mediaId","sdps","audioMuted","isAudioMuted","videoMuted","isVideoMuted","error","ROAP_ANSWER_FAILURE","reason","message","stack","metadata","name","WAIT_TX_OK","setRemoteDescription","ERROR","GLARE","tieBreaker","log","step","ROAP_SIGNAL","GLARE_RESOLVED","perform","signal","prefix","RECEIVE_ROAP_MSG","execute","RX_","SEND_ROAP_MSG","local","TX_","SEND_ROAP_MSG_SUCCESS","RECEIVE_CALL_LEAVE","deleteSession","RESET_ROAP_STATE","getSessionSequence","webex","meetings","meetingCollection","getByKey","handleAction","StatelessWebexPlugin"],"sources":["handler.js"],"sourcesContent":["/* no-param-reassign */\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_} from '../constants';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nimport RoapUtil from './util';\nimport RoapCollection from './collection';\n\n\nconst checkForAndHandleErrors = (action, meeting, correlationId) => {\n if (action && action.type) {\n if (action.msg && action.msg.messageType && action.msg.errorType) {\n if (RoapUtil.findError(action.msg.messageType, action.msg.errorType, action.type)) {\n RoapUtil.handleError(meeting.mediaProperties.peerConnection)\n .then((res) => {\n if (res) {\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.warn(`Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ${err}`);\n });\n\n return true;\n }\n }\n if (!RoapUtil.ensureMeeting(meeting, action.type)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst compareWithLastRoapMessage = (lastRoapMessage, currentRoapMessage) => lastRoapMessage?.msg?.seq === currentRoapMessage.msg.seq && lastRoapMessage?.msg?.messageType === currentRoapMessage.msg.messageType;\n\nconst handleSessionStep = ({\n roap, session, locusUrl, correlationId\n}) => {\n const {seq: sequenceId, messageType} = roap.msg;\n\n if (session.OFFER && messageType === _OFFER_) {\n session.GLARE_OFFER = roap.msg;\n session.GLARE_OFFER.remote = !!roap.remote;\n const metricName = BEHAVIORAL_METRICS.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId\n };\n\n Metrics.sendBehavioralMetric(metricName, data);\n\n LoggerProxy.logger.warn(`Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ${sequenceId}`);\n }\n else {\n LoggerProxy.logger.info(`Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:${sequenceId} new mercury event ${messageType}local state: ${JSON.stringify(session.state.state, null, 2)}`);\n session[messageType] = roap.msg;\n session[messageType].remote = !!roap.remote;\n }\n};\n\n/**\n * @class RoapHandler\n */\nexport default class RoapHandler extends StatelessWebexPlugin {\n constructor(attrs, options, roapOk, roapAnswer, roapFinished) {\n super({}, options);\n this.attrs = attrs;\n this.options = options;\n this.roapOk = roapOk;\n this.roapFinished = roapFinished;\n this.roapAnswer = roapAnswer;\n this.lastRoapMessage = null;\n }\n\n /**\n *\n * @param {Object} session\n * @param {Meeting} meeting\n * @param {Object} action\n * @returns {null}\n */\n perform(session, meeting, action) {\n switch (session.state.state) {\n case ROAP.ROAP_STATE.INIT:\n this.roapFinished(meeting.correlationId, action.msg.seq);\n break;\n\n // TODO: (important )handle roap state for sending offers as well\n // case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n // case ROAP.ROAP_STATE.WAIT_RX_OK:\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n // eslint-disable-next-line no-warning-comments\n // TODO: sometime the you get an answer while you are creating an offer so SKIP\n // Server will send the mercury event comes back\n if (RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.updatePeerConnection(meeting, session)\n .then((answerSdps) => {\n this.roapAnswer({\n mediaId: meeting.mediaId,\n sdps: answerSdps,\n seq: session.OFFER.seq,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted()\n });\n })\n .catch((error) => {\n const metricName = BEHAVIORAL_METRICS.ROAP_ANSWER_FAILURE;\n const data = {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack\n };\n const metadata = {\n type: error.name\n };\n\n Metrics.sendBehavioralMetric(metricName, data, metadata);\n LoggerProxy.logger.error(`Roap:handler#perform --> Error occured during wait receive answer, continuing, ${error}`);\n });\n }\n break;\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (!RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.setRemoteDescription(meeting, session).then((res) => {\n this.roapOk(res);\n });\n }\n break;\n // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:\n case ROAP.ROAP_STATE.ERROR:\n LoggerProxy.logger.error(`Roap:handler#perform --> Roap State ERROR for session: ${session}`);\n break;\n case ROAP.ROAP_STATE.GLARE:\n session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;\n session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;\n LoggerProxy.logger.warn('Roap:handler#perform --> Roap State resolved the GLARE condition.');\n if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {\n // 2\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State local offer won after GLARE.');\n }\n else {\n LoggerProxy.logger.log('Roap:handler#perform --> Roap State remote offer won after GLARE.');\n }\n session.state.step(ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);\n this.perform(session, meeting);\n break;\n default:\n break;\n }\n }\n\n /**\n *\n * @param {String} signal\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} prefix\n * @returns {null}\n */\n execute(signal, session, action, meeting, prefix) {\n if (session && session.state) {\n handleSessionStep({\n roap: action,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n session\n });\n signal = ROAP.ROAP_SIGNAL[`${prefix}${action.msg.messageType}`];\n session.state.step(signal, meeting, action);\n this.perform(session, meeting, action);\n }\n }\n\n /**\n *\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} correlationId\n * @returns {Boolean}\n */\n handleAction(session, action, meeting, correlationId) {\n let signal;\n\n\n switch (action.type) {\n case ROAP.RECEIVE_ROAP_MSG:\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ${JSON.stringify(action)}`);\n if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {\n LoggerProxy.logger.warn(`Roap:handler#handleAction --> duplicate roap offer from server: ${action.msg.seq}`);\n }\n else {\n this.lastRoapMessage = action;\n action.remote = true;\n this.execute(signal, session, action, meeting, ROAP.RX_);\n }\n break;\n case ROAP.SEND_ROAP_MSG:\n LoggerProxy.logger.log(`Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ${JSON.stringify(action)}`);\n\n action.local = true;\n this.execute(signal, session, action, meeting, ROAP.TX_);\n break;\n case ROAP.SEND_ROAP_MSG_SUCCESS:\n // NOTE: When server send back an answer via mercury the\n // remote SDP is already saved sent and ok message is sent back\n // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS\n break;\n case ROAP.RECEIVE_CALL_LEAVE:\n RoapCollection.deleteSession(correlationId);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ${correlationId}`); break;\n case ROAP.RESET_ROAP_STATE:\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n LoggerProxy.logger.log(`Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ${action.msg.seq}`); break;\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n *\n * @param {Object} action\n * @returns {Boolean}\n */\n submit(action) {\n const {correlationId} = action;\n let {seq} = action;\n\n if (!seq && action.msg) {\n seq = action.msg.seq;\n }\n const session = RoapCollection.getSessionSequence(correlationId, seq);\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n if (checkForAndHandleErrors(action, meeting, correlationId)) {\n return true;\n }\n\n return this.handleAction(session, action, meeting, correlationId);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;AAGA,IAAMA,uBAAuB,GAAG,SAA1BA,uBAA0B,CAACC,MAAD,EAASC,OAAT,EAAkBC,aAAlB,EAAoC;EAClE,IAAIF,MAAM,IAAIA,MAAM,CAACG,IAArB,EAA2B;IACzB,IAAIH,MAAM,CAACI,GAAP,IAAcJ,MAAM,CAACI,GAAP,CAAWC,WAAzB,IAAwCL,MAAM,CAACI,GAAP,CAAWE,SAAvD,EAAkE;MAChE,IAAIC,aAAA,CAASC,SAAT,CAAmBR,MAAM,CAACI,GAAP,CAAWC,WAA9B,EAA2CL,MAAM,CAACI,GAAP,CAAWE,SAAtD,EAAiEN,MAAM,CAACG,IAAxE,CAAJ,EAAmF;QACjFI,aAAA,CAASE,WAAT,CAAqBR,OAAO,CAACS,eAAR,CAAwBC,cAA7C,EACGC,IADH,CACQ,UAACC,GAAD,EAAS;UACb,IAAIA,GAAJ,EAAS;YACPC,mBAAA,CAAeC,qBAAf,CAAqCb,aAArC,EAAoDF,MAAM,CAACI,GAAP,CAAWY,GAA/D;UACD;QACF,CALH,EAMGC,KANH,CAMS,UAACC,GAAD,EAAS;UACdC,oBAAA,CAAYC,MAAZ,CAAmBC,IAAnB,iGAAiHH,GAAjH;QACD,CARH;;QAUA,OAAO,IAAP;MACD;IACF;;IACD,IAAI,CAACX,aAAA,CAASe,aAAT,CAAuBrB,OAAvB,EAAgCD,MAAM,CAACG,IAAvC,CAAL,EAAmD;MACjD,OAAO,IAAP;IACD;EACF;;EAED,OAAO,KAAP;AACD,CAvBD;;AAyBA,IAAMoB,0BAA0B,GAAG,SAA7BA,0BAA6B,CAACC,eAAD,EAAkBC,kBAAlB;EAAA;;EAAA,OAAyC,CAAAD,eAAe,SAAf,IAAAA,eAAe,WAAf,oCAAAA,eAAe,CAAEpB,GAAjB,8EAAsBY,GAAtB,MAA8BS,kBAAkB,CAACrB,GAAnB,CAAuBY,GAArD,IAA4D,CAAAQ,eAAe,SAAf,IAAAA,eAAe,WAAf,qCAAAA,eAAe,CAAEpB,GAAjB,gFAAsBC,WAAtB,MAAsCoB,kBAAkB,CAACrB,GAAnB,CAAuBC,WAAlK;AAAA,CAAnC;;AAEA,IAAMqB,iBAAiB,GAAG,SAApBA,iBAAoB,OAEpB;EAAA,IADJC,IACI,QADJA,IACI;EAAA,IADEC,OACF,QADEA,OACF;EAAA,IADWC,QACX,QADWA,QACX;EAAA,IADqB3B,aACrB,QADqBA,aACrB;EACJ,gBAAuCyB,IAAI,CAACvB,GAA5C;EAAA,IAAY0B,UAAZ,aAAOd,GAAP;EAAA,IAAwBX,WAAxB,aAAwBA,WAAxB;;EAEA,IAAIuB,OAAO,CAACG,KAAR,IAAiB1B,WAAW,KAAK2B,kBAArC,EAA8C;IAC5CJ,OAAO,CAACK,WAAR,GAAsBN,IAAI,CAACvB,GAA3B;IACAwB,OAAO,CAACK,WAAR,CAAoBC,MAApB,GAA6B,CAAC,CAACP,IAAI,CAACO,MAApC;IACA,IAAMC,UAAU,GAAGC,mBAAA,CAAmBC,oBAAtC;IACA,IAAMC,IAAI,GAAG;MACXC,cAAc,EAAErC,aADL;MAEXsC,QAAQ,EAAEX,QAAQ,CAACY,KAAT,CAAe,GAAf,EAAoBC,GAApB,EAFC;MAGXC,QAAQ,EAAEb;IAHC,CAAb;;IAMAc,gBAAA,CAAQC,oBAAR,CAA6BV,UAA7B,EAAyCG,IAAzC;;IAEAnB,oBAAA,CAAYC,MAAZ,CAAmBC,IAAnB,2GAA2HS,UAA3H;EACD,CAbD,MAcK;IACHX,oBAAA,CAAYC,MAAZ,CAAmB0B,IAAnB,oEAAoFhB,UAApF,gCAAoHzB,WAApH,0BAA+I,wBAAeuB,OAAO,CAACmB,KAAR,CAAcA,KAA7B,EAAoC,IAApC,EAA0C,CAA1C,CAA/I;;IACAnB,OAAO,CAACvB,WAAD,CAAP,GAAuBsB,IAAI,CAACvB,GAA5B;IACAwB,OAAO,CAACvB,WAAD,CAAP,CAAqB6B,MAArB,GAA8B,CAAC,CAACP,IAAI,CAACO,MAArC;EACD;AACF,CAxBD;AA0BA;AACA;AACA;;;IACqBc,W;;;;;EACnB,qBAAYC,KAAZ,EAAmBC,OAAnB,EAA4BC,MAA5B,EAAoCC,UAApC,EAAgDC,YAAhD,EAA8D;IAAA;;IAAA;IAC5D,0BAAM,EAAN,EAAUH,OAAV;IACA,MAAKD,KAAL,GAAaA,KAAb;IACA,MAAKC,OAAL,GAAeA,OAAf;IACA,MAAKC,MAAL,GAAcA,MAAd;IACA,MAAKE,YAAL,GAAoBA,YAApB;IACA,MAAKD,UAAL,GAAkBA,UAAlB;IACA,MAAK5B,eAAL,GAAuB,IAAvB;IAP4D;EAQ7D;EAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;;WACE,iBAAQI,OAAR,EAAiB3B,OAAjB,EAA0BD,MAA1B,EAAkC;MAAA;;MAChC,QAAQ4B,OAAO,CAACmB,KAAR,CAAcA,KAAtB;QACE,KAAKO,eAAA,CAAKC,UAAL,CAAgBC,IAArB;UACE,KAAKH,YAAL,CAAkBpD,OAAO,CAACC,aAA1B,EAAyCF,MAAM,CAACI,GAAP,CAAWY,GAApD;UACA;QAEA;QACF;QACA;QACA;;QACA,KAAKsC,eAAA,CAAKC,UAAL,CAAgBE,cAArB;UACE;UACA;UACA;UACA,IAAIlD,aAAA,CAASmD,iBAAT,CAA2BzD,OAA3B,CAAJ,EAAyC;YACvCM,aAAA,CAASoD,oBAAT,CAA8B1D,OAA9B,EAAuC2B,OAAvC,EACGhB,IADH,CACQ,UAACgD,UAAD,EAAgB;cACpB,MAAI,CAACR,UAAL,CAAgB;gBACdS,OAAO,EAAE5D,OAAO,CAAC4D,OADH;gBAEdC,IAAI,EAAEF,UAFQ;gBAGd5C,GAAG,EAAEY,OAAO,CAACG,KAAR,CAAcf,GAHL;gBAIdd,aAAa,EAAED,OAAO,CAACC,aAJT;gBAKd6D,UAAU,EAAE9D,OAAO,CAAC+D,YAAR,EALE;gBAMdC,UAAU,EAAEhE,OAAO,CAACiE,YAAR;cANE,CAAhB;YAQD,CAVH,EAWGjD,KAXH,CAWS,UAACkD,KAAD,EAAW;cAChB,IAAMhC,UAAU,GAAGC,mBAAA,CAAmBgC,mBAAtC;cACA,IAAM9B,IAAI,GAAG;gBACXC,cAAc,EAAEtC,OAAO,CAACC,aADb;gBAEXsC,QAAQ,EAAEvC,OAAO,CAAC4B,QAAR,CAAiBY,KAAjB,CAAuB,GAAvB,EAA4BC,GAA5B,EAFC;gBAGX2B,MAAM,EAAEF,KAAK,CAACG,OAHH;gBAIXC,KAAK,EAAEJ,KAAK,CAACI;cAJF,CAAb;cAMA,IAAMC,QAAQ,GAAG;gBACfrE,IAAI,EAAEgE,KAAK,CAACM;cADG,CAAjB;;cAIA7B,gBAAA,CAAQC,oBAAR,CAA6BV,UAA7B,EAAyCG,IAAzC,EAA+CkC,QAA/C;;cACArD,oBAAA,CAAYC,MAAZ,CAAmB+C,KAAnB,0FAA2GA,KAA3G;YACD,CAzBH;UA0BD;;UACD;;QACF,KAAKb,eAAA,CAAKC,UAAL,CAAgBmB,UAArB;UACE,IAAI,CAACnE,aAAA,CAASmD,iBAAT,CAA2BzD,OAA3B,CAAL,EAA0C;YACxCM,aAAA,CAASoE,oBAAT,CAA8B1E,OAA9B,EAAuC2B,OAAvC,EAAgDhB,IAAhD,CAAqD,UAACC,GAAD,EAAS;cAC5D,MAAI,CAACsC,MAAL,CAAYtC,GAAZ;YACD,CAFD;UAGD;;UACD;QACF;;QACA,KAAKyC,eAAA,CAAKC,UAAL,CAAgBqB,KAArB;UACEzD,oBAAA,CAAYC,MAAZ,CAAmB+C,KAAnB,kEAAmFvC,OAAnF;;UACA;;QACF,KAAK0B,eAAA,CAAKC,UAAL,CAAgBsB,KAArB;UACEjD,OAAO,CAACK,WAAR,CAAoB6C,UAApB,GAAiClD,OAAO,CAACK,WAAR,CAAoB6C,UAApB,IAAkC,CAAnE;UACAlD,OAAO,CAACG,KAAR,CAAc+C,UAAd,GAA2BlD,OAAO,CAACG,KAAR,CAAc+C,UAAd,IAA4B,CAAvD;;UACA3D,oBAAA,CAAYC,MAAZ,CAAmBC,IAAnB,CAAwB,mEAAxB;;UACA,IAAIO,OAAO,CAACK,WAAR,CAAoB6C,UAApB,GAAiClD,OAAO,CAACG,KAAR,CAAc+C,UAAnD,EAA+D;YAC7D;YACA3D,oBAAA,CAAYC,MAAZ,CAAmB2D,GAAnB,CAAuB,kEAAvB;UACD,CAHD,MAIK;YACH5D,oBAAA,CAAYC,MAAZ,CAAmB2D,GAAnB,CAAuB,mEAAvB;UACD;;UACDnD,OAAO,CAACmB,KAAR,CAAciC,IAAd,CAAmB1B,eAAA,CAAK2B,WAAL,CAAiBC,cAApC,EAAoDjF,OAApD,EAA6DD,MAA7D;UACA,KAAKmF,OAAL,CAAavD,OAAb,EAAsB3B,OAAtB;UACA;;QACF;UACE;MApEJ;IAsED;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,iBAAQmF,MAAR,EAAgBxD,OAAhB,EAAyB5B,MAAzB,EAAiCC,OAAjC,EAA0CoF,MAA1C,EAAkD;MAChD,IAAIzD,OAAO,IAAIA,OAAO,CAACmB,KAAvB,EAA8B;QAC5BrB,iBAAiB,CAAC;UAChBC,IAAI,EAAE3B,MADU;UAEhB6B,QAAQ,EAAE5B,OAAO,CAAC4B,QAFF;UAGhB3B,aAAa,EAAED,OAAO,CAACC,aAHP;UAIhB0B,OAAO,EAAPA;QAJgB,CAAD,CAAjB;QAMAwD,MAAM,GAAG9B,eAAA,CAAK2B,WAAL,WAAoBI,MAApB,SAA6BrF,MAAM,CAACI,GAAP,CAAWC,WAAxC,EAAT;QACAuB,OAAO,CAACmB,KAAR,CAAciC,IAAd,CAAmBI,MAAnB,EAA2BnF,OAA3B,EAAoCD,MAApC;QACA,KAAKmF,OAAL,CAAavD,OAAb,EAAsB3B,OAAtB,EAA+BD,MAA/B;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,sBAAa4B,OAAb,EAAsB5B,MAAtB,EAA8BC,OAA9B,EAAuCC,aAAvC,EAAsD;MACpD,IAAIkF,MAAJ;;MAGA,QAAQpF,MAAM,CAACG,IAAf;QACE,KAAKmD,eAAA,CAAKgC,gBAAV;UACEnE,oBAAA,CAAYC,MAAZ,CAAmB2D,GAAnB,oGAAmH,wBAAe/E,MAAf,CAAnH;;UACA,IAAIuB,0BAA0B,CAAC,KAAKC,eAAN,EAAuBxB,MAAvB,CAA9B,EAA8D;YAC5DmB,oBAAA,CAAYC,MAAZ,CAAmBC,IAAnB,2EAA2FrB,MAAM,CAACI,GAAP,CAAWY,GAAtG;UACD,CAFD,MAGK;YACH,KAAKQ,eAAL,GAAuBxB,MAAvB;YACAA,MAAM,CAACkC,MAAP,GAAgB,IAAhB;YACA,KAAKqD,OAAL,CAAaH,MAAb,EAAqBxD,OAArB,EAA8B5B,MAA9B,EAAsCC,OAAtC,EAA+CqD,eAAA,CAAKkC,GAApD;UACD;;UACD;;QACF,KAAKlC,eAAA,CAAKmC,aAAV;UACEtE,oBAAA,CAAYC,MAAZ,CAAmB2D,GAAnB,4FAA2G,wBAAe/E,MAAf,CAA3G;;UAEAA,MAAM,CAAC0F,KAAP,GAAe,IAAf;UACA,KAAKH,OAAL,CAAaH,MAAb,EAAqBxD,OAArB,EAA8B5B,MAA9B,EAAsCC,OAAtC,EAA+CqD,eAAA,CAAKqC,GAApD;UACA;;QACF,KAAKrC,eAAA,CAAKsC,qBAAV;UACE;UACA;UACA;UACA;;QACF,KAAKtC,eAAA,CAAKuC,kBAAV;UACE/E,mBAAA,CAAegF,aAAf,CAA6B5F,aAA7B;;UACAiB,oBAAA,CAAYC,MAAZ,CAAmB2D,GAAnB,2HAA0I7E,aAA1I;;UAA4J;;QAC9J,KAAKoD,eAAA,CAAKyC,gBAAV;UACEjF,mBAAA,CAAeC,qBAAf,CAAqCb,aAArC,EAAoDF,MAAM,CAACI,GAAP,CAAWY,GAA/D;;UACAG,oBAAA,CAAYC,MAAZ,CAAmB2D,GAAnB,+HAA8I/E,MAAM,CAACI,GAAP,CAAWY,GAAzJ;;UAAiK;;QACnK;UACE,OAAO,IAAP;MA9BJ;;MAiCA,OAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,gBAAOhB,MAAP,EAAe;MACb,IAAOE,aAAP,GAAwBF,MAAxB,CAAOE,aAAP;MACA,IAAKc,GAAL,GAAYhB,MAAZ,CAAKgB,GAAL;;MAEA,IAAI,CAACA,GAAD,IAAQhB,MAAM,CAACI,GAAnB,EAAwB;QACtBY,GAAG,GAAGhB,MAAM,CAACI,GAAP,CAAWY,GAAjB;MACD;;MACD,IAAMY,OAAO,GAAGd,mBAAA,CAAekF,kBAAf,CAAkC9F,aAAlC,EAAiDc,GAAjD,CAAhB;;MACA,IAAMf,OAAO,GAAG,KAAKgG,KAAL,CAAWC,QAAX,CAAoBC,iBAApB,CAAsCC,QAAtC,CAA+C,eAA/C,EAAgElG,aAAhE,CAAhB;;MAEA,IAAIH,uBAAuB,CAACC,MAAD,EAASC,OAAT,EAAkBC,aAAlB,CAA3B,EAA6D;QAC3D,OAAO,IAAP;MACD;;MAED,OAAO,KAAKmG,YAAL,CAAkBzE,OAAlB,EAA2B5B,MAA3B,EAAmCC,OAAnC,EAA4CC,aAA5C,CAAP;IACD;;;EAtLsCoG,+B"}
|
package/dist/roap/index.js
CHANGED
|
@@ -48,6 +48,8 @@ var _request = _interopRequireDefault(require("./request"));
|
|
|
48
48
|
|
|
49
49
|
var _collection = _interopRequireDefault(require("./collection"));
|
|
50
50
|
|
|
51
|
+
var _turnDiscovery = _interopRequireDefault(require("./turnDiscovery"));
|
|
52
|
+
|
|
51
53
|
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); }; }
|
|
52
54
|
|
|
53
55
|
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; } }
|
|
@@ -176,6 +178,7 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
176
178
|
*/
|
|
177
179
|
|
|
178
180
|
_this.lastRoapOffer = {};
|
|
181
|
+
_this.turnDiscovery = new _turnDiscovery.default(_this.roapRequest);
|
|
179
182
|
return _this;
|
|
180
183
|
}
|
|
181
184
|
/**
|
|
@@ -195,11 +198,17 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
195
198
|
|
|
196
199
|
_loggerProxy.default.logger.log("Roap:index#roapEvent --> Received Roap Message [".concat((0, _stringify.default)(msg, null, 2), "]"));
|
|
197
200
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
201
|
+
if (msg.messageType === _constants.ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
|
|
202
|
+
// turn discovery is not part of normal roap protocol and so we are not handling it
|
|
203
|
+
// through the usual roap state machine
|
|
204
|
+
this.turnDiscovery.handleTurnDiscoveryResponse(msg);
|
|
205
|
+
} else {
|
|
206
|
+
this.roapHandler.submit({
|
|
207
|
+
type: _constants.ROAP.RECEIVE_ROAP_MSG,
|
|
208
|
+
msg: msg,
|
|
209
|
+
correlationId: correlationId
|
|
210
|
+
});
|
|
211
|
+
}
|
|
203
212
|
}
|
|
204
213
|
/**
|
|
205
214
|
*
|
|
@@ -361,12 +370,16 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
361
370
|
type: _constants.ROAP.SEND_ROAP_MSG,
|
|
362
371
|
msg: roapMessage,
|
|
363
372
|
correlationId: meeting.correlationId
|
|
364
|
-
});
|
|
373
|
+
}); // When reconnecting, it's important that the first roap message being sent out has empty media id.
|
|
374
|
+
// Normally this is the roap offer, but when TURN discovery is enabled,
|
|
375
|
+
// then this is the TURN discovery request message
|
|
376
|
+
|
|
377
|
+
var sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;
|
|
365
378
|
return this.roapRequest.sendRoap({
|
|
366
379
|
roapMessage: roapMessage,
|
|
367
380
|
correlationId: meeting.correlationId,
|
|
368
381
|
locusSelfUrl: meeting.selfUrl,
|
|
369
|
-
mediaId:
|
|
382
|
+
mediaId: sendEmptyMediaId ? '' : meeting.mediaId,
|
|
370
383
|
audioMuted: meeting.isAudioMuted(),
|
|
371
384
|
videoMuted: meeting.isVideoMuted(),
|
|
372
385
|
meetingId: meeting.id
|
|
@@ -421,6 +434,22 @@ var Roap = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
421
434
|
meeting.processNextQueuedMediaUpdate();
|
|
422
435
|
}
|
|
423
436
|
}
|
|
437
|
+
/**
|
|
438
|
+
* Performs a TURN server discovery procedure, which involves exchanging
|
|
439
|
+
* some roap messages with the server. This exchange has to be done before
|
|
440
|
+
* any other roap messages are sent
|
|
441
|
+
*
|
|
442
|
+
* @param {Meeting} meeting
|
|
443
|
+
* @param {Boolean} isReconnecting should be set to true if this is a new
|
|
444
|
+
* media connection just after a reconnection
|
|
445
|
+
* @returns {Promise}
|
|
446
|
+
*/
|
|
447
|
+
|
|
448
|
+
}, {
|
|
449
|
+
key: "doTurnDiscovery",
|
|
450
|
+
value: function doTurnDiscovery(meeting, isReconnecting) {
|
|
451
|
+
return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);
|
|
452
|
+
}
|
|
424
453
|
}]);
|
|
425
454
|
return Roap;
|
|
426
455
|
}(_webexCore.StatelessWebexPlugin);
|
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","data","message","LoggerProxy","logger","log","RECEIVE_ROAP_MSG","RECEIVE_CALL_LEAVE","resolve","webex","meetings","meetingCollection","getByKey","OK","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","ANSWER","session","errorType","ERROR","reconnect","mediaConnections","updateMediaConnections","sequenceId","RoapCollection","onSessionSequenceFinish","mediaNegotiatedEvent","isBusy","processNextQueuedMediaUpdate","StatelessWebexPlugin"],"sources":["index.js"],"sourcesContent":["import {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs, options) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(this.attrs, this.options, this.sendRoapOK.bind(this), this.sendRoapAnswer.bind(this), this.roapFinished.bind(this));\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n roapEvent(data) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(`Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`);\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId\n });\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n stop(correlationId, seq) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n sendRoapOK(options) {\n return Promise.resolve().then(() => {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapAnswer(options) {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: options.audioMuted,\n videoMuted: options.videoMuted,\n meetingId: meeting.id\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapError(session, locus, errorType) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: reconnect ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapCallRequest = (options) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!meeting.isAudioMuted(),\n videoMuted: !!meeting.isVideoMuted()\n }))\n // mediaId: meeting.mediaId\n }\n ]\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody})\n .then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n };\n\n /**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\n roapFinished(correlationId, sequenceId) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n }\n}\n"],"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.js"],"sourcesContent":["import {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\nimport TurnDiscovery from './turnDiscovery';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs, options) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(this.attrs, this.options, this.sendRoapOK.bind(this), this.sendRoapAnswer.bind(this), this.roapFinished.bind(this));\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n roapEvent(data) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(`Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`);\n\n if (msg.messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n // turn discovery is not part of normal roap protocol and so we are not handling it\n // through the usual roap state machine\n this.turnDiscovery.handleTurnDiscoveryResponse(msg);\n }\n else {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId\n });\n }\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n stop(correlationId, seq) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n sendRoapOK(options) {\n return Promise.resolve().then(() => {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapAnswer(options) {\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', options.correlationId);\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: options.audioMuted,\n videoMuted: options.videoMuted,\n meetingId: meeting.id\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapError(session, locus, errorType) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n const sendEmptyMediaId = reconnect && !meeting.config.experimental.enableTurnDiscovery;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n meetingId: meeting.id\n })\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapCallRequest = (options) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq)) ? 0 : options.roapSeq + 1,\n tieBreaker: 4294967294 // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!meeting.isAudioMuted(),\n videoMuted: !!meeting.isVideoMuted()\n }))\n // mediaId: meeting.mediaId\n }\n ]\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody})\n .then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n };\n\n /**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\n roapFinished(correlationId, sequenceId) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting, isReconnecting) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;IACqBA,I;;;;;EACnB;AACF;AACA;AACA;AACA;EACE,cAAYC,KAAZ,EAAmBC,QAAnB,EAA4B;IAAA;;IAAA;IAC1B,0BAAM,EAAN,EAAUA,QAAV;IACA;AACJ;AACA;AACA;AACA;AACA;;IAP8B,kGAsQN,UAACA,OAAD,EAAa;MACjC,IAAOC,OAAP,GAAkBD,OAAlB,CAAOC,OAAP;MACA,IAAMC,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAA,CAAKC,UAAL,CAAgBC,KADX;QAElBC,IAAI,EAAE,CAACP,OAAO,CAACQ,GAAT,CAFY;QAGlBC,OAAO,EAAEL,eAAA,CAAKM,YAHI;QAIlBC,GAAG,EAAE,OAAOX,OAAO,CAACY,OAAf,KAA2B,QAA3B,IAAuC,oBAAa,0BAAWZ,OAAO,CAACY,OAAnB,CAAb,CAAvC,GAAmF,CAAnF,GAAuFZ,OAAO,CAACY,OAAR,GAAkB,CAJ5F;QAKlBC,UAAU,EAAE,UALM,CAKK;;MALL,CAApB;;MAQA,MAAKC,WAAL,CAAiBC,MAAjB,CAAwB;QACtBC,IAAI,EAAEZ,eAAA,CAAKa,aADW;QAEtBC,GAAG,EAAEhB,WAFiB;QAGtBiB,aAAa,EAAElB,OAAO,CAACkB;MAHD,CAAxB;;MAMA,IAAMC,QAAQ,GAAG;QACfC,WAAW,EAAE,CACX;UACEC,QAAQ,EAAE,wBAAe,MAAKC,WAAL,CAAiBC,qBAAjB,CAAuC;YAC9DtB,WAAW,EAAXA,WAD8D;YAE9D;YACA;YACAuB,UAAU,EAAE,CAAC,CAACxB,OAAO,CAACyB,YAAR,EAJgD;YAK9DC,UAAU,EAAE,CAAC,CAAC1B,OAAO,CAAC2B,YAAR;UALgD,CAAvC,CAAf,CADZ,CAQA;;QARA,CADW;MADE,CAAjB;MAeA,OAAOC,aAAA,CAAYC,kBAAZ,CAA+B7B,OAA/B,EAAwC;QAACC,WAAW,EAAEkB;MAAd,CAAxC,EACJW,IADI,CACC,UAACC,KAAD,EAAW;QACf,MAAKlB,WAAL,CAAiBC,MAAjB,CAAwB;UACtBC,IAAI,EAAEZ,eAAA,CAAK6B,qBADW;UAEtBtB,GAAG,EAAET,WAAW,CAACS,GAFK;UAGtBQ,aAAa,EAAElB,OAAO,CAACkB;QAHD,CAAxB;;QAKAlB,OAAO,CAACiC,UAAR,CAAmBhC,WAAW,CAACS,GAA/B,EANe,CAQf;QACA;;QACA,OAAOqB,KAAP,CAVe,CAWjB;QACA;MACC,CAdI,CAAP;IAeD,CApT2B;IAQ1B,MAAKjC,KAAL,GAAaA,KAAb;IACA;AACJ;AACA;AACA;AACA;AACA;;IACI,MAAKC,OAAL,GAAeA,QAAf;IACA;AACJ;AACA;AACA;AACA;AACA;AACA;;IACI,MAAKc,WAAL,GAAmB,IAAIqB,gBAAJ,CAAgB,MAAKpC,KAArB,EAA4B,MAAKC,OAAjC,EAA0C,MAAKoC,UAAL,CAAgBC,IAAhB,6CAA1C,EAAsE,MAAKC,cAAL,CAAoBD,IAApB,6CAAtE,EAAsG,MAAKE,YAAL,CAAkBF,IAAlB,6CAAtG,CAAnB;IACA;AACJ;AACA;AACA;AACA;AACA;AACA;;IACI,MAAKd,WAAL,GAAmB,IAAIiB,gBAAJ,CAAgB,EAAhB,EAAoBxC,QAApB,CAAnB;IACA;AACJ;AACA;AACA;AACA;AACA;AACA;;IACI,MAAKyC,aAAL,GAAqB,EAArB;IAEA,MAAKC,aAAL,GAAqB,IAAIC,sBAAJ,CAAkB,MAAKpB,WAAvB,CAArB;IAzC0B;EA0C3B;EAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;;WACE,mBAAUqB,IAAV,EAAgB;MACd,IAAM1B,GAAG,GAAG0B,IAAI,CAACC,OAAjB;MACA,IAAO1B,aAAP,GAAwByB,IAAxB,CAAOzB,aAAP;;MAEA2B,oBAAA,CAAYC,MAAZ,CAAmBC,GAAnB,2DAA0E,wBAAe9B,GAAf,EAAoB,IAApB,EAA0B,CAA1B,CAA1E;;MAEA,IAAIA,GAAG,CAACf,WAAJ,KAAoBC,eAAA,CAAKC,UAAL,CAAgB4C,uBAAxC,EAAiE;QAC/D;QACA;QACA,KAAKP,aAAL,CAAmBQ,2BAAnB,CAA+ChC,GAA/C;MACD,CAJD,MAKK;QACH,KAAKJ,WAAL,CAAiBC,MAAjB,CAAwB;UACtBC,IAAI,EAAEZ,eAAA,CAAK+C,gBADW;UAEtBjC,GAAG,EAAHA,GAFsB;UAGtBC,aAAa,EAAbA;QAHsB,CAAxB;MAKD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,cAAKA,aAAL,EAAoBR,GAApB,EAAyB;MACvB,KAAKG,WAAL,CAAiBC,MAAjB,CAAwB;QACtBC,IAAI,EAAEZ,eAAA,CAAKgD,kBADW;QAEtBzC,GAAG,EAAHA,GAFsB;QAGtBQ,aAAa,EAAbA;MAHsB,CAAxB;MAMA,OAAO,iBAAQkC,OAAR,EAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,oBAAWrD,OAAX,EAAoB;MAAA;;MAClB,OAAO,iBAAQqD,OAAR,GAAkBtB,IAAlB,CAAuB,YAAM;QAClC,IAAM9B,OAAO,GAAG,MAAI,CAACqD,KAAL,CAAWC,QAAX,CAAoBC,iBAApB,CAAsCC,QAAtC,CAA+C,eAA/C,EAAgEzD,OAAO,CAACmB,aAAxE,CAAhB;;QACA,IAAMjB,WAAW,GAAG;UAClBC,WAAW,EAAEC,eAAA,CAAKC,UAAL,CAAgBqD,EADX;UAElBjD,OAAO,EAAEL,eAAA,CAAKM,YAFI;UAGlBC,GAAG,EAAEX,OAAO,CAACW;QAHK,CAApB;;QAMAmC,oBAAA,CAAYC,MAAZ,CAAmBC,GAAnB,8DAA6EhD,OAAO,CAACW,GAArF;;QAEA,OAAO,MAAI,CAACY,WAAL,CACJoC,QADI,CACK;UACRzD,WAAW,EAAXA,WADQ;UAER0D,YAAY,EAAE3D,OAAO,CAAC4D,OAFd;UAGRC,OAAO,EAAE9D,OAAO,CAAC8D,OAHT;UAIR3C,aAAa,EAAEnB,OAAO,CAACmB,aAJf;UAKRM,UAAU,EAAExB,OAAO,CAACyB,YAAR,EALJ;UAMRC,UAAU,EAAE1B,OAAO,CAAC2B,YAAR,EANJ;UAORmC,SAAS,EAAE9D,OAAO,CAAC+D;QAPX,CADL,EAUJjC,IAVI,CAUC,YAAM;UACV,MAAI,CAACjB,WAAL,CAAiBC,MAAjB,CAAwB;YACtBC,IAAI,EAAEZ,eAAA,CAAKa,aADW;YAEtBC,GAAG,EAAEhB,WAFiB;YAGtBiB,aAAa,EAAEnB,OAAO,CAACmB;UAHD,CAAxB;;UAKA2B,oBAAA,CAAYC,MAAZ,CAAmBC,GAAnB,2DAA0EhD,OAAO,CAACW,GAAlF;;UACAV,OAAO,CAACiC,UAAR,CAAmBlC,OAAO,CAACW,GAA3B;QACD,CAlBI,CAAP;MAmBD,CA7BM,CAAP;IA8BD,C,CAED;IACA;;IACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,wBAAeX,OAAf,EAAwB;MAAA;;MACtB,IAAMC,OAAO,GAAG,KAAKqD,KAAL,CAAWC,QAAX,CAAoBC,iBAApB,CAAsCC,QAAtC,CAA+C,eAA/C,EAAgEzD,OAAO,CAACmB,aAAxE,CAAhB;MACA,IAAMjB,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAA,CAAKC,UAAL,CAAgB4D,MADX;QAElB1D,IAAI,EAAEP,OAAO,CAACO,IAFI;QAGlBE,OAAO,EAAEL,eAAA,CAAKM,YAHI;QAIlBC,GAAG,EAAEX,OAAO,CAACW;MAJK,CAApB;MAOA,KAAKG,WAAL,CAAiBC,MAAjB,CAAwB;QACtBC,IAAI,EAAEZ,eAAA,CAAKa,aADW;QAEtBC,GAAG,EAAEhB,WAFiB;QAGtBiB,aAAa,EAAEnB,OAAO,CAACmB;MAHD,CAAxB;MAMA,OAAO,KAAKI,WAAL,CACJoC,QADI,CACK;QACRzD,WAAW,EAAXA,WADQ;QAER0D,YAAY,EAAE3D,OAAO,CAAC4D,OAFd;QAGRC,OAAO,EAAE9D,OAAO,CAAC8D,OAHT;QAIR3C,aAAa,EAAEnB,OAAO,CAACmB,aAJf;QAKRM,UAAU,EAAEzB,OAAO,CAACyB,UALZ;QAMRE,UAAU,EAAE3B,OAAO,CAAC2B,UANZ;QAORoC,SAAS,EAAE9D,OAAO,CAAC+D;MAPX,CADL,EAUJjC,IAVI,CAUC,YAAM;QACV9B,OAAO,CAACiC,UAAR,CAAmBlC,OAAO,CAACW,GAA3B;;QAEA,MAAI,CAACG,WAAL,CAAiBC,MAAjB,CAAwB;UACtBC,IAAI,EAAEZ,eAAA,CAAK6B,qBADW;UAEtBtB,GAAG,EAAET,WAAW,CAACS,GAFK;UAGtBQ,aAAa,EAAElB,OAAO,CAACkB;QAHD,CAAxB;MAKD,CAlBI,CAAP;IAmBD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,uBAAc+C,OAAd,EAAuBlC,KAAvB,EAA8BmC,SAA9B,EAAyC;MACvC,IAAMjD,GAAG,GAAG;QACVf,WAAW,EAAEC,eAAA,CAAKC,UAAL,CAAgB+D,KADnB;QAEV3D,OAAO,EAAEL,eAAA,CAAKM,YAFJ;QAGVyD,SAAS,EAATA,SAHU;QAIVxD,GAAG,EAAEuD,OAAO,CAAC5D,KAAR,CAAcK;MAJT,CAAZ;MAOA,OAAO,KAAKY,WAAL,CAAiBoC,QAAjB,CAA0BzC,GAA1B,EAA+Bc,KAA/B,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,8BAAqBhC,OAArB,EAA8B;MAAA;;MAC5B,IAAOC,OAAP,GAA6BD,OAA7B,CAAOC,OAAP;MAAA,IAAgBoE,SAAhB,GAA6BrE,OAA7B,CAAgBqE,SAAhB;MACA,IAAMnE,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAA,CAAKC,UAAL,CAAgBC,KADX;QAElBC,IAAI,EAAE,CAACP,OAAO,CAACQ,GAAT,CAFY;QAGlB;QACAC,OAAO,EAAEL,eAAA,CAAKM,YAJI;QAKlBC,GAAG,EAAE,OAAOX,OAAO,CAACY,OAAf,KAA2B,QAA3B,IAAuC,oBAAa,0BAAWZ,OAAO,CAACY,OAAnB,CAAb,CAAvC,GAAmF,CAAnF,GAAuFZ,OAAO,CAACY,OAAR,GAAkB,CAL5F;QAMlBC,UAAU,EAAE,UANM,CAMK;;MANL,CAApB;MASA,KAAKC,WAAL,CAAiBC,MAAjB,CAAwB;QACtBC,IAAI,EAAEZ,eAAA,CAAKa,aADW;QAEtBC,GAAG,EAAEhB,WAFiB;QAGtBiB,aAAa,EAAElB,OAAO,CAACkB;MAHD,CAAxB,EAX4B,CAiB5B;MACA;MACA;;MACA,IAAMmD,gBAAgB,GAAGD,SAAS,IAAI,CAACpE,OAAO,CAACsE,MAAR,CAAeC,YAAf,CAA4BC,mBAAnE;MAEA,OAAO,KAAKlD,WAAL,CACJoC,QADI,CACK;QACRzD,WAAW,EAAXA,WADQ;QAERiB,aAAa,EAAElB,OAAO,CAACkB,aAFf;QAGRyC,YAAY,EAAE3D,OAAO,CAAC4D,OAHd;QAIRC,OAAO,EAAEQ,gBAAgB,GAAG,EAAH,GAAQrE,OAAO,CAAC6D,OAJjC;QAKRrC,UAAU,EAAExB,OAAO,CAACyB,YAAR,EALJ;QAMRC,UAAU,EAAE1B,OAAO,CAAC2B,YAAR,EANJ;QAORmC,SAAS,EAAE9D,OAAO,CAAC+D;MAPX,CADL,EAUJjC,IAVI,CAUC,gBAA+B;QAAA,IAA7BC,KAA6B,QAA7BA,KAA6B;QAAA,IAAtB0C,gBAAsB,QAAtBA,gBAAsB;;QACnC,MAAI,CAAC5D,WAAL,CAAiBC,MAAjB,CAAwB;UACtBC,IAAI,EAAEZ,eAAA,CAAK6B,qBADW;UAEtBtB,GAAG,EAAET,WAAW,CAACS,GAFK;UAGtBQ,aAAa,EAAElB,OAAO,CAACkB;QAHD,CAAxB;;QAKAlB,OAAO,CAACiC,UAAR,CAAmBhC,WAAW,CAACS,GAA/B;;QAEA,IAAI+D,gBAAJ,EAAsB;UACpBzE,OAAO,CAAC0E,sBAAR,CAA+BD,gBAA/B;QACD,CAVkC,CAYnC;QACA;;;QACA,OAAO1C,KAAP,CAdmC,CAenC;QACA;MACD,CA3BI,CAAP;IA4BD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;;IAiDE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IACE,sBAAab,aAAb,EAA4ByD,UAA5B,EAAwC;MACtCC,mBAAA,CAAeC,uBAAf,CAAuC3D,aAAvC,EAAsDyD,UAAtD;;MACA,IAAM3E,OAAO,GAAG,KAAKqD,KAAL,CAAWC,QAAX,CAAoBC,iBAApB,CAAsCC,QAAtC,CAA+C,eAA/C,EAAgEtC,aAAhE,CAAhB;MAEAlB,OAAO,CAAC8E,oBAAR;;MACA,IAAI,CAACF,mBAAA,CAAeG,MAAf,CAAsB7D,aAAtB,CAAL,EAA2C;QACzClB,OAAO,CAACgF,4BAAR;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,yBAAgBhF,OAAhB,EAAyBiF,cAAzB,EAAyC;MACvC,OAAO,KAAKxC,aAAL,CAAmByC,eAAnB,CAAmClF,OAAnC,EAA4CiF,cAA5C,CAAP;IACD;;;EA1V+BE,+B"}
|
package/dist/roap/request.js
CHANGED
|
@@ -210,11 +210,13 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
210
210
|
/**
|
|
211
211
|
* Sends a ROAP message
|
|
212
212
|
* @param {Object} options
|
|
213
|
-
* @param {
|
|
214
|
-
* @param {String} options.
|
|
215
|
-
* @param {String} options.locusSelfId
|
|
213
|
+
* @param {Object} options.roapMessage
|
|
214
|
+
* @param {String} options.locusSelfUrl
|
|
216
215
|
* @param {String} options.mediaId
|
|
217
216
|
* @param {String} options.correlationId
|
|
217
|
+
* @param {Boolean} options.audioMuted
|
|
218
|
+
* @param {Boolean} options.videoMuted
|
|
219
|
+
* @param {String} options.meetingId
|
|
218
220
|
* @returns {Promise} returns the response/failure of the request
|
|
219
221
|
*/
|
|
220
222
|
|
package/dist/roap/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["RoapRequest","localSdp","reachabilityData","window","localStorage","getItem","REACHABILITY","reachabilityResult","JSON","parse","length","reachability","e","LoggerProxy","logger","error","options","info","roapMessage","resolve","then","deviceUrl","webex","internal","device","url","body","usingResource","resourceId","correlationId","localMedias","attachRechabilityData","audioMuted","videoMuted","clientMediaPreferences","preferTranscoding","locusUrl","PARTICIPANT","sipUrl","services","waitForCatalog","get","LOCI","CALL","invitee","address","sipTarget","ParameterError","request","method","HTTP_VERBS","POST","uri","res","locus","roapSeq","seq","id","split","pop","fullState","lastActive","catch","err","locusSelfUrl","mediaId","meetingId","mediaUrl","MEDIA","messageType","Metrics","postEvent","event","eventType","MEDIA_REQUEST","PUT","deviceType","config","meetings","MEDIA_RESPONSE","mediaConnections","statusCode","data","parseLocusError","StatelessWebexPlugin"],"sources":["request.js"],"sourcesContent":["\n/* global window */\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n PARTICIPANT,\n LOCI,\n CALL,\n MEDIA,\n HTTP_VERBS,\n REACHABILITY\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport ParameterError from '../common/errors/parameter';\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Joins a meeting via ROAP\n * @param {Object} options\n * @returns {Promise} returns a promise that resolves/rejects whatever the request does\n */\n\n\n attachRechabilityData(localSdp) {\n const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);\n\n if (reachabilityData) {\n try {\n const reachabilityResult = JSON.parse(reachabilityData);\n\n /* istanbul ignore else */\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n }\n catch (e) {\n LoggerProxy.logger.error(`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`);\n }\n }\n\n return localSdp;\n }\n\n joinMeetingWithRoap(options) {\n LoggerProxy.logger.info('Roap:request#joinMeetingWithRoap --> Join locus with roap');\n LoggerProxy.logger.info(`Roap:request#joinMeetingWithRoap --> Local SDP: ${options.roapMessage}`);\n\n return Promise.resolve().then(async () => {\n const deviceUrl = this.webex.internal.device.url;\n let url = '';\n\n const body = {\n deviceUrl,\n usingResource: options.resourceId || null,\n correlationId: options.correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(this.attachRechabilityData({\n roapMessage: options.roapMessage,\n audioMuted: false,\n videoMuted: false\n }))\n }\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true\n }\n };\n\n if (options.locusUrl) {\n url = `${options.locusUrl}/${PARTICIPANT}`;\n }\n else if (options.sipUrl) {\n try {\n await this.webex.internal.services.waitForCatalog('postauth');\n url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;\n body.invitee = {\n address: options.sipTarget\n };\n }\n catch (e) {\n LoggerProxy.logger.error(`Roap:request#joinMeetingWithRoap --> ${e}`);\n throw (e);\n }\n }\n else {\n throw new ParameterError('Must provide a locusUrl or sipTarget');\n }\n\n return this.webex\n .request({\n method: HTTP_VERBS.POST,\n uri: url,\n body\n })\n .then((res) => {\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n locus.id = locus.url.split('/').pop();\n LoggerProxy.logger.info(`Roap:request#joinMeetingWithRoap --> Joined locus [${locus.id}][${locus.fullState.lastActive}]`);\n\n return locus;\n })\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:request#joinMeetingWithRoap --> failed with error: ${err}`);\n throw err;\n });\n });\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {String} options.roapMessage\n * @param {String} options.locusId\n * @param {String} options.locusSelfId\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @returns {Promise} returns the response/failure of the request\n */\n sendRoap(options) {\n const {\n roapMessage, locusSelfUrl, mediaId, correlationId, meetingId\n } = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');\n }\n\n const mediaUrl = `${locusSelfUrl}/${MEDIA}`;\n const deviceUrl = this.webex.internal.device.url;\n\n LoggerProxy.logger.info(`Roap:request#sendRoap --> ${mediaUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`);\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});\n\n return this.webex\n .request({\n uri: mediaUrl,\n method: HTTP_VERBS.PUT,\n body: {\n device: {\n url: deviceUrl,\n deviceType: this.config.meetings.deviceType\n },\n correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(this.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!options.audioMuted,\n videoMuted: !!options.videoMuted\n })),\n mediaId: options.mediaId\n }\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true\n }\n }\n })\n .then((res) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});\n\n // always it will be the first mediaConnection Object\n const mediaConnections = res.body.mediaConnections && res.body.mediaConnections.length > 0 && res.body.mediaConnections[0];\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> response:${JSON.stringify(mediaConnections, null, 2)}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections})\n };\n })\n .catch((err) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId, data: {error: Metrics.parseLocusError(err, true)}});\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(roapMessage, null, 2)} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["RoapRequest","localSdp","reachabilityData","window","localStorage","getItem","REACHABILITY","reachabilityResult","JSON","parse","length","reachability","e","LoggerProxy","logger","error","options","info","roapMessage","resolve","then","deviceUrl","webex","internal","device","url","body","usingResource","resourceId","correlationId","localMedias","attachRechabilityData","audioMuted","videoMuted","clientMediaPreferences","preferTranscoding","locusUrl","PARTICIPANT","sipUrl","services","waitForCatalog","get","LOCI","CALL","invitee","address","sipTarget","ParameterError","request","method","HTTP_VERBS","POST","uri","res","locus","roapSeq","seq","id","split","pop","fullState","lastActive","catch","err","locusSelfUrl","mediaId","meetingId","mediaUrl","MEDIA","messageType","Metrics","postEvent","event","eventType","MEDIA_REQUEST","PUT","deviceType","config","meetings","MEDIA_RESPONSE","mediaConnections","statusCode","data","parseLocusError","StatelessWebexPlugin"],"sources":["request.js"],"sourcesContent":["\n/* global window */\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n PARTICIPANT,\n LOCI,\n CALL,\n MEDIA,\n HTTP_VERBS,\n REACHABILITY\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport ParameterError from '../common/errors/parameter';\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Joins a meeting via ROAP\n * @param {Object} options\n * @returns {Promise} returns a promise that resolves/rejects whatever the request does\n */\n\n\n attachRechabilityData(localSdp) {\n const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);\n\n if (reachabilityData) {\n try {\n const reachabilityResult = JSON.parse(reachabilityData);\n\n /* istanbul ignore else */\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n }\n catch (e) {\n LoggerProxy.logger.error(`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`);\n }\n }\n\n return localSdp;\n }\n\n joinMeetingWithRoap(options) {\n LoggerProxy.logger.info('Roap:request#joinMeetingWithRoap --> Join locus with roap');\n LoggerProxy.logger.info(`Roap:request#joinMeetingWithRoap --> Local SDP: ${options.roapMessage}`);\n\n return Promise.resolve().then(async () => {\n const deviceUrl = this.webex.internal.device.url;\n let url = '';\n\n const body = {\n deviceUrl,\n usingResource: options.resourceId || null,\n correlationId: options.correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(this.attachRechabilityData({\n roapMessage: options.roapMessage,\n audioMuted: false,\n videoMuted: false\n }))\n }\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true\n }\n };\n\n if (options.locusUrl) {\n url = `${options.locusUrl}/${PARTICIPANT}`;\n }\n else if (options.sipUrl) {\n try {\n await this.webex.internal.services.waitForCatalog('postauth');\n url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;\n body.invitee = {\n address: options.sipTarget\n };\n }\n catch (e) {\n LoggerProxy.logger.error(`Roap:request#joinMeetingWithRoap --> ${e}`);\n throw (e);\n }\n }\n else {\n throw new ParameterError('Must provide a locusUrl or sipTarget');\n }\n\n return this.webex\n .request({\n method: HTTP_VERBS.POST,\n uri: url,\n body\n })\n .then((res) => {\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n locus.id = locus.url.split('/').pop();\n LoggerProxy.logger.info(`Roap:request#joinMeetingWithRoap --> Joined locus [${locus.id}][${locus.fullState.lastActive}]`);\n\n return locus;\n })\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:request#joinMeetingWithRoap --> failed with error: ${err}`);\n throw err;\n });\n });\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {Object} options.roapMessage\n * @param {String} options.locusSelfUrl\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @param {String} options.meetingId\n * @returns {Promise} returns the response/failure of the request\n */\n sendRoap(options) {\n const {\n roapMessage, locusSelfUrl, mediaId, correlationId, meetingId\n } = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');\n }\n\n const mediaUrl = `${locusSelfUrl}/${MEDIA}`;\n const deviceUrl = this.webex.internal.device.url;\n\n LoggerProxy.logger.info(`Roap:request#sendRoap --> ${mediaUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`);\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});\n\n return this.webex\n .request({\n uri: mediaUrl,\n method: HTTP_VERBS.PUT,\n body: {\n device: {\n url: deviceUrl,\n deviceType: this.config.meetings.deviceType\n },\n correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(this.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!options.audioMuted,\n videoMuted: !!options.videoMuted\n })),\n mediaId: options.mediaId\n }\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true\n }\n }\n })\n .then((res) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});\n\n // always it will be the first mediaConnection Object\n const mediaConnections = res.body.mediaConnections && res.body.mediaConnections.length > 0 && res.body.mediaConnections[0];\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> response:${JSON.stringify(mediaConnections, null, 2)}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections})\n };\n })\n .catch((err) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId, data: {error: Metrics.parseLocusError(err, true)}});\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(roapMessage, null, 2)} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
+
|
|
7
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
exports.default = void 0;
|
|
12
|
+
|
|
13
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
14
|
+
|
|
15
|
+
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
16
|
+
|
|
17
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
18
|
+
|
|
19
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
20
|
+
|
|
21
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
22
|
+
|
|
23
|
+
var _common = require("@webex/common");
|
|
24
|
+
|
|
25
|
+
var _metrics = _interopRequireDefault(require("../metrics"));
|
|
26
|
+
|
|
27
|
+
var _constants = _interopRequireDefault(require("../metrics/constants"));
|
|
28
|
+
|
|
29
|
+
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
30
|
+
|
|
31
|
+
var _constants2 = require("../constants");
|
|
32
|
+
|
|
33
|
+
var TURN_DISCOVERY_TIMEOUT = 10; // in seconds
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Handles the process of finding out TURN server information from Linus.
|
|
37
|
+
* This is achieved by sending a TURN_DISCOVERY_REQUEST.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
var TurnDiscovery = /*#__PURE__*/function () {
|
|
41
|
+
// used for waiting for the response
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Constructor
|
|
45
|
+
*
|
|
46
|
+
* @param {RoapRequest} roapRequest
|
|
47
|
+
*/
|
|
48
|
+
function TurnDiscovery(roapRequest) {
|
|
49
|
+
(0, _classCallCheck2.default)(this, TurnDiscovery);
|
|
50
|
+
(0, _defineProperty2.default)(this, "roapRequest", void 0);
|
|
51
|
+
(0, _defineProperty2.default)(this, "defer", void 0);
|
|
52
|
+
(0, _defineProperty2.default)(this, "turnInfo", void 0);
|
|
53
|
+
(0, _defineProperty2.default)(this, "responseTimer", void 0);
|
|
54
|
+
this.roapRequest = roapRequest;
|
|
55
|
+
this.turnInfo = {
|
|
56
|
+
url: '',
|
|
57
|
+
username: '',
|
|
58
|
+
password: ''
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* waits for TURN_DISCOVERY_RESPONSE message to arrive
|
|
63
|
+
*
|
|
64
|
+
* @returns {Promise}
|
|
65
|
+
* @private
|
|
66
|
+
* @memberof Roap
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
(0, _createClass2.default)(TurnDiscovery, [{
|
|
71
|
+
key: "waitForTurnDiscoveryResponse",
|
|
72
|
+
value: function waitForTurnDiscoveryResponse() {
|
|
73
|
+
if (!this.defer) {
|
|
74
|
+
_loggerProxy.default.logger.warn('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress');
|
|
75
|
+
|
|
76
|
+
return _promise.default.reject(new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()'));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
var defer = this.defer;
|
|
80
|
+
this.responseTimer = setTimeout(function () {
|
|
81
|
+
_loggerProxy.default.logger.warn("Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ".concat(TURN_DISCOVERY_TIMEOUT, " seconds"));
|
|
82
|
+
|
|
83
|
+
defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));
|
|
84
|
+
}, TURN_DISCOVERY_TIMEOUT * 1000);
|
|
85
|
+
|
|
86
|
+
_loggerProxy.default.logger.info('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...');
|
|
87
|
+
|
|
88
|
+
return defer.promise;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* handles TURN_DISCOVERY_RESPONSE roap message
|
|
92
|
+
*
|
|
93
|
+
* @param {Object} roapMessage
|
|
94
|
+
* @returns {void}
|
|
95
|
+
* @public
|
|
96
|
+
* @memberof Roap
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
}, {
|
|
100
|
+
key: "handleTurnDiscoveryResponse",
|
|
101
|
+
value: function handleTurnDiscoveryResponse(roapMessage) {
|
|
102
|
+
var _this = this;
|
|
103
|
+
|
|
104
|
+
var headers = roapMessage.headers;
|
|
105
|
+
|
|
106
|
+
if (!this.defer) {
|
|
107
|
+
_loggerProxy.default.logger.warn('Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response');
|
|
108
|
+
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
var expectedHeaders = [{
|
|
113
|
+
headerName: 'x-cisco-turn-url',
|
|
114
|
+
field: 'url'
|
|
115
|
+
}, {
|
|
116
|
+
headerName: 'x-cisco-turn-username',
|
|
117
|
+
field: 'username'
|
|
118
|
+
}, {
|
|
119
|
+
headerName: 'x-cisco-turn-password',
|
|
120
|
+
field: 'password'
|
|
121
|
+
}];
|
|
122
|
+
var foundHeaders = 0;
|
|
123
|
+
headers === null || headers === void 0 ? void 0 : headers.forEach(function (receivedHeader) {
|
|
124
|
+
// check if it matches any of our expected headers
|
|
125
|
+
expectedHeaders.forEach(function (expectedHeader) {
|
|
126
|
+
if (receivedHeader.startsWith("".concat(expectedHeader.headerName, "="))) {
|
|
127
|
+
_this.turnInfo[expectedHeader.field] = receivedHeader.substring(expectedHeader.headerName.length + 1);
|
|
128
|
+
foundHeaders += 1;
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
clearTimeout(this.responseTimer);
|
|
133
|
+
this.responseTimer = undefined;
|
|
134
|
+
|
|
135
|
+
if (foundHeaders !== expectedHeaders.length) {
|
|
136
|
+
_loggerProxy.default.logger.warn("Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ".concat((0, _stringify.default)(headers)));
|
|
137
|
+
|
|
138
|
+
this.defer.reject(new Error("TURN_DISCOVERY_RESPONSE missing some headers: ".concat((0, _stringify.default)(headers))));
|
|
139
|
+
} else {
|
|
140
|
+
_loggerProxy.default.logger.info("Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=".concat(this.turnInfo.url));
|
|
141
|
+
|
|
142
|
+
this.defer.resolve();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* sends the TURN_DISCOVERY_REQUEST roap request
|
|
147
|
+
*
|
|
148
|
+
* @param {Meeting} meeting
|
|
149
|
+
* @param {Boolean} isReconnecting
|
|
150
|
+
* @returns {Promise}
|
|
151
|
+
* @private
|
|
152
|
+
* @memberof Roap
|
|
153
|
+
*/
|
|
154
|
+
|
|
155
|
+
}, {
|
|
156
|
+
key: "sendRoapTurnDiscoveryRequest",
|
|
157
|
+
value: function sendRoapTurnDiscoveryRequest(meeting, isReconnecting) {
|
|
158
|
+
var seq = meeting.roapSeq + 1;
|
|
159
|
+
|
|
160
|
+
if (this.defer) {
|
|
161
|
+
_loggerProxy.default.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
|
|
162
|
+
|
|
163
|
+
return _promise.default.resolve();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
this.defer = new _common.Defer();
|
|
167
|
+
var roapMessage = {
|
|
168
|
+
messageType: _constants2.ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,
|
|
169
|
+
version: _constants2.ROAP.ROAP_VERSION,
|
|
170
|
+
seq: seq
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
_loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST');
|
|
174
|
+
|
|
175
|
+
return this.roapRequest.sendRoap({
|
|
176
|
+
roapMessage: roapMessage,
|
|
177
|
+
correlationId: meeting.correlationId,
|
|
178
|
+
locusSelfUrl: meeting.selfUrl,
|
|
179
|
+
mediaId: isReconnecting ? '' : meeting.mediaId,
|
|
180
|
+
audioMuted: meeting.isAudioMuted(),
|
|
181
|
+
videoMuted: meeting.isVideoMuted(),
|
|
182
|
+
meetingId: meeting.id
|
|
183
|
+
}).then(function (_ref) {
|
|
184
|
+
var mediaConnections = _ref.mediaConnections;
|
|
185
|
+
meeting.setRoapSeq(seq);
|
|
186
|
+
|
|
187
|
+
if (mediaConnections) {
|
|
188
|
+
meeting.updateMediaConnections(mediaConnections);
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Sends the OK message that server expects to receive
|
|
194
|
+
* after it sends us TURN_DISCOVERY_RESPONSE
|
|
195
|
+
*
|
|
196
|
+
* @param {Meeting} meeting
|
|
197
|
+
* @returns {Promise}
|
|
198
|
+
*/
|
|
199
|
+
|
|
200
|
+
}, {
|
|
201
|
+
key: "sendRoapOK",
|
|
202
|
+
value: function sendRoapOK(meeting) {
|
|
203
|
+
_loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapOK --> sending OK');
|
|
204
|
+
|
|
205
|
+
return this.roapRequest.sendRoap({
|
|
206
|
+
roapMessage: {
|
|
207
|
+
messageType: _constants2.ROAP.ROAP_TYPES.OK,
|
|
208
|
+
version: _constants2.ROAP.ROAP_VERSION,
|
|
209
|
+
seq: meeting.roapSeq
|
|
210
|
+
},
|
|
211
|
+
locusSelfUrl: meeting.selfUrl,
|
|
212
|
+
mediaId: meeting.mediaId,
|
|
213
|
+
correlationId: meeting.correlationId,
|
|
214
|
+
audioMuted: meeting.isAudioMuted(),
|
|
215
|
+
videoMuted: meeting.isVideoMuted(),
|
|
216
|
+
meetingId: meeting.id
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Retrieves TURN server information from the backend by doing
|
|
221
|
+
* a roap message exchange:
|
|
222
|
+
* client server
|
|
223
|
+
* | -----TURN_DISCOVERY_REQUEST-----> |
|
|
224
|
+
* | <----TURN_DISCOVERY_RESPONSE----- |
|
|
225
|
+
* | --------------OK----------------> |
|
|
226
|
+
*
|
|
227
|
+
* @param {Meeting} meeting
|
|
228
|
+
* @param {Boolean} isReconnecting should be set to true if this is a new
|
|
229
|
+
* media connection just after a reconnection
|
|
230
|
+
* @returns {Promise}
|
|
231
|
+
*/
|
|
232
|
+
|
|
233
|
+
}, {
|
|
234
|
+
key: "doTurnDiscovery",
|
|
235
|
+
value: function doTurnDiscovery(meeting, isReconnecting) {
|
|
236
|
+
var _this2 = this;
|
|
237
|
+
|
|
238
|
+
if (!meeting.config.experimental.enableTurnDiscovery) {
|
|
239
|
+
_loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it');
|
|
240
|
+
|
|
241
|
+
return _promise.default.resolve(undefined);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting).then(function () {
|
|
245
|
+
return _this2.waitForTurnDiscoveryResponse();
|
|
246
|
+
}).then(function () {
|
|
247
|
+
return _this2.sendRoapOK(meeting);
|
|
248
|
+
}).then(function () {
|
|
249
|
+
_this2.defer = undefined;
|
|
250
|
+
|
|
251
|
+
_loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');
|
|
252
|
+
|
|
253
|
+
return _this2.turnInfo;
|
|
254
|
+
}).catch(function (e) {
|
|
255
|
+
// we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
|
|
256
|
+
_loggerProxy.default.logger.info("Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ".concat(e));
|
|
257
|
+
|
|
258
|
+
_metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_FAILURE, {
|
|
259
|
+
correlation_id: meeting.correlationId,
|
|
260
|
+
locus_id: meeting.locusUrl.split('/').pop(),
|
|
261
|
+
reason: e.message,
|
|
262
|
+
stack: e.stack
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
return _promise.default.resolve(undefined);
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}]);
|
|
269
|
+
return TurnDiscovery;
|
|
270
|
+
}();
|
|
271
|
+
|
|
272
|
+
exports.default = TurnDiscovery;
|
|
273
|
+
//# sourceMappingURL=turnDiscovery.js.map
|