@webex/plugin-meetings 2.16.0 → 2.19.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.
Files changed (112) hide show
  1. package/README.md +4 -0
  2. package/dist/analyzer/analyzer.js.map +1 -1
  3. package/dist/analyzer/calculator.js.map +1 -1
  4. package/dist/common/browser-detection.js.map +1 -1
  5. package/dist/common/collection.js +2 -3
  6. package/dist/common/collection.js.map +1 -1
  7. package/dist/common/errors/captcha-error.js.map +1 -1
  8. package/dist/common/errors/intent-to-join.js.map +1 -1
  9. package/dist/common/errors/join-meeting.js.map +1 -1
  10. package/dist/common/errors/media.js.map +1 -1
  11. package/dist/common/errors/parameter.js +20 -5
  12. package/dist/common/errors/parameter.js.map +1 -1
  13. package/dist/common/errors/password-error.js.map +1 -1
  14. package/dist/common/errors/permission.js.map +1 -1
  15. package/dist/common/errors/reconnection.js.map +1 -1
  16. package/dist/common/errors/stats.js.map +1 -1
  17. package/dist/common/events/events-scope.js.map +1 -1
  18. package/dist/common/events/events.js.map +1 -1
  19. package/dist/common/events/trigger-proxy.js.map +1 -1
  20. package/dist/common/events/util.js.map +1 -1
  21. package/dist/common/logs/logger-proxy.js.map +1 -1
  22. package/dist/common/logs/request.js.map +1 -1
  23. package/dist/common/queue.js +3 -0
  24. package/dist/common/queue.js.map +1 -1
  25. package/dist/config.js.map +1 -1
  26. package/dist/constants.js +2 -0
  27. package/dist/constants.js.map +1 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/locus-info/fullState.js.map +1 -1
  30. package/dist/locus-info/index.js +5 -3
  31. package/dist/locus-info/index.js.map +1 -1
  32. package/dist/locus-info/infoUtils.js +4 -4
  33. package/dist/locus-info/infoUtils.js.map +1 -1
  34. package/dist/locus-info/parser.js.map +1 -1
  35. package/dist/locus-info/selfUtils.js +22 -9
  36. package/dist/locus-info/selfUtils.js.map +1 -1
  37. package/dist/media/index.js.map +1 -1
  38. package/dist/media/properties.js.map +1 -1
  39. package/dist/media/util.js.map +1 -1
  40. package/dist/meeting/effectsState.js.map +1 -1
  41. package/dist/meeting/in-meeting-actions.js +14 -10
  42. package/dist/meeting/in-meeting-actions.js.map +1 -1
  43. package/dist/meeting/index.js +3 -2
  44. package/dist/meeting/index.js.map +1 -1
  45. package/dist/meeting/muteState.js.map +1 -1
  46. package/dist/meeting/request.js.map +1 -1
  47. package/dist/meeting/state.js.map +1 -1
  48. package/dist/meeting/util.js +8 -0
  49. package/dist/meeting/util.js.map +1 -1
  50. package/dist/meeting-info/index.js.map +1 -1
  51. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  52. package/dist/meeting-info/request.js.map +1 -1
  53. package/dist/meeting-info/util.js +0 -3
  54. package/dist/meeting-info/util.js.map +1 -1
  55. package/dist/meeting-info/utilv2.js +0 -3
  56. package/dist/meeting-info/utilv2.js.map +1 -1
  57. package/dist/meetings/index.js.map +1 -1
  58. package/dist/meetings/request.js.map +1 -1
  59. package/dist/meetings/util.js.map +1 -1
  60. package/dist/member/index.js.map +1 -1
  61. package/dist/members/index.js.map +1 -1
  62. package/dist/members/request.js.map +1 -1
  63. package/dist/members/util.js.map +1 -1
  64. package/dist/metrics/index.js.map +1 -1
  65. package/dist/metrics/mqa-processor.js.map +1 -1
  66. package/dist/networkQualityMonitor/index.js.map +1 -1
  67. package/dist/peer-connection-manager/index.js.map +1 -1
  68. package/dist/personal-meeting-room/request.js.map +1 -1
  69. package/dist/personal-meeting-room/util.js.map +1 -1
  70. package/dist/reachability/index.js.map +1 -1
  71. package/dist/reachability/request.js.map +1 -1
  72. package/dist/reconnection-manager/index.js +0 -3
  73. package/dist/reconnection-manager/index.js.map +1 -1
  74. package/dist/roap/collection.js.map +1 -1
  75. package/dist/roap/handler.js.map +1 -1
  76. package/dist/roap/index.js.map +1 -1
  77. package/dist/roap/request.js.map +1 -1
  78. package/dist/roap/state.js.map +1 -1
  79. package/dist/roap/util.js.map +1 -1
  80. package/dist/stats/data.js.map +1 -1
  81. package/dist/stats/events.js.map +1 -1
  82. package/dist/stats/filter.js.map +1 -1
  83. package/dist/stats/index.js.map +1 -1
  84. package/dist/stats/metrics.js.map +1 -1
  85. package/dist/stats/stats.js.map +1 -1
  86. package/dist/stats/stream.js.map +1 -1
  87. package/dist/stats/transformer.js.map +1 -1
  88. package/dist/stats/util.js.map +1 -1
  89. package/dist/statsAnalyzer/index.js.map +1 -1
  90. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  91. package/dist/transcription/index.js.map +1 -1
  92. package/package.json +6 -6
  93. package/src/common/{collection.js → collection.ts} +2 -2
  94. package/src/common/errors/parameter.ts +29 -0
  95. package/src/common/{queue.js → queue.ts} +1 -0
  96. package/src/{constants.js → constants.ts} +2 -0
  97. package/src/locus-info/index.js +4 -4
  98. package/src/locus-info/infoUtils.js +4 -4
  99. package/src/locus-info/selfUtils.js +18 -9
  100. package/src/meeting/{in-meeting-actions.js → in-meeting-actions.ts} +14 -12
  101. package/src/meeting/index.js +3 -1
  102. package/src/meeting/util.js +4 -0
  103. package/test/unit/spec/locus-info/index.js +4 -1
  104. package/test/unit/spec/locus-info/infoUtils.js +16 -0
  105. package/test/unit/spec/locus-info/selfUtils.js +20 -0
  106. package/test/unit/spec/meeting/{in-meeting-actions.js → in-meeting-actions.ts} +5 -2
  107. package/test/unit/spec/meeting/index.js +2 -2
  108. package/test/unit/spec/meeting/utils.js +14 -0
  109. package/dist/common/constants.js +0 -15
  110. package/dist/common/constants.js.map +0 -1
  111. package/src/common/constants.js +0 -6
  112. package/src/common/errors/parameter.js +0 -26
@@ -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","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":";;;;;;;;;;;;;;;;;;;;;;;;;;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,WAAW,EAAE7D,OAAO,CAAC8D,SAAR,CAAkBC,IAAlB,CAAuBC,EAFtB;gBAGdC,OAAO,EAAEjE,OAAO,CAACiE,OAHH;gBAIdC,IAAI,EAAEP,UAJQ;gBAKd5C,GAAG,EAAEY,OAAO,CAACG,KAAR,CAAcf,GALL;gBAMdd,aAAa,EAAED,OAAO,CAACC,aANT;gBAOdkE,UAAU,EAAEnE,OAAO,CAACoE,YAAR,EAPE;gBAQdC,UAAU,EAAErE,OAAO,CAACsE,YAAR;cARE,CAAhB;YAUD,CAZH,EAaGtD,KAbH,CAaS,UAACuD,KAAD,EAAW;cAChB,IAAMrC,UAAU,GAAGC,mBAAA,CAAmBqC,mBAAtC;cACA,IAAMnC,IAAI,GAAG;gBACXC,cAAc,EAAEtC,OAAO,CAACC,aADb;gBAEXsC,QAAQ,EAAEvC,OAAO,CAAC4B,QAAR,CAAiBY,KAAjB,CAAuB,GAAvB,EAA4BC,GAA5B,EAFC;gBAGXgC,MAAM,EAAEF,KAAK,CAACG,OAHH;gBAIXC,KAAK,EAAEJ,KAAK,CAACI;cAJF,CAAb;cAMA,IAAMC,QAAQ,GAAG;gBACf1E,IAAI,EAAEqE,KAAK,CAACM;cADG,CAAjB;;cAIAlC,gBAAA,CAAQC,oBAAR,CAA6BV,UAA7B,EAAyCG,IAAzC,EAA+CuC,QAA/C;;cACA1D,oBAAA,CAAYC,MAAZ,CAAmBoD,KAAnB,0FAA2GA,KAA3G;YACD,CA3BH;UA4BD;;UACD;;QACF,KAAKlB,eAAA,CAAKC,UAAL,CAAgBwB,UAArB;UACE,IAAI,CAACxE,aAAA,CAASmD,iBAAT,CAA2BzD,OAA3B,CAAL,EAA0C;YACxCM,aAAA,CAASyE,oBAAT,CAA8B/E,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,CAAgB0B,KAArB;UACE9D,oBAAA,CAAYC,MAAZ,CAAmBoD,KAAnB,kEAAmF5C,OAAnF;;UACA;;QACF,KAAK0B,eAAA,CAAKC,UAAL,CAAgB2B,KAArB;UACEtD,OAAO,CAACK,WAAR,CAAoBkD,UAApB,GAAiCvD,OAAO,CAACK,WAAR,CAAoBkD,UAApB,IAAkC,CAAnE;UACAvD,OAAO,CAACG,KAAR,CAAcoD,UAAd,GAA2BvD,OAAO,CAACG,KAAR,CAAcoD,UAAd,IAA4B,CAAvD;;UACAhE,oBAAA,CAAYC,MAAZ,CAAmBC,IAAnB,CAAwB,mEAAxB;;UACA,IAAIO,OAAO,CAACK,WAAR,CAAoBkD,UAApB,GAAiCvD,OAAO,CAACG,KAAR,CAAcoD,UAAnD,EAA+D;YAC7D;YACAhE,oBAAA,CAAYC,MAAZ,CAAmBgE,GAAnB,CAAuB,kEAAvB;UACD,CAHD,MAIK;YACHjE,oBAAA,CAAYC,MAAZ,CAAmBgE,GAAnB,CAAuB,mEAAvB;UACD;;UACDxD,OAAO,CAACmB,KAAR,CAAcsC,IAAd,CAAmB/B,eAAA,CAAKgC,WAAL,CAAiBC,cAApC,EAAoDtF,OAApD,EAA6DD,MAA7D;UACA,KAAKwF,OAAL,CAAa5D,OAAb,EAAsB3B,OAAtB;UACA;;QACF;UACE;MAtEJ;IAwED;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,iBAAQwF,MAAR,EAAgB7D,OAAhB,EAAyB5B,MAAzB,EAAiCC,OAAjC,EAA0CyF,MAA1C,EAAkD;MAChD,IAAI9D,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;QAMA6D,MAAM,GAAGnC,eAAA,CAAKgC,WAAL,WAAoBI,MAApB,SAA6B1F,MAAM,CAACI,GAAP,CAAWC,WAAxC,EAAT;QACAuB,OAAO,CAACmB,KAAR,CAAcsC,IAAd,CAAmBI,MAAnB,EAA2BxF,OAA3B,EAAoCD,MAApC;QACA,KAAKwF,OAAL,CAAa5D,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,IAAIuF,MAAJ;;MAGA,QAAQzF,MAAM,CAACG,IAAf;QACE,KAAKmD,eAAA,CAAKqC,gBAAV;UACExE,oBAAA,CAAYC,MAAZ,CAAmBgE,GAAnB,oGAAmH,wBAAepF,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,KAAK0D,OAAL,CAAaH,MAAb,EAAqB7D,OAArB,EAA8B5B,MAA9B,EAAsCC,OAAtC,EAA+CqD,eAAA,CAAKuC,GAApD;UACD;;UACD;;QACF,KAAKvC,eAAA,CAAKwC,aAAV;UACE3E,oBAAA,CAAYC,MAAZ,CAAmBgE,GAAnB,4FAA2G,wBAAepF,MAAf,CAA3G;;UAEAA,MAAM,CAAC+F,KAAP,GAAe,IAAf;UACA,KAAKH,OAAL,CAAaH,MAAb,EAAqB7D,OAArB,EAA8B5B,MAA9B,EAAsCC,OAAtC,EAA+CqD,eAAA,CAAK0C,GAApD;UACA;;QACF,KAAK1C,eAAA,CAAK2C,qBAAV;UACE;UACA;UACA;UACA;;QACF,KAAK3C,eAAA,CAAK4C,kBAAV;UACEpF,mBAAA,CAAeqF,aAAf,CAA6BjG,aAA7B;;UACAiB,oBAAA,CAAYC,MAAZ,CAAmBgE,GAAnB,2HAA0IlF,aAA1I;;UAA4J;;QAC9J,KAAKoD,eAAA,CAAK8C,gBAAV;UACEtF,mBAAA,CAAeC,qBAAf,CAAqCb,aAArC,EAAoDF,MAAM,CAACI,GAAP,CAAWY,GAA/D;;UACAG,oBAAA,CAAYC,MAAZ,CAAmBgE,GAAnB,+HAA8IpF,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,CAAeuF,kBAAf,CAAkCnG,aAAlC,EAAiDc,GAAjD,CAAhB;;MACA,IAAMf,OAAO,GAAG,KAAKqG,KAAL,CAAWC,QAAX,CAAoBC,iBAApB,CAAsCC,QAAtC,CAA+C,eAA/C,EAAgEvG,aAAhE,CAAhB;;MAEA,IAAIH,uBAAuB,CAACC,MAAD,EAASC,OAAT,EAAkBC,aAAlB,CAA3B,EAA6D;QAC3D,OAAO,IAAP;MACD;;MAED,OAAO,KAAKwG,YAAL,CAAkB9E,OAAlB,EAA2B5B,MAA3B,EAAmCC,OAAnC,EAA4CC,aAA5C,CAAP;IACD;;;EAxLsCyG,+B"}
@@ -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","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 +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 {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 +1 @@
1
- {"version":3,"names":["shouldStep","roap","meeting","messageType","msg","_OFFER_","remote","shareStatus","_REQUESTED_","mediaProperties","peerConnection","_ANSWER_","LoggerProxy","logger","log","signalingState","handleTransition","value","signal","ROAP","ROAP_STATE","INIT","ROAP_SIGNAL","RX_OFFER","WAIT_TX_ANSWER","TX_OFFER","WAIT_RX_ANSWER","WAIT_RX_OFFER","RX_ANSWER","mediaId","WAIT_TX_OK","error","GLARE","WAIT_TX_OFFER","TX_ANSWER","WAIT_RX_OK","TX_OK","RX_OK","ERROR","RoapStateMachine","createState","RoapState","StateMachine","factory","init","transitions","name","ROAP_TRANSITIONS","STEP","from","to","state","methods","onAfterStep","transition"],"sources":["state.js"],"sourcesContent":["import StateMachine from 'javascript-state-machine';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_, _ANSWER_, _REQUESTED_} from '../constants';\n\nconst shouldStep = (roap, meeting) => {\n const {messageType} = roap.msg;\n\n if (meeting) {\n if (messageType === _OFFER_ && roap.remote && meeting.shareStatus === _REQUESTED_) {\n // The peer-connection is waiting for answer but got an offer Reset. Try to\n // send the offer later after you accept the answer\n return false;\n }\n // Assuming the mercury event has come first before the response for the event\n // we have to wait for the response and trigger the ROAP request later on\n if (!meeting.mediaProperties.peerConnection && messageType === _ANSWER_) {\n return false;\n }\n }\n LoggerProxy.logger.log('Roap:state#shouldStep --> RoapStateMachine: PeerConnectionState, ', meeting.mediaProperties.peerConnection.signalingState);\n LoggerProxy.logger.log('Roap:state#shouldStep --> RoapStateMachine: success save proceeding with transition, ', roap.msg);\n\n return true;\n};\n\nconst handleTransition = (value, signal, meeting) => {\n LoggerProxy.logger.log(`Roap:state#handleTransition --> current ${value} to ${signal}`);\n\n switch (value) {\n case ROAP.ROAP_STATE.INIT:\n if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {\n return ROAP.ROAP_STATE.WAIT_TX_ANSWER;\n }\n if (signal === ROAP.ROAP_SIGNAL.TX_OFFER) {\n return ROAP.ROAP_STATE.WAIT_RX_ANSWER;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n if (signal === ROAP.ROAP_SIGNAL.RX_ANSWER) {\n // There is a race condition where the /call response comes after mercury event from the server\n // As mercury sends roap event if it didnt get back a response. We can send the roap ok after that\n if (meeting.mediaId) {\n return ROAP.ROAP_STATE.WAIT_TX_OK;\n }\n LoggerProxy.logger.error('Roap:state#handleTransition --> Race Condition no mediaId, continuing.');\n\n return value;\n }\n\n if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {\n return ROAP.ROAP_STATE.GLARE;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_OFFER:\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n if (signal === ROAP.ROAP_SIGNAL.TX_ANSWER) {\n return ROAP.ROAP_STATE.WAIT_RX_OK;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (signal === ROAP.ROAP_SIGNAL.TX_OK) {\n return ROAP.ROAP_STATE.INIT;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_OK:\n if (signal === ROAP.ROAP_SIGNAL.RX_OK) {\n return ROAP.ROAP_STATE.INIT;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.ERROR:\n // eslint-disable-next-line no-warning-comments\n // TODO: resolve error state. Add a signal constant and handle the cleanup\n return ROAP.ROAP_STATE.INIT;\n\n case ROAP.ROAP_STATE.GLARE:\n return ROAP.ROAP_STATE.WAIT_RX_ANSWER;\n default:\n return value;\n }\n};\n\nconst RoapStateMachine = {\n /**\n * @param {Roap} roapRef\n * initializes the state machine\n * @returns {StateMachine} an instance of a state machine\n */\n createState() {\n const RoapState = StateMachine.factory({\n init: ROAP.ROAP_STATE.INIT,\n transitions: [\n {\n name: ROAP.ROAP_TRANSITIONS.STEP,\n from: '*',\n /**\n * Method to handle the transitions between states\n * @param {String} signal\n * @param {Meeting} meeting instance of a Meeting\n * @param {Object} roap\n * @returns {String} new state value\n */\n to(signal, meeting, roap) {\n const value = this.state;\n\n if (!shouldStep(roap, meeting)) {\n return value;\n }\n\n return handleTransition(value, signal, meeting);\n }\n }\n ],\n methods: {\n /**\n * Event that fires after we've transitioned to a new state\n * @param {Object} transition\n * @returns {null}\n */\n onAfterStep(transition) {\n LoggerProxy.logger.log(\n `Roap:state#onAfterStep --> RoapStateMachine->onAfterStep#fired! State changed from '${transition.from}' to '${\n transition.to\n }' with transition '${transition.transition}''.`\n );\n }\n }\n });\n\n return new RoapState();\n }\n};\n\nexport default RoapStateMachine;\n"],"mappings":"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"}
1
+ {"version":3,"names":["shouldStep","roap","meeting","messageType","msg","_OFFER_","remote","shareStatus","_REQUESTED_","mediaProperties","peerConnection","_ANSWER_","LoggerProxy","logger","log","signalingState","handleTransition","value","signal","ROAP","ROAP_STATE","INIT","ROAP_SIGNAL","RX_OFFER","WAIT_TX_ANSWER","TX_OFFER","WAIT_RX_ANSWER","WAIT_RX_OFFER","RX_ANSWER","mediaId","WAIT_TX_OK","error","GLARE","WAIT_TX_OFFER","TX_ANSWER","WAIT_RX_OK","TX_OK","RX_OK","ERROR","RoapStateMachine","createState","RoapState","StateMachine","factory","init","transitions","name","ROAP_TRANSITIONS","STEP","from","to","state","methods","onAfterStep","transition"],"sources":["state.js"],"sourcesContent":["import StateMachine from 'javascript-state-machine';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_, _ANSWER_, _REQUESTED_} from '../constants';\n\nconst shouldStep = (roap, meeting) => {\n const {messageType} = roap.msg;\n\n if (meeting) {\n if (messageType === _OFFER_ && roap.remote && meeting.shareStatus === _REQUESTED_) {\n // The peer-connection is waiting for answer but got an offer Reset. Try to\n // send the offer later after you accept the answer\n return false;\n }\n // Assuming the mercury event has come first before the response for the event\n // we have to wait for the response and trigger the ROAP request later on\n if (!meeting.mediaProperties.peerConnection && messageType === _ANSWER_) {\n return false;\n }\n }\n LoggerProxy.logger.log('Roap:state#shouldStep --> RoapStateMachine: PeerConnectionState, ', meeting.mediaProperties.peerConnection.signalingState);\n LoggerProxy.logger.log('Roap:state#shouldStep --> RoapStateMachine: success save proceeding with transition, ', roap.msg);\n\n return true;\n};\n\nconst handleTransition = (value, signal, meeting) => {\n LoggerProxy.logger.log(`Roap:state#handleTransition --> current ${value} to ${signal}`);\n\n switch (value) {\n case ROAP.ROAP_STATE.INIT:\n if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {\n return ROAP.ROAP_STATE.WAIT_TX_ANSWER;\n }\n if (signal === ROAP.ROAP_SIGNAL.TX_OFFER) {\n return ROAP.ROAP_STATE.WAIT_RX_ANSWER;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n if (signal === ROAP.ROAP_SIGNAL.RX_ANSWER) {\n // There is a race condition where the /call response comes after mercury event from the server\n // As mercury sends roap event if it didnt get back a response. We can send the roap ok after that\n if (meeting.mediaId) {\n return ROAP.ROAP_STATE.WAIT_TX_OK;\n }\n LoggerProxy.logger.error('Roap:state#handleTransition --> Race Condition no mediaId, continuing.');\n\n return value;\n }\n\n if (signal === ROAP.ROAP_SIGNAL.RX_OFFER) {\n return ROAP.ROAP_STATE.GLARE;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_OFFER:\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n if (signal === ROAP.ROAP_SIGNAL.TX_ANSWER) {\n return ROAP.ROAP_STATE.WAIT_RX_OK;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (signal === ROAP.ROAP_SIGNAL.TX_OK) {\n return ROAP.ROAP_STATE.INIT;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.WAIT_RX_OK:\n if (signal === ROAP.ROAP_SIGNAL.RX_OK) {\n return ROAP.ROAP_STATE.INIT;\n }\n\n return value;\n\n case ROAP.ROAP_STATE.ERROR:\n // eslint-disable-next-line no-warning-comments\n // TODO: resolve error state. Add a signal constant and handle the cleanup\n return ROAP.ROAP_STATE.INIT;\n\n case ROAP.ROAP_STATE.GLARE:\n return ROAP.ROAP_STATE.WAIT_RX_ANSWER;\n default:\n return value;\n }\n};\n\nconst RoapStateMachine = {\n /**\n * @param {Roap} roapRef\n * initializes the state machine\n * @returns {StateMachine} an instance of a state machine\n */\n createState() {\n const RoapState = StateMachine.factory({\n init: ROAP.ROAP_STATE.INIT,\n transitions: [\n {\n name: ROAP.ROAP_TRANSITIONS.STEP,\n from: '*',\n /**\n * Method to handle the transitions between states\n * @param {String} signal\n * @param {Meeting} meeting instance of a Meeting\n * @param {Object} roap\n * @returns {String} new state value\n */\n to(signal, meeting, roap) {\n const value = this.state;\n\n if (!shouldStep(roap, meeting)) {\n return value;\n }\n\n return handleTransition(value, signal, meeting);\n }\n }\n ],\n methods: {\n /**\n * Event that fires after we've transitioned to a new state\n * @param {Object} transition\n * @returns {null}\n */\n onAfterStep(transition) {\n LoggerProxy.logger.log(\n `Roap:state#onAfterStep --> RoapStateMachine->onAfterStep#fired! State changed from '${transition.from}' to '${\n transition.to\n }' with transition '${transition.transition}''.`\n );\n }\n }\n });\n\n return new RoapState();\n }\n};\n\nexport default RoapStateMachine;\n"],"mappings":";;;;;;;;;;;;AAAA;;AAEA;;AACA;;AAEA,IAAMA,UAAU,GAAG,SAAbA,UAAa,CAACC,IAAD,EAAOC,OAAP,EAAmB;EACpC,IAAOC,WAAP,GAAsBF,IAAI,CAACG,GAA3B,CAAOD,WAAP;;EAEA,IAAID,OAAJ,EAAa;IACX,IAAIC,WAAW,KAAKE,kBAAhB,IAA2BJ,IAAI,CAACK,MAAhC,IAA0CJ,OAAO,CAACK,WAAR,KAAwBC,sBAAtE,EAAmF;MACjF;MACA;MACA,OAAO,KAAP;IACD,CALU,CAMX;IACA;;;IACA,IAAI,CAACN,OAAO,CAACO,eAAR,CAAwBC,cAAzB,IAA2CP,WAAW,KAAKQ,mBAA/D,EAAyE;MACvE,OAAO,KAAP;IACD;EACF;;EACDC,oBAAA,CAAYC,MAAZ,CAAmBC,GAAnB,CAAuB,mEAAvB,EAA4FZ,OAAO,CAACO,eAAR,CAAwBC,cAAxB,CAAuCK,cAAnI;;EACAH,oBAAA,CAAYC,MAAZ,CAAmBC,GAAnB,CAAuB,uFAAvB,EAAgHb,IAAI,CAACG,GAArH;;EAEA,OAAO,IAAP;AACD,CAnBD;;AAqBA,IAAMY,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,KAAD,EAAQC,MAAR,EAAgBhB,OAAhB,EAA4B;EACnDU,oBAAA,CAAYC,MAAZ,CAAmBC,GAAnB,mDAAkEG,KAAlE,iBAA8EC,MAA9E;;EAEA,QAAQD,KAAR;IACE,KAAKE,eAAA,CAAKC,UAAL,CAAgBC,IAArB;MACE,IAAIH,MAAM,KAAKC,eAAA,CAAKG,WAAL,CAAiBC,QAAhC,EAA0C;QACxC,OAAOJ,eAAA,CAAKC,UAAL,CAAgBI,cAAvB;MACD;;MACD,IAAIN,MAAM,KAAKC,eAAA,CAAKG,WAAL,CAAiBG,QAAhC,EAA0C;QACxC,OAAON,eAAA,CAAKC,UAAL,CAAgBM,cAAvB;MACD;;MAED,OAAOT,KAAP;;IAEF,KAAKE,eAAA,CAAKC,UAAL,CAAgBO,aAArB;MACE,OAAOV,KAAP;;IAEF,KAAKE,eAAA,CAAKC,UAAL,CAAgBM,cAArB;MACE,IAAIR,MAAM,KAAKC,eAAA,CAAKG,WAAL,CAAiBM,SAAhC,EAA2C;QACzC;QACA;QACA,IAAI1B,OAAO,CAAC2B,OAAZ,EAAqB;UACnB,OAAOV,eAAA,CAAKC,UAAL,CAAgBU,UAAvB;QACD;;QACDlB,oBAAA,CAAYC,MAAZ,CAAmBkB,KAAnB,CAAyB,wEAAzB;;QAEA,OAAOd,KAAP;MACD;;MAED,IAAIC,MAAM,KAAKC,eAAA,CAAKG,WAAL,CAAiBC,QAAhC,EAA0C;QACxC,OAAOJ,eAAA,CAAKC,UAAL,CAAgBY,KAAvB;MACD;;MAED,OAAOf,KAAP;;IAEF,KAAKE,eAAA,CAAKC,UAAL,CAAgBa,aAArB;MACE,OAAOhB,KAAP;;IAEF,KAAKE,eAAA,CAAKC,UAAL,CAAgBI,cAArB;MACE,IAAIN,MAAM,KAAKC,eAAA,CAAKG,WAAL,CAAiBY,SAAhC,EAA2C;QACzC,OAAOf,eAAA,CAAKC,UAAL,CAAgBe,UAAvB;MACD;;MAED,OAAOlB,KAAP;;IAEF,KAAKE,eAAA,CAAKC,UAAL,CAAgBU,UAArB;MACE,IAAIZ,MAAM,KAAKC,eAAA,CAAKG,WAAL,CAAiBc,KAAhC,EAAuC;QACrC,OAAOjB,eAAA,CAAKC,UAAL,CAAgBC,IAAvB;MACD;;MAED,OAAOJ,KAAP;;IAEF,KAAKE,eAAA,CAAKC,UAAL,CAAgBe,UAArB;MACE,IAAIjB,MAAM,KAAKC,eAAA,CAAKG,WAAL,CAAiBe,KAAhC,EAAuC;QACrC,OAAOlB,eAAA,CAAKC,UAAL,CAAgBC,IAAvB;MACD;;MAED,OAAOJ,KAAP;;IAEF,KAAKE,eAAA,CAAKC,UAAL,CAAgBkB,KAArB;MACE;MACA;MACA,OAAOnB,eAAA,CAAKC,UAAL,CAAgBC,IAAvB;;IAEF,KAAKF,eAAA,CAAKC,UAAL,CAAgBY,KAArB;MACE,OAAOb,eAAA,CAAKC,UAAL,CAAgBM,cAAvB;;IACF;MACE,OAAOT,KAAP;EAhEJ;AAkED,CArED;;AAuEA,IAAMsB,gBAAgB,GAAG;EACvB;AACF;AACA;AACA;AACA;EACEC,WANuB,yBAMT;IACZ,IAAMC,SAAS,GAAGC,+BAAA,CAAaC,OAAb,CAAqB;MACrCC,IAAI,EAAEzB,eAAA,CAAKC,UAAL,CAAgBC,IADe;MAErCwB,WAAW,EAAE,CACX;QACEC,IAAI,EAAE3B,eAAA,CAAK4B,gBAAL,CAAsBC,IAD9B;QAEEC,IAAI,EAAE,GAFR;;QAGE;AACV;AACA;AACA;AACA;AACA;AACA;QACUC,EAVF,cAUKhC,MAVL,EAUahB,OAVb,EAUsBD,IAVtB,EAU4B;UACxB,IAAMgB,KAAK,GAAG,KAAKkC,KAAnB;;UAEA,IAAI,CAACnD,UAAU,CAACC,IAAD,EAAOC,OAAP,CAAf,EAAgC;YAC9B,OAAOe,KAAP;UACD;;UAED,OAAOD,gBAAgB,CAACC,KAAD,EAAQC,MAAR,EAAgBhB,OAAhB,CAAvB;QACD;MAlBH,CADW,CAFwB;MAwBrCkD,OAAO,EAAE;QACP;AACR;AACA;AACA;AACA;QACQC,WANO,uBAMKC,UANL,EAMiB;UACtB1C,oBAAA,CAAYC,MAAZ,CAAmBC,GAAnB,+FACyFwC,UAAU,CAACL,IADpG,mBAEIK,UAAU,CAACJ,EAFf,gCAGwBI,UAAU,CAACA,UAHnC;QAKD;MAZM;IAxB4B,CAArB,CAAlB;;IAwCA,OAAO,IAAIb,SAAJ,EAAP;EACD;AAhDsB,CAAzB;eAmDeF,gB"}
@@ -1 +1 @@
1
- {"version":3,"names":["RoapUtil","ROAP_ANSWER","_ANSWER_","toLowerCase","shouldHandleMedia","meeting","offer","mediaProperties","peerConnection","signalingState","SDP","HAVE_LOCAL_OFFER","handleError","pc","PeerConnectionManager","rollBackLocalDescription","then","resolve","catch","err","LoggerProxy","logger","error","reject","findError","messageType","errorType","type","ROAP","RECEIVE_ROAP_MSG","SEND_ROAP_MSG","_ERROR_","_CONFLICT_","ensureMeeting","SEND_ROAP_MSG_SUCCESS","updatePeerConnection","session","offerSdp","OFFER","sdps","meetingId","id","remoteQualityLevel","res","roap","lastRoapOffer","setRemoteDescription","info","correlationId","ParameterError","setRemoteSessionDetails","ANSWER","seq","locusId","locusSelfId","locusInfo","self","mediaId"],"sources":["util.js"],"sourcesContent":["\nimport PeerConnectionManager from '../peer-connection-manager';\nimport {\n _ANSWER_,\n _ERROR_,\n _CONFLICT_,\n ROAP,\n SDP\n} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport ParameterError from '../common/errors/parameter';\n\nconst RoapUtil = {};\nconst ROAP_ANSWER = _ANSWER_.toLowerCase();\n\nRoapUtil.shouldHandleMedia = (meeting) => {\n const offer =\n meeting.mediaProperties.peerConnection &&\n meeting.mediaProperties.peerConnection.signalingState === SDP.HAVE_LOCAL_OFFER;\n\n if (offer) {\n return false;\n }\n\n return true;\n};\n\nRoapUtil.handleError = (pc) =>\n PeerConnectionManager.rollBackLocalDescription({peerConnection: pc})\n .then(() => Promise.resolve(true))\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:util#handleError --> ${err}`);\n\n return Promise.reject(err);\n });\n\nRoapUtil.findError = (messageType, errorType, type) =>\n (type === ROAP.RECEIVE_ROAP_MSG || type === ROAP.SEND_ROAP_MSG) && messageType === _ERROR_ && errorType === _CONFLICT_;\n\nRoapUtil.ensureMeeting = (meeting, type) => {\n if (type === ROAP.RECEIVE_ROAP_MSG || type === ROAP.SEND_ROAP_MSG || type === ROAP.SEND_ROAP_MSG_SUCCESS) {\n if (!meeting) {\n return false;\n }\n }\n\n return true;\n};\n\nRoapUtil.updatePeerConnection = (meeting, session) => PeerConnectionManager.updatePeerConnection({\n offerSdp: session.OFFER.sdps,\n peerConnection: meeting.mediaProperties.peerConnection\n},\n{\n meetingId: meeting.id,\n remoteQualityLevel: meeting.mediaProperties.remoteQualityLevel\n})\n .then((res) => {\n meeting.roap.lastRoapOffer = session.OFFER.sdps;\n\n return res;\n });\n\n\nRoapUtil.setRemoteDescription = (meeting, session) => {\n LoggerProxy.logger.info(`Roap:util#setRemoteDescription --> Transmit WAIT_TX_OK, correlationId: ${meeting.correlationId}`);\n if (!(meeting && (meeting.mediaProperties.peerConnection))) {\n LoggerProxy.logger.error(`Roap:util#setRemoteDescription --> DANGER no media or screen peer connection, correlationId: ${meeting.correlationId}`);\n\n return Promise.reject(new ParameterError('Must provide a media or screen peer connection'));\n }\n\n return PeerConnectionManager.setRemoteSessionDetails(\n meeting.mediaProperties.peerConnection,\n ROAP_ANSWER,\n session.ANSWER.sdps[0],\n meeting.id\n ).then(() => {\n LoggerProxy.logger.info(`Roap:util#setRemoteDescription --> Success for correlationId: ${meeting.correlationId}`);\n\n return {\n seq: session.ANSWER.seq,\n locusId: meeting.locusId,\n locusSelfId: meeting.locusInfo.self.id,\n mediaId: meeting.mediaId,\n correlationId: meeting.correlationId\n };\n })\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:util#setRemoteDescription --> ${err}`);\n throw err;\n });\n};\n\nexport default RoapUtil;\n"],"mappings":"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"}
1
+ {"version":3,"names":["RoapUtil","ROAP_ANSWER","_ANSWER_","toLowerCase","shouldHandleMedia","meeting","offer","mediaProperties","peerConnection","signalingState","SDP","HAVE_LOCAL_OFFER","handleError","pc","PeerConnectionManager","rollBackLocalDescription","then","resolve","catch","err","LoggerProxy","logger","error","reject","findError","messageType","errorType","type","ROAP","RECEIVE_ROAP_MSG","SEND_ROAP_MSG","_ERROR_","_CONFLICT_","ensureMeeting","SEND_ROAP_MSG_SUCCESS","updatePeerConnection","session","offerSdp","OFFER","sdps","meetingId","id","remoteQualityLevel","res","roap","lastRoapOffer","setRemoteDescription","info","correlationId","ParameterError","setRemoteSessionDetails","ANSWER","seq","locusId","locusSelfId","locusInfo","self","mediaId"],"sources":["util.js"],"sourcesContent":["\nimport PeerConnectionManager from '../peer-connection-manager';\nimport {\n _ANSWER_,\n _ERROR_,\n _CONFLICT_,\n ROAP,\n SDP\n} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport ParameterError from '../common/errors/parameter';\n\nconst RoapUtil = {};\nconst ROAP_ANSWER = _ANSWER_.toLowerCase();\n\nRoapUtil.shouldHandleMedia = (meeting) => {\n const offer =\n meeting.mediaProperties.peerConnection &&\n meeting.mediaProperties.peerConnection.signalingState === SDP.HAVE_LOCAL_OFFER;\n\n if (offer) {\n return false;\n }\n\n return true;\n};\n\nRoapUtil.handleError = (pc) =>\n PeerConnectionManager.rollBackLocalDescription({peerConnection: pc})\n .then(() => Promise.resolve(true))\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:util#handleError --> ${err}`);\n\n return Promise.reject(err);\n });\n\nRoapUtil.findError = (messageType, errorType, type) =>\n (type === ROAP.RECEIVE_ROAP_MSG || type === ROAP.SEND_ROAP_MSG) && messageType === _ERROR_ && errorType === _CONFLICT_;\n\nRoapUtil.ensureMeeting = (meeting, type) => {\n if (type === ROAP.RECEIVE_ROAP_MSG || type === ROAP.SEND_ROAP_MSG || type === ROAP.SEND_ROAP_MSG_SUCCESS) {\n if (!meeting) {\n return false;\n }\n }\n\n return true;\n};\n\nRoapUtil.updatePeerConnection = (meeting, session) => PeerConnectionManager.updatePeerConnection({\n offerSdp: session.OFFER.sdps,\n peerConnection: meeting.mediaProperties.peerConnection\n},\n{\n meetingId: meeting.id,\n remoteQualityLevel: meeting.mediaProperties.remoteQualityLevel\n})\n .then((res) => {\n meeting.roap.lastRoapOffer = session.OFFER.sdps;\n\n return res;\n });\n\n\nRoapUtil.setRemoteDescription = (meeting, session) => {\n LoggerProxy.logger.info(`Roap:util#setRemoteDescription --> Transmit WAIT_TX_OK, correlationId: ${meeting.correlationId}`);\n if (!(meeting && (meeting.mediaProperties.peerConnection))) {\n LoggerProxy.logger.error(`Roap:util#setRemoteDescription --> DANGER no media or screen peer connection, correlationId: ${meeting.correlationId}`);\n\n return Promise.reject(new ParameterError('Must provide a media or screen peer connection'));\n }\n\n return PeerConnectionManager.setRemoteSessionDetails(\n meeting.mediaProperties.peerConnection,\n ROAP_ANSWER,\n session.ANSWER.sdps[0],\n meeting.id\n ).then(() => {\n LoggerProxy.logger.info(`Roap:util#setRemoteDescription --> Success for correlationId: ${meeting.correlationId}`);\n\n return {\n seq: session.ANSWER.seq,\n locusId: meeting.locusId,\n locusSelfId: meeting.locusInfo.self.id,\n mediaId: meeting.mediaId,\n correlationId: meeting.correlationId\n };\n })\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:util#setRemoteDescription --> ${err}`);\n throw err;\n });\n};\n\nexport default RoapUtil;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["WebRTCData","data","id","uuid","v4","flat","forEach","key","DEFAULT_OMISSION_DATA_KEYS"],"sources":["data.js"],"sourcesContent":["import uuid from 'uuid';\nimport {isEmpty, omit} from 'lodash';\n\nimport {DEFAULT_OMISSION_DATA_KEYS} from '../constants';\n\n// TODO: Break this up a bit more, so that consumers aren't calling data.data.getData()\n/**\n * @class WebRTCData\n */\nexport default class WebRTCData {\n /**\n * @param {Object} data\n */\n constructor(data) {\n this.data = data;\n this.id = uuid.v4();\n }\n\n /**\n * get omitted rtc/rtcp/rtp/track/transport/candidate data with omitted data (default)\n * @returns {Object}\n */\n omit() {\n const flat = {};\n\n Object.keys(this.data).forEach((key) => {\n flat[key] = omit(this.data[key], DEFAULT_OMISSION_DATA_KEYS);\n });\n\n return flat;\n }\n\n /**\n * returns if the data is empty\n * @returns {Boolean};\n */\n isEmpty() {\n return isEmpty(this.data);\n }\n\n /**\n * get the unique id for this specific stat pull\n * @returns {String};\n */\n getId() {\n return this.id;\n }\n\n /**\n * get the transformed data\n * @returns {Object}\n */\n getData() {\n return this.data;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;AAGA;;AAEA;;AACA;AACA;AACA;IACqBA,U;EACnB;AACF;AACA;EACE,oBAAYC,IAAZ,EAAkB;IAAA;IAChB,KAAKA,IAAL,GAAYA,IAAZ;IACA,KAAKC,EAAL,GAAUC,cAAKC,EAAL,EAAV;EACD;EAED;AACF;AACA;AACA;;;;;WACE,gBAAO;MAAA;;MACL,IAAMC,IAAI,GAAG,EAAb;MAEA,mBAAY,KAAKJ,IAAjB,EAAuBK,OAAvB,CAA+B,UAACC,GAAD,EAAS;QACtCF,IAAI,CAACE,GAAD,CAAJ,GAAY,oBAAK,KAAI,CAACN,IAAL,CAAUM,GAAV,CAAL,EAAqBC,qCAArB,CAAZ;MACD,CAFD;MAIA,OAAOH,IAAP;IACD;IAED;AACF;AACA;AACA;;;;WACE,mBAAU;MACR,OAAO,uBAAQ,KAAKJ,IAAb,CAAP;IACD;IAED;AACF;AACA;AACA;;;;WACE,iBAAQ;MACN,OAAO,KAAKC,EAAZ;IACD;IAED;AACF;AACA;AACA;;;;WACE,mBAAU;MACR,OAAO,KAAKD,IAAZ;IACD"}
1
+ {"version":3,"names":["WebRTCData","data","id","uuid","v4","flat","forEach","key","DEFAULT_OMISSION_DATA_KEYS"],"sources":["data.js"],"sourcesContent":["import uuid from 'uuid';\nimport {isEmpty, omit} from 'lodash';\n\nimport {DEFAULT_OMISSION_DATA_KEYS} from '../constants';\n\n// TODO: Break this up a bit more, so that consumers aren't calling data.data.getData()\n/**\n * @class WebRTCData\n */\nexport default class WebRTCData {\n /**\n * @param {Object} data\n */\n constructor(data) {\n this.data = data;\n this.id = uuid.v4();\n }\n\n /**\n * get omitted rtc/rtcp/rtp/track/transport/candidate data with omitted data (default)\n * @returns {Object}\n */\n omit() {\n const flat = {};\n\n Object.keys(this.data).forEach((key) => {\n flat[key] = omit(this.data[key], DEFAULT_OMISSION_DATA_KEYS);\n });\n\n return flat;\n }\n\n /**\n * returns if the data is empty\n * @returns {Boolean};\n */\n isEmpty() {\n return isEmpty(this.data);\n }\n\n /**\n * get the unique id for this specific stat pull\n * @returns {String};\n */\n getId() {\n return this.id;\n }\n\n /**\n * get the transformed data\n * @returns {Object}\n */\n getData() {\n return this.data;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;AAGA;;AAEA;;AACA;AACA;AACA;IACqBA,U;EACnB;AACF;AACA;EACE,oBAAYC,IAAZ,EAAkB;IAAA;IAChB,KAAKA,IAAL,GAAYA,IAAZ;IACA,KAAKC,EAAL,GAAUC,aAAA,CAAKC,EAAL,EAAV;EACD;EAED;AACF;AACA;AACA;;;;;WACE,gBAAO;MAAA;;MACL,IAAMC,IAAI,GAAG,EAAb;MAEA,mBAAY,KAAKJ,IAAjB,EAAuBK,OAAvB,CAA+B,UAACC,GAAD,EAAS;QACtCF,IAAI,CAACE,GAAD,CAAJ,GAAY,oBAAK,KAAI,CAACN,IAAL,CAAUM,GAAV,CAAL,EAAqBC,qCAArB,CAAZ;MACD,CAFD;MAIA,OAAOH,IAAP;IACD;IAED;AACF;AACA;AACA;;;;WACE,mBAAU;MACR,OAAO,uBAAQ,KAAKJ,IAAb,CAAP;IACD;IAED;AACF;AACA;AACA;;;;WACE,iBAAQ;MACN,OAAO,KAAKC,EAAZ;IACD;IAED;AACF;AACA;AACA;;;;WACE,mBAAU;MACR,OAAO,KAAKD,IAAZ;IACD"}
@@ -1 +1 @@
1
- {"version":3,"names":["operateEvent","operate","type","keys","stat","kind","foundMatch","found","some","key","match","data","StatsEvents","series","callback","MEETINGS","first","sendRemainStopped","recvRemainStopped","getData","operator","EVENT_TYPES","LOCAL","DEFAULT_EVENT_AUDIO_SEND_KEYS","EVENT_STATS_MAP","BYTES_SENT","AUDIO","DEFAULT_EVENT_VIDEO_SEND_KEYS","VIDEO","REMOTE","DEFAULT_EVENT_VIDEO_RECEIVE_KEYS","BYTES_RECEIVED","DEFAULT_EVENT_AUDIO_RECEIVE_KEYS","somethingMatched","find","element","get","length","fiveSecondsData","getSlice","prop","rtpOutAudio","rtpInAudio","rtpInVideo","rtpOutVideo","sendAnalysis","StatsAnalyzer","analyze","analysisKeys","check","ANALYSIS_CHECKS","INCREASING","receiveAnalysis","valid","bytesSent","reports","ret","stop","bytesReceived","start"],"sources":["events.js"],"sourcesContent":["import StatsAnalyzer from '../analyzer/analyzer';\nimport {\n DEFAULT_EVENT_VIDEO_SEND_KEYS,\n DEFAULT_EVENT_AUDIO_SEND_KEYS,\n DEFAULT_EVENT_AUDIO_RECEIVE_KEYS,\n DEFAULT_EVENT_VIDEO_RECEIVE_KEYS,\n EVENT_TYPES,\n EVENT_STATS_MAP,\n MEETINGS,\n AUDIO,\n VIDEO,\n ANALYSIS_CHECKS\n} from '../constants';\n\n/**\n * @param {Object} operate the filtered, parsed, converted, transformed, simplified data point to check against\n * @param {String} type - local or remote\n * @param {String} keys - the stat keys for types of stats defined by DEFAULT_TRANSFORM_REGEX\n * @param {String} stat - the accessor to get the actual stat\n * @param {String} kind - audio or video\n * @returns {Object} always whatever the first sentFirstVideoBytes were, in the past or if it happened now, or undefined if never\n * @private\n * @memberof StatsEvents\n */\nconst operateEvent = (operate, type, keys, stat, kind) => {\n const foundMatch = {};\n\n foundMatch.found = keys.some((key) => {\n if (operate[key] && operate[key][stat] && operate[key][stat] > 0) {\n foundMatch.match = {\n type,\n key,\n data: operate[key],\n stat,\n kind\n };\n\n return true;\n }\n\n return false;\n });\n\n return foundMatch;\n};\n\n/**\n * @export\n * @class StatsEvents\n */\nexport default class StatsEvents {\n namespace = MEETINGS;\n\n /**\n * constructs an instance\n * @constructor\n * @param {StatsHistory} series\n * @param {Function} callback\n * @memberof StatsEvents\n */\n constructor(series = null, callback = () => {}) {\n /**\n * @instance\n * @type {StatsHistory}\n * @private\n * @memberof StatsEvents\n */\n this.series = series;\n /**\n * @instance\n * @type {Function}\n * @private\n * @memberof StatsEvents\n */\n this.callback = callback;\n /**\n * @instance\n * @type {WebRTCData}\n * @private\n * @memberof StatsEvents\n */\n this.first = null;\n /**\n * @instance\n * @type {Boolean}\n * @private\n * @memberof StatsEvents\n */\n this.sendRemainStopped = false;\n /**\n * @instance\n * @type {Boolean}\n * @private\n * @memberof StatsEvents\n */\n this.recvRemainStopped = false;\n }\n\n /**\n * looks for data starting to flow through\n * @param {WebRTCData} data\n * @returns {Object}\n */\n start(data) {\n if (data && data.data && data.data.getData()) {\n const operate = data.data.getData();\n\n if (operate && !this.first) {\n const operator = [\n operateEvent(operate, EVENT_TYPES.LOCAL, DEFAULT_EVENT_AUDIO_SEND_KEYS, EVENT_STATS_MAP.BYTES_SENT, AUDIO),\n operateEvent(operate, EVENT_TYPES.LOCAL, DEFAULT_EVENT_VIDEO_SEND_KEYS, EVENT_STATS_MAP.BYTES_SENT, VIDEO),\n operateEvent(operate, EVENT_TYPES.REMOTE, DEFAULT_EVENT_VIDEO_RECEIVE_KEYS, EVENT_STATS_MAP.BYTES_RECEIVED, VIDEO),\n operateEvent(operate, EVENT_TYPES.REMOTE, DEFAULT_EVENT_AUDIO_RECEIVE_KEYS, EVENT_STATS_MAP.BYTES_RECEIVED, AUDIO)\n ];\n const somethingMatched = operator.find((element) => element && element.found && element.match);\n\n if (somethingMatched) {\n this.first = somethingMatched.match;\n this.callback(this.first);\n\n return somethingMatched;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Looks for data to stop coming through\n * @returns {Object}\n */\n stop() {\n if (!this.series || this.series.get().length < 5) {\n return null;\n }\n const fiveSecondsData = this.series.getSlice(5);\n const prop = fiveSecondsData[0] && fiveSecondsData[0].rtpOutAudio || fiveSecondsData[0].rtpInAudio || fiveSecondsData[0].rtpInVideo || fiveSecondsData[0].rtpOutVideo;\n const sendAnalysis = StatsAnalyzer.analyze(fiveSecondsData, {analysisKeys: [{key: EVENT_STATS_MAP.BYTES_SENT, check: ANALYSIS_CHECKS.INCREASING, prop}]});\n const receiveAnalysis = StatsAnalyzer.analyze(fiveSecondsData, {analysisKeys: [{key: EVENT_STATS_MAP.BYTES_RECEIVED, check: ANALYSIS_CHECKS.INCREASING, prop}]});\n\n if (!sendAnalysis.valid && sendAnalysis.data.bytesSent.reports.length > 0) {\n if (!this.sendRemainStopped) {\n const ret = {stop: true, stat: EVENT_STATS_MAP.BYTES_SENT};\n\n this.callback(ret);\n this.sendRemainStopped = true;\n this.first = null;\n\n return ret;\n }\n }\n else if (sendAnalysis.valid && sendAnalysis.data.bytesSent.reports.length > 0) {\n this.sendRemainStopped = false;\n }\n if (!receiveAnalysis.valid && receiveAnalysis.data.bytesReceived.reports.length > 0) {\n if (!this.recvRemainStopped) {\n const ret = {stop: true, stat: EVENT_STATS_MAP.BYTES_RECEIVED};\n\n this.callback(ret);\n this.recvRemainStopped = true;\n this.first = null;\n\n return ret;\n }\n }\n else if (receiveAnalysis.valid && receiveAnalysis.data.bytesReceived.reports.length > 0) {\n this.recvRemainStopped = false;\n }\n\n return null;\n }\n\n /**\n * handles all the types of events that need to be sent when they happen from getStats API\n * @param {WebRTCData} data\n * @returns {Object}\n */\n event(data) {\n return {\n start: this.start(data),\n stop: this.stop()\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["operateEvent","operate","type","keys","stat","kind","foundMatch","found","some","key","match","data","StatsEvents","series","callback","MEETINGS","first","sendRemainStopped","recvRemainStopped","getData","operator","EVENT_TYPES","LOCAL","DEFAULT_EVENT_AUDIO_SEND_KEYS","EVENT_STATS_MAP","BYTES_SENT","AUDIO","DEFAULT_EVENT_VIDEO_SEND_KEYS","VIDEO","REMOTE","DEFAULT_EVENT_VIDEO_RECEIVE_KEYS","BYTES_RECEIVED","DEFAULT_EVENT_AUDIO_RECEIVE_KEYS","somethingMatched","find","element","get","length","fiveSecondsData","getSlice","prop","rtpOutAudio","rtpInAudio","rtpInVideo","rtpOutVideo","sendAnalysis","StatsAnalyzer","analyze","analysisKeys","check","ANALYSIS_CHECKS","INCREASING","receiveAnalysis","valid","bytesSent","reports","ret","stop","bytesReceived","start"],"sources":["events.js"],"sourcesContent":["import StatsAnalyzer from '../analyzer/analyzer';\nimport {\n DEFAULT_EVENT_VIDEO_SEND_KEYS,\n DEFAULT_EVENT_AUDIO_SEND_KEYS,\n DEFAULT_EVENT_AUDIO_RECEIVE_KEYS,\n DEFAULT_EVENT_VIDEO_RECEIVE_KEYS,\n EVENT_TYPES,\n EVENT_STATS_MAP,\n MEETINGS,\n AUDIO,\n VIDEO,\n ANALYSIS_CHECKS\n} from '../constants';\n\n/**\n * @param {Object} operate the filtered, parsed, converted, transformed, simplified data point to check against\n * @param {String} type - local or remote\n * @param {String} keys - the stat keys for types of stats defined by DEFAULT_TRANSFORM_REGEX\n * @param {String} stat - the accessor to get the actual stat\n * @param {String} kind - audio or video\n * @returns {Object} always whatever the first sentFirstVideoBytes were, in the past or if it happened now, or undefined if never\n * @private\n * @memberof StatsEvents\n */\nconst operateEvent = (operate, type, keys, stat, kind) => {\n const foundMatch = {};\n\n foundMatch.found = keys.some((key) => {\n if (operate[key] && operate[key][stat] && operate[key][stat] > 0) {\n foundMatch.match = {\n type,\n key,\n data: operate[key],\n stat,\n kind\n };\n\n return true;\n }\n\n return false;\n });\n\n return foundMatch;\n};\n\n/**\n * @export\n * @class StatsEvents\n */\nexport default class StatsEvents {\n namespace = MEETINGS;\n\n /**\n * constructs an instance\n * @constructor\n * @param {StatsHistory} series\n * @param {Function} callback\n * @memberof StatsEvents\n */\n constructor(series = null, callback = () => {}) {\n /**\n * @instance\n * @type {StatsHistory}\n * @private\n * @memberof StatsEvents\n */\n this.series = series;\n /**\n * @instance\n * @type {Function}\n * @private\n * @memberof StatsEvents\n */\n this.callback = callback;\n /**\n * @instance\n * @type {WebRTCData}\n * @private\n * @memberof StatsEvents\n */\n this.first = null;\n /**\n * @instance\n * @type {Boolean}\n * @private\n * @memberof StatsEvents\n */\n this.sendRemainStopped = false;\n /**\n * @instance\n * @type {Boolean}\n * @private\n * @memberof StatsEvents\n */\n this.recvRemainStopped = false;\n }\n\n /**\n * looks for data starting to flow through\n * @param {WebRTCData} data\n * @returns {Object}\n */\n start(data) {\n if (data && data.data && data.data.getData()) {\n const operate = data.data.getData();\n\n if (operate && !this.first) {\n const operator = [\n operateEvent(operate, EVENT_TYPES.LOCAL, DEFAULT_EVENT_AUDIO_SEND_KEYS, EVENT_STATS_MAP.BYTES_SENT, AUDIO),\n operateEvent(operate, EVENT_TYPES.LOCAL, DEFAULT_EVENT_VIDEO_SEND_KEYS, EVENT_STATS_MAP.BYTES_SENT, VIDEO),\n operateEvent(operate, EVENT_TYPES.REMOTE, DEFAULT_EVENT_VIDEO_RECEIVE_KEYS, EVENT_STATS_MAP.BYTES_RECEIVED, VIDEO),\n operateEvent(operate, EVENT_TYPES.REMOTE, DEFAULT_EVENT_AUDIO_RECEIVE_KEYS, EVENT_STATS_MAP.BYTES_RECEIVED, AUDIO)\n ];\n const somethingMatched = operator.find((element) => element && element.found && element.match);\n\n if (somethingMatched) {\n this.first = somethingMatched.match;\n this.callback(this.first);\n\n return somethingMatched;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Looks for data to stop coming through\n * @returns {Object}\n */\n stop() {\n if (!this.series || this.series.get().length < 5) {\n return null;\n }\n const fiveSecondsData = this.series.getSlice(5);\n const prop = fiveSecondsData[0] && fiveSecondsData[0].rtpOutAudio || fiveSecondsData[0].rtpInAudio || fiveSecondsData[0].rtpInVideo || fiveSecondsData[0].rtpOutVideo;\n const sendAnalysis = StatsAnalyzer.analyze(fiveSecondsData, {analysisKeys: [{key: EVENT_STATS_MAP.BYTES_SENT, check: ANALYSIS_CHECKS.INCREASING, prop}]});\n const receiveAnalysis = StatsAnalyzer.analyze(fiveSecondsData, {analysisKeys: [{key: EVENT_STATS_MAP.BYTES_RECEIVED, check: ANALYSIS_CHECKS.INCREASING, prop}]});\n\n if (!sendAnalysis.valid && sendAnalysis.data.bytesSent.reports.length > 0) {\n if (!this.sendRemainStopped) {\n const ret = {stop: true, stat: EVENT_STATS_MAP.BYTES_SENT};\n\n this.callback(ret);\n this.sendRemainStopped = true;\n this.first = null;\n\n return ret;\n }\n }\n else if (sendAnalysis.valid && sendAnalysis.data.bytesSent.reports.length > 0) {\n this.sendRemainStopped = false;\n }\n if (!receiveAnalysis.valid && receiveAnalysis.data.bytesReceived.reports.length > 0) {\n if (!this.recvRemainStopped) {\n const ret = {stop: true, stat: EVENT_STATS_MAP.BYTES_RECEIVED};\n\n this.callback(ret);\n this.recvRemainStopped = true;\n this.first = null;\n\n return ret;\n }\n }\n else if (receiveAnalysis.valid && receiveAnalysis.data.bytesReceived.reports.length > 0) {\n this.recvRemainStopped = false;\n }\n\n return null;\n }\n\n /**\n * handles all the types of events that need to be sent when they happen from getStats API\n * @param {WebRTCData} data\n * @returns {Object}\n */\n event(data) {\n return {\n start: this.start(data),\n stop: this.stop()\n };\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["StatsFilter","objectMode","report","encoding","callback","data","StatsTransformer","transform","push","WebRTCData","Transform"],"sources":["filter.js"],"sourcesContent":["import {Transform} from 'readable-stream';\n\nimport StatsTransformer from '../stats/transformer';\nimport WebRTCData from '../stats/data';\n\n/**\n * Reforms the interesting data from an RTCStatsReport to a new format\n */\nexport default class StatsFilter extends Transform {\n /**\n * Tells the Stream we're operating in objectMode\n * @private\n */\n constructor() {\n super({objectMode: true});\n }\n\n /**\n * Filters out data on the RTCStatsReport to the data around call quality and pushes it as a WebRTCData object\n * @param {RTCStatsReport} report\n * @param {*} encoding\n * @param {Function} callback\n * @private\n * @returns {undefined}\n */\n _transform(report, encoding, callback) {\n if (!report) {\n callback();\n\n return;\n }\n const data = StatsTransformer.transform(report);\n const push = new WebRTCData(data);\n\n this.push({\n data: push\n });\n callback();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;;;;;AAEA;AACA;AACA;IACqBA,W;;;;;EACnB;AACF;AACA;AACA;EACE,uBAAc;IAAA;IAAA,yBACN;MAACC,UAAU,EAAE;IAAb,CADM;EAEb;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;WACE,oBAAWC,MAAX,EAAmBC,QAAnB,EAA6BC,QAA7B,EAAuC;MACrC,IAAI,CAACF,MAAL,EAAa;QACXE,QAAQ;QAER;MACD;;MACD,IAAMC,IAAI,GAAGC,qBAAiBC,SAAjB,CAA2BL,MAA3B,CAAb;;MACA,IAAMM,IAAI,GAAG,IAAIC,aAAJ,CAAeJ,IAAf,CAAb;MAEA,KAAKG,IAAL,CAAU;QACRH,IAAI,EAAEG;MADE,CAAV;MAGAJ,QAAQ;IACT;;;EA9BsCM,yB"}
1
+ {"version":3,"names":["StatsFilter","objectMode","report","encoding","callback","data","StatsTransformer","transform","push","WebRTCData","Transform"],"sources":["filter.js"],"sourcesContent":["import {Transform} from 'readable-stream';\n\nimport StatsTransformer from '../stats/transformer';\nimport WebRTCData from '../stats/data';\n\n/**\n * Reforms the interesting data from an RTCStatsReport to a new format\n */\nexport default class StatsFilter extends Transform {\n /**\n * Tells the Stream we're operating in objectMode\n * @private\n */\n constructor() {\n super({objectMode: true});\n }\n\n /**\n * Filters out data on the RTCStatsReport to the data around call quality and pushes it as a WebRTCData object\n * @param {RTCStatsReport} report\n * @param {*} encoding\n * @param {Function} callback\n * @private\n * @returns {undefined}\n */\n _transform(report, encoding, callback) {\n if (!report) {\n callback();\n\n return;\n }\n const data = StatsTransformer.transform(report);\n const push = new WebRTCData(data);\n\n this.push({\n data: push\n });\n callback();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;;;;;AAEA;AACA;AACA;IACqBA,W;;;;;EACnB;AACF;AACA;AACA;EACE,uBAAc;IAAA;IAAA,yBACN;MAACC,UAAU,EAAE;IAAb,CADM;EAEb;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;WACE,oBAAWC,MAAX,EAAmBC,QAAnB,EAA6BC,QAA7B,EAAuC;MACrC,IAAI,CAACF,MAAL,EAAa;QACXE,QAAQ;QAER;MACD;;MACD,IAAMC,IAAI,GAAGC,oBAAA,CAAiBC,SAAjB,CAA2BL,MAA3B,CAAb;;MACA,IAAMM,IAAI,GAAG,IAAIC,aAAJ,CAAeJ,IAAf,CAAb;MAEA,KAAKG,IAAL,CAAU;QACRH,IAAI,EAAEG;MADE,CAAV;MAGAJ,QAAQ;IACT;;;EA9BsCM,yB"}
@@ -1 +1 @@
1
- {"version":3,"names":["WebRTCStats","attrs","options","optionalCreateOptions","MEETINGS","senders","receivers","meetingRef","statsConfig","populate","config","setConfig","meeting","associateMeeting","addSenders","addReceivers","useConfig","forEach","TypeError","sender","addSender","StatsUtil","generateSingularOptions","STATS","SENDERS","type","SENDER","id","MeetingStats","newSender","newReceiver","receiver","addReceiver","RECEIVERS","RECEIVER","v","k","destroySender","destroyReceiver","getSender","stream","destroy","getReceiver","StatelessWebexPlugin"],"sources":["index.js"],"sourcesContent":["import {forEach} from 'lodash';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {\n MEETINGS,\n STATS\n} from '../constants';\nimport MeetingStats from '../stats/stats';\nimport StatsUtil from '../stats/util';\n\n/**\n * @class WebRTCStats\n */\nexport default class WebRTCStats extends StatelessWebexPlugin {\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n * @param {Object} [optionalCreateOptions]\n */\n constructor(attrs, options, optionalCreateOptions) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof WebRTCStats\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof WebRTCStats\n */\n this.options = options;\n /**\n * @instance\n * @type {Object}\n * @public\n * @memberof WebRTCStats\n */\n this.senders = {};\n /**\n * @instance\n * @type {Object}\n * @public\n * @memberof WebRTCStats\n */\n this.receivers = {};\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof WebRTCStats\n */\n this.meetingRef = null;\n /**\n * @instance\n * @type {Object}\n * @public\n * @memberof WebRTCStats\n */\n this.statsConfig = null;\n this.populate(optionalCreateOptions);\n }\n\n /**\n * @param {Object} [optionalCreateOptions]\n * @param {Object} optionalCreateOptions.config\n * @param {Meeting} optionalCreateOptions.meeting\n * @param {Object} optionalCreateOptions.senders\n * @param {Object} optionalCreateOptions.receivers\n * @returns {WebRTCStats}\n * @private\n * @memberof WebRTCStats\n */\n populate(optionalCreateOptions) {\n if (optionalCreateOptions) {\n if (optionalCreateOptions.config) {\n this.setConfig(optionalCreateOptions.config);\n }\n if (optionalCreateOptions.meeting) {\n this.associateMeeting(optionalCreateOptions.meeting);\n }\n if (optionalCreateOptions.senders) {\n this.addSenders(optionalCreateOptions.senders);\n }\n if (optionalCreateOptions.receivers) {\n this.addReceivers(optionalCreateOptions.receivers);\n }\n }\n\n return this;\n }\n\n /**\n * @param {Object} config\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n setConfig(config) {\n this.statsConfig = config;\n }\n\n /**\n * @param {Meeting} meeting\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n associateMeeting(meeting) {\n this.meetingRef = meeting;\n\n return this;\n }\n\n /**\n * @param {Object} senders\n * @param {Boolean} useConfig\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addSenders(senders, useConfig = false) {\n if (!senders.forEach) {\n throw new TypeError('Stats senders must be created with an iterable array of senders to act on.');\n }\n senders.forEach((sender) => {\n this.addSender(sender, useConfig);\n });\n\n return this;\n }\n\n /**\n * @param {Object} sender\n * @param {Boolean} useConfig\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addSender(sender, useConfig = false) {\n if (sender) {\n if (useConfig) {\n StatsUtil.generateSingularOptions(sender, this.statsConfig, this.meetingRef, STATS.SENDERS);\n }\n sender.type = STATS.SENDER;\n this.senders[sender.id] = new MeetingStats(this.attrs, this.options, sender);\n }\n\n return this;\n }\n\n /**\n *\n * @param {String} id\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addSenderStats(id) {\n const newSender = new MeetingStats(this.attrs, this.options);\n\n this.senders[id] = newSender;\n\n return newSender;\n }\n\n /**\n *\n * @param {String} id\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addReceiverStats(id) {\n const newReceiver = new MeetingStats(this.attrs, this.options);\n\n this.receivers[id] = newReceiver;\n\n return newReceiver;\n }\n\n /**\n * @param {Object} receivers\n * @param {boolean} useConfig\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addReceivers(receivers, useConfig = false) {\n if (!receivers.forEach) {\n throw new TypeError('Stats receivers must be created with an iterable array of receivers to act on.');\n }\n receivers.forEach((receiver) => {\n this.addReceiver(receiver, useConfig);\n });\n\n return this;\n }\n\n /**\n * @param {Object} receiver\n * @param {boolean} useConfig\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addReceiver(receiver, useConfig = false) {\n if (receiver) {\n if (useConfig) {\n StatsUtil.generateSingularOptions(receiver, this.statsConfig, this.meetingRef, STATS.RECEIVERS);\n }\n receiver.type = STATS.RECEIVER;\n this.receivers[receiver.id] = new MeetingStats(this.attrs, this.options, receiver);\n }\n\n return this;\n }\n\n /**\n * @returns {Object}\n * @public\n * @memberof WebRTCStats\n */\n getReceivers() {\n return this.receivers;\n }\n\n /**\n * @returns {Object}\n * @public\n * @memberof WebRTCStats\n */\n getSenders() {\n return this.senders;\n }\n\n /**\n * @param {String} id\n * @returns {Object}\n * @public\n * @memberof WebRTCStats\n */\n getSender(id) {\n return this.senders[id];\n }\n\n /**\n * @param {String} id\n * @returns {Object}\n * @public\n * @memberof WebRTCStats\n */\n getReceiver(id) {\n return this.receivers[id];\n }\n\n /**\n * @returns {Object}\n * @public\n * @memberof WebRTCStats\n */\n destroySenders() {\n forEach(this.senders, (v, k) => {\n this.destroySender(k);\n });\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof WebRTCStats\n */\n destroyReceivers() {\n forEach(this.receivers, (v, k) => {\n this.destroyReceiver(k);\n });\n }\n\n /**\n * @param {String} id\n * @returns {undefined}\n * @public\n * @memberof WebRTCStats\n */\n destroySender(id) {\n let sender = this.getSender(id);\n\n if (sender) {\n if (sender.stream) {\n sender.stream.destroy();\n }\n }\n sender = null;\n delete this.receivers[id];\n }\n\n /**\n * @param {String} id\n * @returns {undefined}\n * @public\n * @memberof WebRTCStats\n */\n destroyReceiver(id) {\n let receiver = this.getReceiver(id);\n\n if (receiver) {\n if (receiver.stream) {\n receiver.stream.destroy();\n }\n }\n receiver = null;\n delete this.receivers[id];\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEA;;AAIA;;AACA;;;;;;AAEA;AACA;AACA;IACqBA,W;;;;;EAGnB;AACF;AACA;AACA;AACA;AACA;EACE,qBAAYC,KAAZ,EAAmBC,OAAnB,EAA4BC,qBAA5B,EAAmD;IAAA;;IAAA;IACjD,0BAAM,EAAN,EAAUD,OAAV;IACA;AACJ;AACA;AACA;AACA;AACA;;IAPqD,wFARvCE,mBAQuC;IAQjD,MAAKH,KAAL,GAAaA,KAAb;IACA;AACJ;AACA;AACA;AACA;AACA;;IACI,MAAKC,OAAL,GAAeA,OAAf;IACA;AACJ;AACA;AACA;AACA;AACA;;IACI,MAAKG,OAAL,GAAe,EAAf;IACA;AACJ;AACA;AACA;AACA;AACA;;IACI,MAAKC,SAAL,GAAiB,EAAjB;IACA;AACJ;AACA;AACA;AACA;AACA;;IACI,MAAKC,UAAL,GAAkB,IAAlB;IACA;AACJ;AACA;AACA;AACA;AACA;;IACI,MAAKC,WAAL,GAAmB,IAAnB;;IACA,MAAKC,QAAL,CAAcN,qBAAd;;IA5CiD;EA6ClD;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;WACE,kBAASA,qBAAT,EAAgC;MAC9B,IAAIA,qBAAJ,EAA2B;QACzB,IAAIA,qBAAqB,CAACO,MAA1B,EAAkC;UAChC,KAAKC,SAAL,CAAeR,qBAAqB,CAACO,MAArC;QACD;;QACD,IAAIP,qBAAqB,CAACS,OAA1B,EAAmC;UACjC,KAAKC,gBAAL,CAAsBV,qBAAqB,CAACS,OAA5C;QACD;;QACD,IAAIT,qBAAqB,CAACE,OAA1B,EAAmC;UACjC,KAAKS,UAAL,CAAgBX,qBAAqB,CAACE,OAAtC;QACD;;QACD,IAAIF,qBAAqB,CAACG,SAA1B,EAAqC;UACnC,KAAKS,YAAL,CAAkBZ,qBAAqB,CAACG,SAAxC;QACD;MACF;;MAED,OAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,mBAAUI,MAAV,EAAkB;MAChB,KAAKF,WAAL,GAAmBE,MAAnB;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBE,OAAjB,EAA0B;MACxB,KAAKL,UAAL,GAAkBK,OAAlB;MAEA,OAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,oBAAWP,OAAX,EAAuC;MAAA;;MAAA,IAAnBW,SAAmB,uEAAP,KAAO;;MACrC,IAAI,CAACX,OAAO,CAACY,OAAb,EAAsB;QACpB,MAAM,IAAIC,SAAJ,CAAc,4EAAd,CAAN;MACD;;MACDb,OAAO,CAACY,OAAR,CAAgB,UAACE,MAAD,EAAY;QAC1B,MAAI,CAACC,SAAL,CAAeD,MAAf,EAAuBH,SAAvB;MACD,CAFD;MAIA,OAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,mBAAUG,MAAV,EAAqC;MAAA,IAAnBH,SAAmB,uEAAP,KAAO;;MACnC,IAAIG,MAAJ,EAAY;QACV,IAAIH,SAAJ,EAAe;UACbK,cAAUC,uBAAV,CAAkCH,MAAlC,EAA0C,KAAKX,WAA/C,EAA4D,KAAKD,UAAjE,EAA6EgB,iBAAMC,OAAnF;QACD;;QACDL,MAAM,CAACM,IAAP,GAAcF,iBAAMG,MAApB;QACA,KAAKrB,OAAL,CAAac,MAAM,CAACQ,EAApB,IAA0B,IAAIC,cAAJ,CAAiB,KAAK3B,KAAtB,EAA6B,KAAKC,OAAlC,EAA2CiB,MAA3C,CAA1B;MACD;;MAED,OAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,wBAAeQ,EAAf,EAAmB;MACjB,IAAME,SAAS,GAAG,IAAID,cAAJ,CAAiB,KAAK3B,KAAtB,EAA6B,KAAKC,OAAlC,CAAlB;MAEA,KAAKG,OAAL,CAAasB,EAAb,IAAmBE,SAAnB;MAEA,OAAOA,SAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBF,EAAjB,EAAqB;MACnB,IAAMG,WAAW,GAAG,IAAIF,cAAJ,CAAiB,KAAK3B,KAAtB,EAA6B,KAAKC,OAAlC,CAApB;MAEA,KAAKI,SAAL,CAAeqB,EAAf,IAAqBG,WAArB;MAEA,OAAOA,WAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,sBAAaxB,SAAb,EAA2C;MAAA;;MAAA,IAAnBU,SAAmB,uEAAP,KAAO;;MACzC,IAAI,CAACV,SAAS,CAACW,OAAf,EAAwB;QACtB,MAAM,IAAIC,SAAJ,CAAc,gFAAd,CAAN;MACD;;MACDZ,SAAS,CAACW,OAAV,CAAkB,UAACc,QAAD,EAAc;QAC9B,MAAI,CAACC,WAAL,CAAiBD,QAAjB,EAA2Bf,SAA3B;MACD,CAFD;MAIA,OAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,qBAAYe,QAAZ,EAAyC;MAAA,IAAnBf,SAAmB,uEAAP,KAAO;;MACvC,IAAIe,QAAJ,EAAc;QACZ,IAAIf,SAAJ,EAAe;UACbK,cAAUC,uBAAV,CAAkCS,QAAlC,EAA4C,KAAKvB,WAAjD,EAA8D,KAAKD,UAAnE,EAA+EgB,iBAAMU,SAArF;QACD;;QACDF,QAAQ,CAACN,IAAT,GAAgBF,iBAAMW,QAAtB;QACA,KAAK5B,SAAL,CAAeyB,QAAQ,CAACJ,EAAxB,IAA8B,IAAIC,cAAJ,CAAiB,KAAK3B,KAAtB,EAA6B,KAAKC,OAAlC,EAA2C6B,QAA3C,CAA9B;MACD;;MAED,OAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,wBAAe;MACb,OAAO,KAAKzB,SAAZ;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,sBAAa;MACX,OAAO,KAAKD,OAAZ;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,mBAAUsB,EAAV,EAAc;MACZ,OAAO,KAAKtB,OAAL,CAAasB,EAAb,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,qBAAYA,EAAZ,EAAgB;MACd,OAAO,KAAKrB,SAAL,CAAeqB,EAAf,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,0BAAiB;MAAA;;MACf,uBAAQ,KAAKtB,OAAb,EAAsB,UAAC8B,CAAD,EAAIC,CAAJ,EAAU;QAC9B,MAAI,CAACC,aAAL,CAAmBD,CAAnB;MACD,CAFD;IAGD;IAED;AACF;AACA;AACA;AACA;;;;WACE,4BAAmB;MAAA;;MACjB,uBAAQ,KAAK9B,SAAb,EAAwB,UAAC6B,CAAD,EAAIC,CAAJ,EAAU;QAChC,MAAI,CAACE,eAAL,CAAqBF,CAArB;MACD,CAFD;IAGD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,uBAAcT,EAAd,EAAkB;MAChB,IAAIR,MAAM,GAAG,KAAKoB,SAAL,CAAeZ,EAAf,CAAb;;MAEA,IAAIR,MAAJ,EAAY;QACV,IAAIA,MAAM,CAACqB,MAAX,EAAmB;UACjBrB,MAAM,CAACqB,MAAP,CAAcC,OAAd;QACD;MACF;;MACDtB,MAAM,GAAG,IAAT;MACA,OAAO,KAAKb,SAAL,CAAeqB,EAAf,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,yBAAgBA,EAAhB,EAAoB;MAClB,IAAII,QAAQ,GAAG,KAAKW,WAAL,CAAiBf,EAAjB,CAAf;;MAEA,IAAII,QAAJ,EAAc;QACZ,IAAIA,QAAQ,CAACS,MAAb,EAAqB;UACnBT,QAAQ,CAACS,MAAT,CAAgBC,OAAhB;QACD;MACF;;MACDV,QAAQ,GAAG,IAAX;MACA,OAAO,KAAKzB,SAAL,CAAeqB,EAAf,CAAP;IACD;;;EAjTsCgB,+B"}
1
+ {"version":3,"names":["WebRTCStats","attrs","options","optionalCreateOptions","MEETINGS","senders","receivers","meetingRef","statsConfig","populate","config","setConfig","meeting","associateMeeting","addSenders","addReceivers","useConfig","forEach","TypeError","sender","addSender","StatsUtil","generateSingularOptions","STATS","SENDERS","type","SENDER","id","MeetingStats","newSender","newReceiver","receiver","addReceiver","RECEIVERS","RECEIVER","v","k","destroySender","destroyReceiver","getSender","stream","destroy","getReceiver","StatelessWebexPlugin"],"sources":["index.js"],"sourcesContent":["import {forEach} from 'lodash';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {\n MEETINGS,\n STATS\n} from '../constants';\nimport MeetingStats from '../stats/stats';\nimport StatsUtil from '../stats/util';\n\n/**\n * @class WebRTCStats\n */\nexport default class WebRTCStats extends StatelessWebexPlugin {\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n * @param {Object} [optionalCreateOptions]\n */\n constructor(attrs, options, optionalCreateOptions) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof WebRTCStats\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof WebRTCStats\n */\n this.options = options;\n /**\n * @instance\n * @type {Object}\n * @public\n * @memberof WebRTCStats\n */\n this.senders = {};\n /**\n * @instance\n * @type {Object}\n * @public\n * @memberof WebRTCStats\n */\n this.receivers = {};\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof WebRTCStats\n */\n this.meetingRef = null;\n /**\n * @instance\n * @type {Object}\n * @public\n * @memberof WebRTCStats\n */\n this.statsConfig = null;\n this.populate(optionalCreateOptions);\n }\n\n /**\n * @param {Object} [optionalCreateOptions]\n * @param {Object} optionalCreateOptions.config\n * @param {Meeting} optionalCreateOptions.meeting\n * @param {Object} optionalCreateOptions.senders\n * @param {Object} optionalCreateOptions.receivers\n * @returns {WebRTCStats}\n * @private\n * @memberof WebRTCStats\n */\n populate(optionalCreateOptions) {\n if (optionalCreateOptions) {\n if (optionalCreateOptions.config) {\n this.setConfig(optionalCreateOptions.config);\n }\n if (optionalCreateOptions.meeting) {\n this.associateMeeting(optionalCreateOptions.meeting);\n }\n if (optionalCreateOptions.senders) {\n this.addSenders(optionalCreateOptions.senders);\n }\n if (optionalCreateOptions.receivers) {\n this.addReceivers(optionalCreateOptions.receivers);\n }\n }\n\n return this;\n }\n\n /**\n * @param {Object} config\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n setConfig(config) {\n this.statsConfig = config;\n }\n\n /**\n * @param {Meeting} meeting\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n associateMeeting(meeting) {\n this.meetingRef = meeting;\n\n return this;\n }\n\n /**\n * @param {Object} senders\n * @param {Boolean} useConfig\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addSenders(senders, useConfig = false) {\n if (!senders.forEach) {\n throw new TypeError('Stats senders must be created with an iterable array of senders to act on.');\n }\n senders.forEach((sender) => {\n this.addSender(sender, useConfig);\n });\n\n return this;\n }\n\n /**\n * @param {Object} sender\n * @param {Boolean} useConfig\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addSender(sender, useConfig = false) {\n if (sender) {\n if (useConfig) {\n StatsUtil.generateSingularOptions(sender, this.statsConfig, this.meetingRef, STATS.SENDERS);\n }\n sender.type = STATS.SENDER;\n this.senders[sender.id] = new MeetingStats(this.attrs, this.options, sender);\n }\n\n return this;\n }\n\n /**\n *\n * @param {String} id\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addSenderStats(id) {\n const newSender = new MeetingStats(this.attrs, this.options);\n\n this.senders[id] = newSender;\n\n return newSender;\n }\n\n /**\n *\n * @param {String} id\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addReceiverStats(id) {\n const newReceiver = new MeetingStats(this.attrs, this.options);\n\n this.receivers[id] = newReceiver;\n\n return newReceiver;\n }\n\n /**\n * @param {Object} receivers\n * @param {boolean} useConfig\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addReceivers(receivers, useConfig = false) {\n if (!receivers.forEach) {\n throw new TypeError('Stats receivers must be created with an iterable array of receivers to act on.');\n }\n receivers.forEach((receiver) => {\n this.addReceiver(receiver, useConfig);\n });\n\n return this;\n }\n\n /**\n * @param {Object} receiver\n * @param {boolean} useConfig\n * @returns {WebRTCStats}\n * @public\n * @memberof WebRTCStats\n */\n addReceiver(receiver, useConfig = false) {\n if (receiver) {\n if (useConfig) {\n StatsUtil.generateSingularOptions(receiver, this.statsConfig, this.meetingRef, STATS.RECEIVERS);\n }\n receiver.type = STATS.RECEIVER;\n this.receivers[receiver.id] = new MeetingStats(this.attrs, this.options, receiver);\n }\n\n return this;\n }\n\n /**\n * @returns {Object}\n * @public\n * @memberof WebRTCStats\n */\n getReceivers() {\n return this.receivers;\n }\n\n /**\n * @returns {Object}\n * @public\n * @memberof WebRTCStats\n */\n getSenders() {\n return this.senders;\n }\n\n /**\n * @param {String} id\n * @returns {Object}\n * @public\n * @memberof WebRTCStats\n */\n getSender(id) {\n return this.senders[id];\n }\n\n /**\n * @param {String} id\n * @returns {Object}\n * @public\n * @memberof WebRTCStats\n */\n getReceiver(id) {\n return this.receivers[id];\n }\n\n /**\n * @returns {Object}\n * @public\n * @memberof WebRTCStats\n */\n destroySenders() {\n forEach(this.senders, (v, k) => {\n this.destroySender(k);\n });\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof WebRTCStats\n */\n destroyReceivers() {\n forEach(this.receivers, (v, k) => {\n this.destroyReceiver(k);\n });\n }\n\n /**\n * @param {String} id\n * @returns {undefined}\n * @public\n * @memberof WebRTCStats\n */\n destroySender(id) {\n let sender = this.getSender(id);\n\n if (sender) {\n if (sender.stream) {\n sender.stream.destroy();\n }\n }\n sender = null;\n delete this.receivers[id];\n }\n\n /**\n * @param {String} id\n * @returns {undefined}\n * @public\n * @memberof WebRTCStats\n */\n destroyReceiver(id) {\n let receiver = this.getReceiver(id);\n\n if (receiver) {\n if (receiver.stream) {\n receiver.stream.destroy();\n }\n }\n receiver = null;\n delete this.receivers[id];\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["MediaMetrics","options","MEETINGS","config","stats","mqa","metrics","autoSendMQA","useConfig","senders","id","STATS","AUDIO_SENDER_ID","correlate","AUDIO_CORRELATE","onData","VIDEO_SENDER_ID","VIDEO_CORRELATE","SHARE_SENDER_ID","SHARE_CORRELATE","receivers","AUDIO_RECEIVER_ID","VIDEO_RECEIVER_ID","SHARE_RECEIVER_ID"],"sources":["metrics.js"],"sourcesContent":["import {\n MEETINGS,\n STATS\n} from '../constants';\n\n/**\n * Metrics Payload Event\n * Emitted when a Metric Payload is available\n * @event metrics:payload\n * @instance\n * @type {Object}\n * @memberof MediaMetrics\n */\n\n/**\n * @class MediaMetrics\n * @private\n */\nexport default class MediaMetrics {\n namespace = MEETINGS;\n\n /**\n * @param {Object} options\n * @param {Object} options.config\n * @memberof MediaMetrics\n * @constructor\n */\n constructor(options = {}) {\n this.config = options.config;\n this.stats = null;\n }\n\n /**\n * @param {MeetingStats} stats\n * @returns {undefined}\n * @memberof MediaMetrics\n */\n setStats(stats) {\n this.stats = stats;\n }\n\n /**\n * sets up all the default senders and receivers getStats to collect data\n * @returns {Object}\n * @public\n * @memberof MediaMetrics\n */\n initialize() {\n const mqa = this.config.metrics.autoSendMQA;\n\n return {\n useConfig: true,\n senders: [\n {\n id: STATS.AUDIO_SENDER_ID,\n correlate: STATS.AUDIO_CORRELATE,\n mqa,\n onData: () => {}\n },\n {\n id: STATS.VIDEO_SENDER_ID,\n correlate: STATS.VIDEO_CORRELATE,\n mqa,\n onData: () => {}\n },\n {\n id: STATS.SHARE_SENDER_ID,\n correlate: STATS.SHARE_CORRELATE,\n mqa,\n onData: () => {}\n }\n ],\n receivers: [\n {\n id: STATS.AUDIO_RECEIVER_ID,\n correlate: STATS.AUDIO_CORRELATE,\n mqa,\n onData: () => {}\n },\n {\n id: STATS.VIDEO_RECEIVER_ID,\n correlate: STATS.VIDEO_CORRELATE,\n mqa,\n onData: () => {}\n },\n {\n id: STATS.SHARE_RECEIVER_ID,\n correlate: STATS.SHARE_CORRELATE,\n mqa,\n onData: () => {}\n }\n ]\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;IACqBA,Y;EAGnB;AACF;AACA;AACA;AACA;AACA;EACE,wBAA0B;IAAA,IAAdC,OAAc,uEAAJ,EAAI;IAAA;IAAA,iDARdC,mBAQc;IACxB,KAAKC,MAAL,GAAcF,OAAO,CAACE,MAAtB;IACA,KAAKC,KAAL,GAAa,IAAb;EACD;EAED;AACF;AACA;AACA;AACA;;;;;WACE,kBAASA,KAAT,EAAgB;MACd,KAAKA,KAAL,GAAaA,KAAb;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,sBAAa;MACX,IAAMC,GAAG,GAAG,KAAKF,MAAL,CAAYG,OAAZ,CAAoBC,WAAhC;MAEA,OAAO;QACLC,SAAS,EAAE,IADN;QAELC,OAAO,EAAE,CACP;UACEC,EAAE,EAAEC,iBAAMC,eADZ;UAEEC,SAAS,EAAEF,iBAAMG,eAFnB;UAGET,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CADO,EAOP;UACEL,EAAE,EAAEC,iBAAMK,eADZ;UAEEH,SAAS,EAAEF,iBAAMM,eAFnB;UAGEZ,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CAPO,EAaP;UACEL,EAAE,EAAEC,iBAAMO,eADZ;UAEEL,SAAS,EAAEF,iBAAMQ,eAFnB;UAGEd,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CAbO,CAFJ;QAsBLK,SAAS,EAAE,CACT;UACEV,EAAE,EAAEC,iBAAMU,iBADZ;UAEER,SAAS,EAAEF,iBAAMG,eAFnB;UAGET,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CADS,EAOT;UACEL,EAAE,EAAEC,iBAAMW,iBADZ;UAEET,SAAS,EAAEF,iBAAMM,eAFnB;UAGEZ,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CAPS,EAaT;UACEL,EAAE,EAAEC,iBAAMY,iBADZ;UAEEV,SAAS,EAAEF,iBAAMQ,eAFnB;UAGEd,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CAbS;MAtBN,CAAP;IA2CD"}
1
+ {"version":3,"names":["MediaMetrics","options","MEETINGS","config","stats","mqa","metrics","autoSendMQA","useConfig","senders","id","STATS","AUDIO_SENDER_ID","correlate","AUDIO_CORRELATE","onData","VIDEO_SENDER_ID","VIDEO_CORRELATE","SHARE_SENDER_ID","SHARE_CORRELATE","receivers","AUDIO_RECEIVER_ID","VIDEO_RECEIVER_ID","SHARE_RECEIVER_ID"],"sources":["metrics.js"],"sourcesContent":["import {\n MEETINGS,\n STATS\n} from '../constants';\n\n/**\n * Metrics Payload Event\n * Emitted when a Metric Payload is available\n * @event metrics:payload\n * @instance\n * @type {Object}\n * @memberof MediaMetrics\n */\n\n/**\n * @class MediaMetrics\n * @private\n */\nexport default class MediaMetrics {\n namespace = MEETINGS;\n\n /**\n * @param {Object} options\n * @param {Object} options.config\n * @memberof MediaMetrics\n * @constructor\n */\n constructor(options = {}) {\n this.config = options.config;\n this.stats = null;\n }\n\n /**\n * @param {MeetingStats} stats\n * @returns {undefined}\n * @memberof MediaMetrics\n */\n setStats(stats) {\n this.stats = stats;\n }\n\n /**\n * sets up all the default senders and receivers getStats to collect data\n * @returns {Object}\n * @public\n * @memberof MediaMetrics\n */\n initialize() {\n const mqa = this.config.metrics.autoSendMQA;\n\n return {\n useConfig: true,\n senders: [\n {\n id: STATS.AUDIO_SENDER_ID,\n correlate: STATS.AUDIO_CORRELATE,\n mqa,\n onData: () => {}\n },\n {\n id: STATS.VIDEO_SENDER_ID,\n correlate: STATS.VIDEO_CORRELATE,\n mqa,\n onData: () => {}\n },\n {\n id: STATS.SHARE_SENDER_ID,\n correlate: STATS.SHARE_CORRELATE,\n mqa,\n onData: () => {}\n }\n ],\n receivers: [\n {\n id: STATS.AUDIO_RECEIVER_ID,\n correlate: STATS.AUDIO_CORRELATE,\n mqa,\n onData: () => {}\n },\n {\n id: STATS.VIDEO_RECEIVER_ID,\n correlate: STATS.VIDEO_CORRELATE,\n mqa,\n onData: () => {}\n },\n {\n id: STATS.SHARE_RECEIVER_ID,\n correlate: STATS.SHARE_CORRELATE,\n mqa,\n onData: () => {}\n }\n ]\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;IACqBA,Y;EAGnB;AACF;AACA;AACA;AACA;AACA;EACE,wBAA0B;IAAA,IAAdC,OAAc,uEAAJ,EAAI;IAAA;IAAA,iDARdC,mBAQc;IACxB,KAAKC,MAAL,GAAcF,OAAO,CAACE,MAAtB;IACA,KAAKC,KAAL,GAAa,IAAb;EACD;EAED;AACF;AACA;AACA;AACA;;;;;WACE,kBAASA,KAAT,EAAgB;MACd,KAAKA,KAAL,GAAaA,KAAb;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,sBAAa;MACX,IAAMC,GAAG,GAAG,KAAKF,MAAL,CAAYG,OAAZ,CAAoBC,WAAhC;MAEA,OAAO;QACLC,SAAS,EAAE,IADN;QAELC,OAAO,EAAE,CACP;UACEC,EAAE,EAAEC,gBAAA,CAAMC,eADZ;UAEEC,SAAS,EAAEF,gBAAA,CAAMG,eAFnB;UAGET,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CADO,EAOP;UACEL,EAAE,EAAEC,gBAAA,CAAMK,eADZ;UAEEH,SAAS,EAAEF,gBAAA,CAAMM,eAFnB;UAGEZ,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CAPO,EAaP;UACEL,EAAE,EAAEC,gBAAA,CAAMO,eADZ;UAEEL,SAAS,EAAEF,gBAAA,CAAMQ,eAFnB;UAGEd,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CAbO,CAFJ;QAsBLK,SAAS,EAAE,CACT;UACEV,EAAE,EAAEC,gBAAA,CAAMU,iBADZ;UAEER,SAAS,EAAEF,gBAAA,CAAMG,eAFnB;UAGET,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CADS,EAOT;UACEL,EAAE,EAAEC,gBAAA,CAAMW,iBADZ;UAEET,SAAS,EAAEF,gBAAA,CAAMM,eAFnB;UAGEZ,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CAPS,EAaT;UACEL,EAAE,EAAEC,gBAAA,CAAMY,iBADZ;UAEEV,SAAS,EAAEF,gBAAA,CAAMQ,eAFnB;UAGEd,GAAG,EAAHA,GAHF;UAIEU,MAAM,EAAE,kBAAM,CAAE;QAJlB,CAbS;MAtBN,CAAP;IA2CD"}