@webex/plugin-meetings 3.7.0-next.8 → 3.7.0-web-workers-keepalive.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/annotation/index.js +17 -0
  2. package/dist/annotation/index.js.map +1 -1
  3. package/dist/breakouts/breakout.js +1 -1
  4. package/dist/breakouts/index.js +1 -1
  5. package/dist/common/errors/{webinar-registration-error.js → join-webinar-error.js} +12 -12
  6. package/dist/common/errors/join-webinar-error.js.map +1 -0
  7. package/dist/common/errors/multistream-not-supported-error.js +53 -0
  8. package/dist/common/errors/multistream-not-supported-error.js.map +1 -0
  9. package/dist/config.js +1 -1
  10. package/dist/config.js.map +1 -1
  11. package/dist/constants.js +26 -5
  12. package/dist/constants.js.map +1 -1
  13. package/dist/index.js +16 -11
  14. package/dist/index.js.map +1 -1
  15. package/dist/interpretation/index.js +1 -1
  16. package/dist/interpretation/siLanguage.js +1 -1
  17. package/dist/locus-info/index.js +13 -2
  18. package/dist/locus-info/index.js.map +1 -1
  19. package/dist/locus-info/selfUtils.js +30 -17
  20. package/dist/locus-info/selfUtils.js.map +1 -1
  21. package/dist/meeting/index.js +903 -800
  22. package/dist/meeting/index.js.map +1 -1
  23. package/dist/meeting/locusMediaRequest.js +9 -0
  24. package/dist/meeting/locusMediaRequest.js.map +1 -1
  25. package/dist/meeting/request.js +30 -0
  26. package/dist/meeting/request.js.map +1 -1
  27. package/dist/meeting/request.type.js.map +1 -1
  28. package/dist/meeting/util.js +16 -16
  29. package/dist/meeting/util.js.map +1 -1
  30. package/dist/meeting-info/meeting-info-v2.js +29 -17
  31. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  32. package/dist/meetings/index.js +6 -3
  33. package/dist/meetings/index.js.map +1 -1
  34. package/dist/meetings/util.js +1 -1
  35. package/dist/meetings/util.js.map +1 -1
  36. package/dist/member/index.js +9 -0
  37. package/dist/member/index.js.map +1 -1
  38. package/dist/member/types.js.map +1 -1
  39. package/dist/member/util.js +39 -28
  40. package/dist/member/util.js.map +1 -1
  41. package/dist/metrics/constants.js +1 -1
  42. package/dist/metrics/constants.js.map +1 -1
  43. package/dist/multistream/remoteMedia.js +30 -15
  44. package/dist/multistream/remoteMedia.js.map +1 -1
  45. package/dist/multistream/sendSlotManager.js +24 -0
  46. package/dist/multistream/sendSlotManager.js.map +1 -1
  47. package/dist/roap/index.js +10 -8
  48. package/dist/roap/index.js.map +1 -1
  49. package/dist/types/annotation/index.d.ts +5 -0
  50. package/dist/types/common/errors/{webinar-registration-error.d.ts → join-webinar-error.d.ts} +2 -2
  51. package/dist/types/common/errors/multistream-not-supported-error.d.ts +17 -0
  52. package/dist/types/constants.d.ts +20 -1
  53. package/dist/types/index.d.ts +3 -3
  54. package/dist/types/locus-info/index.d.ts +2 -1
  55. package/dist/types/meeting/index.d.ts +19 -12
  56. package/dist/types/meeting/locusMediaRequest.d.ts +4 -0
  57. package/dist/types/meeting/request.d.ts +12 -1
  58. package/dist/types/meeting/request.type.d.ts +6 -0
  59. package/dist/types/meeting/util.d.ts +1 -1
  60. package/dist/types/meeting-info/meeting-info-v2.d.ts +4 -4
  61. package/dist/types/meetings/index.d.ts +3 -0
  62. package/dist/types/member/index.d.ts +1 -0
  63. package/dist/types/member/types.d.ts +7 -0
  64. package/dist/types/metrics/constants.d.ts +1 -1
  65. package/dist/types/multistream/sendSlotManager.d.ts +8 -1
  66. package/dist/webinar/index.js +354 -3
  67. package/dist/webinar/index.js.map +1 -1
  68. package/package.json +23 -22
  69. package/src/annotation/index.ts +16 -0
  70. package/src/common/errors/join-webinar-error.ts +24 -0
  71. package/src/common/errors/multistream-not-supported-error.ts +30 -0
  72. package/src/config.ts +1 -1
  73. package/src/constants.ts +23 -3
  74. package/src/index.ts +5 -3
  75. package/src/locus-info/index.ts +17 -2
  76. package/src/locus-info/selfUtils.ts +19 -6
  77. package/src/meeting/index.ts +234 -80
  78. package/src/meeting/locusMediaRequest.ts +7 -0
  79. package/src/meeting/request.ts +26 -1
  80. package/src/meeting/request.type.ts +7 -0
  81. package/src/meeting/util.ts +8 -10
  82. package/src/meeting-info/meeting-info-v2.ts +23 -11
  83. package/src/meetings/index.ts +8 -2
  84. package/src/meetings/util.ts +2 -1
  85. package/src/member/index.ts +9 -0
  86. package/src/member/types.ts +8 -0
  87. package/src/member/util.ts +34 -24
  88. package/src/metrics/constants.ts +1 -1
  89. package/src/multistream/remoteMedia.ts +28 -15
  90. package/src/multistream/sendSlotManager.ts +31 -0
  91. package/src/roap/index.ts +10 -8
  92. package/src/webinar/index.ts +197 -3
  93. package/test/unit/spec/annotation/index.ts +46 -1
  94. package/test/unit/spec/locus-info/index.js +222 -0
  95. package/test/unit/spec/locus-info/selfConstant.js +7 -0
  96. package/test/unit/spec/locus-info/selfUtils.js +91 -1
  97. package/test/unit/spec/meeting/index.js +683 -103
  98. package/test/unit/spec/meeting/utils.js +22 -19
  99. package/test/unit/spec/meeting-info/meetinginfov2.js +9 -4
  100. package/test/unit/spec/meetings/index.js +9 -5
  101. package/test/unit/spec/meetings/utils.js +10 -0
  102. package/test/unit/spec/member/util.js +52 -11
  103. package/test/unit/spec/multistream/remoteMedia.ts +11 -7
  104. package/test/unit/spec/roap/index.ts +47 -0
  105. package/test/unit/spec/webinar/index.ts +457 -0
  106. package/dist/common/errors/webinar-registration-error.js.map +0 -1
  107. package/src/common/errors/webinar-registration-error.ts +0 -27
@@ -1 +1 @@
1
- {"version":3,"names":["BEHAVIORAL_METRICS","exports","default","MEETINGS_REGISTRATION_FAILED","MEETINGS_REGISTRATION_SUCCESS","MEETINGS_REGISTRATION_STEP","MERCURY_CONNECTION_FAILURE","MERCURY_CONNECTION_RESTORED","JOIN_SUCCESS","JOIN_FAILURE","ADD_MEDIA_SUCCESS","ADD_MEDIA_FAILURE","ADD_MEDIA_RETRY","ROAP_MERCURY_EVENT_RECEIVED","CONNECTION_SUCCESS","CONNECTION_FAILURE","MEETING_LEAVE_FAILURE","MEETING_END_ALL_FAILURE","MEETING_END_ALL_INITIATED","GET_USER_MEDIA_FAILURE","GET_DISPLAY_MEDIA_FAILURE","JOIN_WITH_MEDIA_FAILURE","LLM_CONNECTION_AFTER_JOIN_FAILURE","RECEIVE_TRANSCRIPTION_AFTER_JOIN_FAILURE","DISCONNECT_DUE_TO_INACTIVITY","MEETING_MEDIA_INACTIVE","MEETING_RECONNECT_FAILURE","MEETING_MAX_REJOIN_FAILURE","MEETING_SHARE_SUCCESS","MEETING_SHARE_FAILURE","MEETING_START_WHITEBOARD_SHARE_FAILURE","MEETING_STOP_WHITEBOARD_SHARE_FAILURE","MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE","MUTE_AUDIO_FAILURE","MUTE_VIDEO_FAILURE","SET_MEETING_QUALITY_FAILURE","STOP_FLOOR_REQUEST_FAILURE","ADD_DIAL_IN_FAILURE","ADD_DIAL_OUT_FAILURE","UPDATE_MEDIA_FAILURE","UNMUTE_AUDIO_FAILURE","UNMUTE_VIDEO_FAILURE","ROAP_ANSWER_FAILURE","ROAP_GLARE_CONDITION","PEERCONNECTION_FAILURE","INVALID_ICE_CANDIDATE","UPLOAD_LOGS_FAILURE","UPLOAD_LOGS_SUCCESS","RECEIVE_TRANSCRIPTION_FAILURE","FETCH_MEETING_INFO_V1_SUCCESS","FETCH_MEETING_INFO_V1_FAILURE","ADHOC_MEETING_SUCCESS","ADHOC_MEETING_FAILURE","VERIFY_PASSWORD_SUCCESS","VERIFY_PASSWORD_ERROR","VERIFY_CAPTCHA_ERROR","MOVE_TO_SUCCESS","MOVE_TO_FAILURE","MOVE_FROM_SUCCESS","MOVE_FROM_FAILURE","TURN_DISCOVERY_FAILURE","MEETING_INFO_POLICY_ERROR","LOCUS_DELTA_SYNC_FAILED","LOCUS_DELTA_OUT_OF_ORDER","PERMISSION_TOKEN_REFRESH","PERMISSION_TOKEN_REFRESH_ERROR","TURN_DISCOVERY_LATENCY","ROAP_OFFER_TO_ANSWER_LATENCY","ROAP_HTTP_RESPONSE_MISSING","TURN_DISCOVERY_REQUIRES_OK","REACHABILITY_COMPLETED","WEBINAR_REGISTRATION_ERROR","GUEST_ENTERED_LOBBY","GUEST_EXITED_LOBBY"],"sources":["constants.ts"],"sourcesContent":["// Metrics constants ----------------------------------------------------------\n\nconst BEHAVIORAL_METRICS = {\n MEETINGS_REGISTRATION_FAILED: 'js_sdk_meetings_registration_failed',\n MEETINGS_REGISTRATION_SUCCESS: 'js_sdk_meetings_registration_success',\n MEETINGS_REGISTRATION_STEP: 'meetings_registration_step',\n MERCURY_CONNECTION_FAILURE: 'js_sdk_mercury_connection_failure',\n MERCURY_CONNECTION_RESTORED: 'js_sdk_mercury_connection_restored',\n JOIN_SUCCESS: 'js_sdk_join_success',\n JOIN_FAILURE: 'js_sdk_join_failures',\n ADD_MEDIA_SUCCESS: 'js_sdk_add_media_success',\n ADD_MEDIA_FAILURE: 'js_sdk_add_media_failures',\n ADD_MEDIA_RETRY: 'js_sdk_add_media_retry',\n ROAP_MERCURY_EVENT_RECEIVED: 'js_sdk_roap_mercury_received',\n CONNECTION_SUCCESS: 'js_sdk_connection_success',\n CONNECTION_FAILURE: 'js_sdk_connection_failures',\n MEETING_LEAVE_FAILURE: 'js_sdk_meeting_leave_failure',\n MEETING_END_ALL_FAILURE: 'js_sdk_meeting_end_for_all_failure',\n MEETING_END_ALL_INITIATED: 'js_sdk_meeting_end_for_all_initiated',\n GET_USER_MEDIA_FAILURE: 'js_sdk_get_user_media_failures',\n GET_DISPLAY_MEDIA_FAILURE: 'js_sdk_get_display_media_failures',\n JOIN_WITH_MEDIA_FAILURE: 'js_sdk_join_with_media_failures',\n LLM_CONNECTION_AFTER_JOIN_FAILURE: 'js_sdk_llm_connection_after_join_failure',\n RECEIVE_TRANSCRIPTION_AFTER_JOIN_FAILURE: 'js_sdk_receive_transcription_after_join_failure',\n\n DISCONNECT_DUE_TO_INACTIVITY: 'js_sdk_disconnect_due_to_inactivity',\n MEETING_MEDIA_INACTIVE: 'js_sdk_meeting_media_inactive',\n MEETING_RECONNECT_FAILURE: 'js_sdk_meeting_reconnect_failures',\n MEETING_MAX_REJOIN_FAILURE: 'js_sdk_meeting_max_rejoin_failure',\n MEETING_SHARE_SUCCESS: 'js_sdk_meeting_share_success',\n MEETING_SHARE_FAILURE: 'js_sdk_meeting_share_failures',\n MEETING_START_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_start_whiteboard_share_failures',\n MEETING_STOP_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_stop_whiteboard_share_failures',\n MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE: 'js_sdk_meeting_share_video_mute_state_change',\n MUTE_AUDIO_FAILURE: 'js_sdk_mute_audio_failures',\n MUTE_VIDEO_FAILURE: 'js_sdk_mute_video_failures',\n SET_MEETING_QUALITY_FAILURE: 'js_sdk_set_meeting_quality_failures',\n STOP_FLOOR_REQUEST_FAILURE: 'js_sdk_stop_floor_request_failures',\n ADD_DIAL_IN_FAILURE: 'js_sdk_add_dial_in_failure',\n ADD_DIAL_OUT_FAILURE: 'js_sdk_add_dial_out_failure',\n UPDATE_MEDIA_FAILURE: 'js_sdk_update_media_failures',\n UNMUTE_AUDIO_FAILURE: 'js_sdk_unmute_audio_failures',\n UNMUTE_VIDEO_FAILURE: 'js_sdk_unmute_video_failures',\n ROAP_ANSWER_FAILURE: 'js_sdk_roap_answer_failures',\n ROAP_GLARE_CONDITION: 'js_sdk_roap_glar_condition',\n PEERCONNECTION_FAILURE: 'js_sdk_peerConnection_failures',\n INVALID_ICE_CANDIDATE: 'js_sdk_invalid_ice_candidate',\n UPLOAD_LOGS_FAILURE: 'js_sdk_upload_logs_failure',\n UPLOAD_LOGS_SUCCESS: 'js_sdk_upload_logs_success',\n RECEIVE_TRANSCRIPTION_FAILURE: 'js_sdk_receive_transcription_failure',\n FETCH_MEETING_INFO_V1_SUCCESS: 'js_sdk_fetch_meeting_info_v1_success',\n FETCH_MEETING_INFO_V1_FAILURE: 'js_sdk_fetch_meeting_info_v1_failure',\n ADHOC_MEETING_SUCCESS: 'js_sdk_adhoc_meeting_success',\n ADHOC_MEETING_FAILURE: 'js_sdk_adhoc_meeting_failure',\n VERIFY_PASSWORD_SUCCESS: 'js_sdk_verify_password_success',\n VERIFY_PASSWORD_ERROR: 'js_sdk_verify_password_error',\n VERIFY_CAPTCHA_ERROR: 'js_sdk_verify_captcha_error',\n MOVE_TO_SUCCESS: 'js_sdk_move_to_success',\n MOVE_TO_FAILURE: 'js_sdk_move_to_failure',\n MOVE_FROM_SUCCESS: 'js_sdk_move_from_success',\n MOVE_FROM_FAILURE: 'js_sdk_move_from_failure',\n TURN_DISCOVERY_FAILURE: 'js_sdk_turn_discovery_failure',\n MEETING_INFO_POLICY_ERROR: 'js_sdk_meeting_info_policy_error',\n LOCUS_DELTA_SYNC_FAILED: 'js_sdk_locus_delta_sync_failed',\n LOCUS_DELTA_OUT_OF_ORDER: 'js_sdk_locus_delta_ooo',\n PERMISSION_TOKEN_REFRESH: 'js_sdk_permission_token_refresh',\n PERMISSION_TOKEN_REFRESH_ERROR: 'js_sdk_permission_token_refresh_error',\n TURN_DISCOVERY_LATENCY: 'js_sdk_turn_discovery_latency',\n ROAP_OFFER_TO_ANSWER_LATENCY: 'js_sdk_roap_offer_to_answer_latency',\n ROAP_HTTP_RESPONSE_MISSING: 'js_sdk_roap_http_response_missing',\n TURN_DISCOVERY_REQUIRES_OK: 'js_sdk_turn_discovery_requires_ok',\n REACHABILITY_COMPLETED: 'js_sdk_reachability_completed',\n WEBINAR_REGISTRATION_ERROR: 'js_sdk_webinar_registration_error',\n GUEST_ENTERED_LOBBY: 'js_sdk_guest_entered_lobby',\n GUEST_EXITED_LOBBY: 'js_sdk_guest_exited_lobby',\n};\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":";;;;;;;AAAA;;AAEA,IAAMA,kBAAkB,GAAAC,OAAA,CAAAC,OAAA,GAAG;EACzBC,4BAA4B,EAAE,qCAAqC;EACnEC,6BAA6B,EAAE,sCAAsC;EACrEC,0BAA0B,EAAE,4BAA4B;EACxDC,0BAA0B,EAAE,mCAAmC;EAC/DC,2BAA2B,EAAE,oCAAoC;EACjEC,YAAY,EAAE,qBAAqB;EACnCC,YAAY,EAAE,sBAAsB;EACpCC,iBAAiB,EAAE,0BAA0B;EAC7CC,iBAAiB,EAAE,2BAA2B;EAC9CC,eAAe,EAAE,wBAAwB;EACzCC,2BAA2B,EAAE,8BAA8B;EAC3DC,kBAAkB,EAAE,2BAA2B;EAC/CC,kBAAkB,EAAE,4BAA4B;EAChDC,qBAAqB,EAAE,8BAA8B;EACrDC,uBAAuB,EAAE,oCAAoC;EAC7DC,yBAAyB,EAAE,sCAAsC;EACjEC,sBAAsB,EAAE,gCAAgC;EACxDC,yBAAyB,EAAE,mCAAmC;EAC9DC,uBAAuB,EAAE,iCAAiC;EAC1DC,iCAAiC,EAAE,0CAA0C;EAC7EC,wCAAwC,EAAE,iDAAiD;EAE3FC,4BAA4B,EAAE,qCAAqC;EACnEC,sBAAsB,EAAE,+BAA+B;EACvDC,yBAAyB,EAAE,mCAAmC;EAC9DC,0BAA0B,EAAE,mCAAmC;EAC/DC,qBAAqB,EAAE,8BAA8B;EACrDC,qBAAqB,EAAE,+BAA+B;EACtDC,sCAAsC,EAAE,gDAAgD;EACxFC,qCAAqC,EAAE,+CAA+C;EACtFC,qCAAqC,EAAE,8CAA8C;EACrFC,kBAAkB,EAAE,4BAA4B;EAChDC,kBAAkB,EAAE,4BAA4B;EAChDC,2BAA2B,EAAE,qCAAqC;EAClEC,0BAA0B,EAAE,oCAAoC;EAChEC,mBAAmB,EAAE,4BAA4B;EACjDC,oBAAoB,EAAE,6BAA6B;EACnDC,oBAAoB,EAAE,8BAA8B;EACpDC,oBAAoB,EAAE,8BAA8B;EACpDC,oBAAoB,EAAE,8BAA8B;EACpDC,mBAAmB,EAAE,6BAA6B;EAClDC,oBAAoB,EAAE,4BAA4B;EAClDC,sBAAsB,EAAE,gCAAgC;EACxDC,qBAAqB,EAAE,8BAA8B;EACrDC,mBAAmB,EAAE,4BAA4B;EACjDC,mBAAmB,EAAE,4BAA4B;EACjDC,6BAA6B,EAAE,sCAAsC;EACrEC,6BAA6B,EAAE,sCAAsC;EACrEC,6BAA6B,EAAE,sCAAsC;EACrEC,qBAAqB,EAAE,8BAA8B;EACrDC,qBAAqB,EAAE,8BAA8B;EACrDC,uBAAuB,EAAE,gCAAgC;EACzDC,qBAAqB,EAAE,8BAA8B;EACrDC,oBAAoB,EAAE,6BAA6B;EACnDC,eAAe,EAAE,wBAAwB;EACzCC,eAAe,EAAE,wBAAwB;EACzCC,iBAAiB,EAAE,0BAA0B;EAC7CC,iBAAiB,EAAE,0BAA0B;EAC7CC,sBAAsB,EAAE,+BAA+B;EACvDC,yBAAyB,EAAE,kCAAkC;EAC7DC,uBAAuB,EAAE,gCAAgC;EACzDC,wBAAwB,EAAE,wBAAwB;EAClDC,wBAAwB,EAAE,iCAAiC;EAC3DC,8BAA8B,EAAE,uCAAuC;EACvEC,sBAAsB,EAAE,+BAA+B;EACvDC,4BAA4B,EAAE,qCAAqC;EACnEC,0BAA0B,EAAE,mCAAmC;EAC/DC,0BAA0B,EAAE,mCAAmC;EAC/DC,sBAAsB,EAAE,+BAA+B;EACvDC,0BAA0B,EAAE,mCAAmC;EAC/DC,mBAAmB,EAAE,4BAA4B;EACjDC,kBAAkB,EAAE;AACtB,CAAC"}
1
+ {"version":3,"names":["BEHAVIORAL_METRICS","exports","default","MEETINGS_REGISTRATION_FAILED","MEETINGS_REGISTRATION_SUCCESS","MEETINGS_REGISTRATION_STEP","MERCURY_CONNECTION_FAILURE","MERCURY_CONNECTION_RESTORED","JOIN_SUCCESS","JOIN_FAILURE","ADD_MEDIA_SUCCESS","ADD_MEDIA_FAILURE","ADD_MEDIA_RETRY","ROAP_MERCURY_EVENT_RECEIVED","CONNECTION_SUCCESS","CONNECTION_FAILURE","MEETING_LEAVE_FAILURE","MEETING_END_ALL_FAILURE","MEETING_END_ALL_INITIATED","GET_USER_MEDIA_FAILURE","GET_DISPLAY_MEDIA_FAILURE","JOIN_WITH_MEDIA_FAILURE","LLM_CONNECTION_AFTER_JOIN_FAILURE","RECEIVE_TRANSCRIPTION_AFTER_JOIN_FAILURE","DISCONNECT_DUE_TO_INACTIVITY","MEETING_MEDIA_INACTIVE","MEETING_RECONNECT_FAILURE","MEETING_MAX_REJOIN_FAILURE","MEETING_SHARE_SUCCESS","MEETING_SHARE_FAILURE","MEETING_START_WHITEBOARD_SHARE_FAILURE","MEETING_STOP_WHITEBOARD_SHARE_FAILURE","MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE","MUTE_AUDIO_FAILURE","MUTE_VIDEO_FAILURE","SET_MEETING_QUALITY_FAILURE","STOP_FLOOR_REQUEST_FAILURE","ADD_DIAL_IN_FAILURE","ADD_DIAL_OUT_FAILURE","UPDATE_MEDIA_FAILURE","UNMUTE_AUDIO_FAILURE","UNMUTE_VIDEO_FAILURE","ROAP_ANSWER_FAILURE","ROAP_GLARE_CONDITION","PEERCONNECTION_FAILURE","INVALID_ICE_CANDIDATE","UPLOAD_LOGS_FAILURE","UPLOAD_LOGS_SUCCESS","RECEIVE_TRANSCRIPTION_FAILURE","FETCH_MEETING_INFO_V1_SUCCESS","FETCH_MEETING_INFO_V1_FAILURE","ADHOC_MEETING_SUCCESS","ADHOC_MEETING_FAILURE","VERIFY_PASSWORD_SUCCESS","VERIFY_PASSWORD_ERROR","VERIFY_CAPTCHA_ERROR","MOVE_TO_SUCCESS","MOVE_TO_FAILURE","MOVE_FROM_SUCCESS","MOVE_FROM_FAILURE","TURN_DISCOVERY_FAILURE","MEETING_INFO_POLICY_ERROR","LOCUS_DELTA_SYNC_FAILED","LOCUS_DELTA_OUT_OF_ORDER","PERMISSION_TOKEN_REFRESH","PERMISSION_TOKEN_REFRESH_ERROR","TURN_DISCOVERY_LATENCY","ROAP_OFFER_TO_ANSWER_LATENCY","ROAP_HTTP_RESPONSE_MISSING","TURN_DISCOVERY_REQUIRES_OK","REACHABILITY_COMPLETED","JOIN_WEBINAR_ERROR","GUEST_ENTERED_LOBBY","GUEST_EXITED_LOBBY"],"sources":["constants.ts"],"sourcesContent":["// Metrics constants ----------------------------------------------------------\n\nconst BEHAVIORAL_METRICS = {\n MEETINGS_REGISTRATION_FAILED: 'js_sdk_meetings_registration_failed',\n MEETINGS_REGISTRATION_SUCCESS: 'js_sdk_meetings_registration_success',\n MEETINGS_REGISTRATION_STEP: 'meetings_registration_step',\n MERCURY_CONNECTION_FAILURE: 'js_sdk_mercury_connection_failure',\n MERCURY_CONNECTION_RESTORED: 'js_sdk_mercury_connection_restored',\n JOIN_SUCCESS: 'js_sdk_join_success',\n JOIN_FAILURE: 'js_sdk_join_failures',\n ADD_MEDIA_SUCCESS: 'js_sdk_add_media_success',\n ADD_MEDIA_FAILURE: 'js_sdk_add_media_failures',\n ADD_MEDIA_RETRY: 'js_sdk_add_media_retry',\n ROAP_MERCURY_EVENT_RECEIVED: 'js_sdk_roap_mercury_received',\n CONNECTION_SUCCESS: 'js_sdk_connection_success',\n CONNECTION_FAILURE: 'js_sdk_connection_failures',\n MEETING_LEAVE_FAILURE: 'js_sdk_meeting_leave_failure',\n MEETING_END_ALL_FAILURE: 'js_sdk_meeting_end_for_all_failure',\n MEETING_END_ALL_INITIATED: 'js_sdk_meeting_end_for_all_initiated',\n GET_USER_MEDIA_FAILURE: 'js_sdk_get_user_media_failures',\n GET_DISPLAY_MEDIA_FAILURE: 'js_sdk_get_display_media_failures',\n JOIN_WITH_MEDIA_FAILURE: 'js_sdk_join_with_media_failures',\n LLM_CONNECTION_AFTER_JOIN_FAILURE: 'js_sdk_llm_connection_after_join_failure',\n RECEIVE_TRANSCRIPTION_AFTER_JOIN_FAILURE: 'js_sdk_receive_transcription_after_join_failure',\n\n DISCONNECT_DUE_TO_INACTIVITY: 'js_sdk_disconnect_due_to_inactivity',\n MEETING_MEDIA_INACTIVE: 'js_sdk_meeting_media_inactive',\n MEETING_RECONNECT_FAILURE: 'js_sdk_meeting_reconnect_failures',\n MEETING_MAX_REJOIN_FAILURE: 'js_sdk_meeting_max_rejoin_failure',\n MEETING_SHARE_SUCCESS: 'js_sdk_meeting_share_success',\n MEETING_SHARE_FAILURE: 'js_sdk_meeting_share_failures',\n MEETING_START_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_start_whiteboard_share_failures',\n MEETING_STOP_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_stop_whiteboard_share_failures',\n MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE: 'js_sdk_meeting_share_video_mute_state_change',\n MUTE_AUDIO_FAILURE: 'js_sdk_mute_audio_failures',\n MUTE_VIDEO_FAILURE: 'js_sdk_mute_video_failures',\n SET_MEETING_QUALITY_FAILURE: 'js_sdk_set_meeting_quality_failures',\n STOP_FLOOR_REQUEST_FAILURE: 'js_sdk_stop_floor_request_failures',\n ADD_DIAL_IN_FAILURE: 'js_sdk_add_dial_in_failure',\n ADD_DIAL_OUT_FAILURE: 'js_sdk_add_dial_out_failure',\n UPDATE_MEDIA_FAILURE: 'js_sdk_update_media_failures',\n UNMUTE_AUDIO_FAILURE: 'js_sdk_unmute_audio_failures',\n UNMUTE_VIDEO_FAILURE: 'js_sdk_unmute_video_failures',\n ROAP_ANSWER_FAILURE: 'js_sdk_roap_answer_failures',\n ROAP_GLARE_CONDITION: 'js_sdk_roap_glar_condition',\n PEERCONNECTION_FAILURE: 'js_sdk_peerConnection_failures',\n INVALID_ICE_CANDIDATE: 'js_sdk_invalid_ice_candidate',\n UPLOAD_LOGS_FAILURE: 'js_sdk_upload_logs_failure',\n UPLOAD_LOGS_SUCCESS: 'js_sdk_upload_logs_success',\n RECEIVE_TRANSCRIPTION_FAILURE: 'js_sdk_receive_transcription_failure',\n FETCH_MEETING_INFO_V1_SUCCESS: 'js_sdk_fetch_meeting_info_v1_success',\n FETCH_MEETING_INFO_V1_FAILURE: 'js_sdk_fetch_meeting_info_v1_failure',\n ADHOC_MEETING_SUCCESS: 'js_sdk_adhoc_meeting_success',\n ADHOC_MEETING_FAILURE: 'js_sdk_adhoc_meeting_failure',\n VERIFY_PASSWORD_SUCCESS: 'js_sdk_verify_password_success',\n VERIFY_PASSWORD_ERROR: 'js_sdk_verify_password_error',\n VERIFY_CAPTCHA_ERROR: 'js_sdk_verify_captcha_error',\n MOVE_TO_SUCCESS: 'js_sdk_move_to_success',\n MOVE_TO_FAILURE: 'js_sdk_move_to_failure',\n MOVE_FROM_SUCCESS: 'js_sdk_move_from_success',\n MOVE_FROM_FAILURE: 'js_sdk_move_from_failure',\n TURN_DISCOVERY_FAILURE: 'js_sdk_turn_discovery_failure',\n MEETING_INFO_POLICY_ERROR: 'js_sdk_meeting_info_policy_error',\n LOCUS_DELTA_SYNC_FAILED: 'js_sdk_locus_delta_sync_failed',\n LOCUS_DELTA_OUT_OF_ORDER: 'js_sdk_locus_delta_ooo',\n PERMISSION_TOKEN_REFRESH: 'js_sdk_permission_token_refresh',\n PERMISSION_TOKEN_REFRESH_ERROR: 'js_sdk_permission_token_refresh_error',\n TURN_DISCOVERY_LATENCY: 'js_sdk_turn_discovery_latency',\n ROAP_OFFER_TO_ANSWER_LATENCY: 'js_sdk_roap_offer_to_answer_latency',\n ROAP_HTTP_RESPONSE_MISSING: 'js_sdk_roap_http_response_missing',\n TURN_DISCOVERY_REQUIRES_OK: 'js_sdk_turn_discovery_requires_ok',\n REACHABILITY_COMPLETED: 'js_sdk_reachability_completed',\n JOIN_WEBINAR_ERROR: 'js_sdk_join_webinar_error',\n GUEST_ENTERED_LOBBY: 'js_sdk_guest_entered_lobby',\n GUEST_EXITED_LOBBY: 'js_sdk_guest_exited_lobby',\n};\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":";;;;;;;AAAA;;AAEA,IAAMA,kBAAkB,GAAAC,OAAA,CAAAC,OAAA,GAAG;EACzBC,4BAA4B,EAAE,qCAAqC;EACnEC,6BAA6B,EAAE,sCAAsC;EACrEC,0BAA0B,EAAE,4BAA4B;EACxDC,0BAA0B,EAAE,mCAAmC;EAC/DC,2BAA2B,EAAE,oCAAoC;EACjEC,YAAY,EAAE,qBAAqB;EACnCC,YAAY,EAAE,sBAAsB;EACpCC,iBAAiB,EAAE,0BAA0B;EAC7CC,iBAAiB,EAAE,2BAA2B;EAC9CC,eAAe,EAAE,wBAAwB;EACzCC,2BAA2B,EAAE,8BAA8B;EAC3DC,kBAAkB,EAAE,2BAA2B;EAC/CC,kBAAkB,EAAE,4BAA4B;EAChDC,qBAAqB,EAAE,8BAA8B;EACrDC,uBAAuB,EAAE,oCAAoC;EAC7DC,yBAAyB,EAAE,sCAAsC;EACjEC,sBAAsB,EAAE,gCAAgC;EACxDC,yBAAyB,EAAE,mCAAmC;EAC9DC,uBAAuB,EAAE,iCAAiC;EAC1DC,iCAAiC,EAAE,0CAA0C;EAC7EC,wCAAwC,EAAE,iDAAiD;EAE3FC,4BAA4B,EAAE,qCAAqC;EACnEC,sBAAsB,EAAE,+BAA+B;EACvDC,yBAAyB,EAAE,mCAAmC;EAC9DC,0BAA0B,EAAE,mCAAmC;EAC/DC,qBAAqB,EAAE,8BAA8B;EACrDC,qBAAqB,EAAE,+BAA+B;EACtDC,sCAAsC,EAAE,gDAAgD;EACxFC,qCAAqC,EAAE,+CAA+C;EACtFC,qCAAqC,EAAE,8CAA8C;EACrFC,kBAAkB,EAAE,4BAA4B;EAChDC,kBAAkB,EAAE,4BAA4B;EAChDC,2BAA2B,EAAE,qCAAqC;EAClEC,0BAA0B,EAAE,oCAAoC;EAChEC,mBAAmB,EAAE,4BAA4B;EACjDC,oBAAoB,EAAE,6BAA6B;EACnDC,oBAAoB,EAAE,8BAA8B;EACpDC,oBAAoB,EAAE,8BAA8B;EACpDC,oBAAoB,EAAE,8BAA8B;EACpDC,mBAAmB,EAAE,6BAA6B;EAClDC,oBAAoB,EAAE,4BAA4B;EAClDC,sBAAsB,EAAE,gCAAgC;EACxDC,qBAAqB,EAAE,8BAA8B;EACrDC,mBAAmB,EAAE,4BAA4B;EACjDC,mBAAmB,EAAE,4BAA4B;EACjDC,6BAA6B,EAAE,sCAAsC;EACrEC,6BAA6B,EAAE,sCAAsC;EACrEC,6BAA6B,EAAE,sCAAsC;EACrEC,qBAAqB,EAAE,8BAA8B;EACrDC,qBAAqB,EAAE,8BAA8B;EACrDC,uBAAuB,EAAE,gCAAgC;EACzDC,qBAAqB,EAAE,8BAA8B;EACrDC,oBAAoB,EAAE,6BAA6B;EACnDC,eAAe,EAAE,wBAAwB;EACzCC,eAAe,EAAE,wBAAwB;EACzCC,iBAAiB,EAAE,0BAA0B;EAC7CC,iBAAiB,EAAE,0BAA0B;EAC7CC,sBAAsB,EAAE,+BAA+B;EACvDC,yBAAyB,EAAE,kCAAkC;EAC7DC,uBAAuB,EAAE,gCAAgC;EACzDC,wBAAwB,EAAE,wBAAwB;EAClDC,wBAAwB,EAAE,iCAAiC;EAC3DC,8BAA8B,EAAE,uCAAuC;EACvEC,sBAAsB,EAAE,+BAA+B;EACvDC,4BAA4B,EAAE,qCAAqC;EACnEC,0BAA0B,EAAE,mCAAmC;EAC/DC,0BAA0B,EAAE,mCAAmC;EAC/DC,sBAAsB,EAAE,+BAA+B;EACvDC,kBAAkB,EAAE,2BAA2B;EAC/CC,mBAAmB,EAAE,4BAA4B;EACjDC,kBAAkB,EAAE;AACtB,CAAC"}
@@ -26,6 +26,14 @@ var RemoteMediaEvents = exports.RemoteMediaEvents = {
26
26
  };
27
27
  // highest possible resolution
28
28
 
29
+ var MAX_FS_VALUES = {
30
+ '90p': 60,
31
+ '180p': 240,
32
+ '360p': 920,
33
+ '720p': 3600,
34
+ '1080p': 8192
35
+ };
36
+
29
37
  /**
30
38
  * Converts pane size into h264 maxFs
31
39
  * @param {PaneSize} paneSize
@@ -35,26 +43,26 @@ function getMaxFs(paneSize) {
35
43
  var maxFs;
36
44
  switch (paneSize) {
37
45
  case 'thumbnail':
38
- maxFs = 60;
46
+ maxFs = MAX_FS_VALUES['90p'];
39
47
  break;
40
48
  case 'very small':
41
- maxFs = 240;
49
+ maxFs = MAX_FS_VALUES['180p'];
42
50
  break;
43
51
  case 'small':
44
- maxFs = 920;
52
+ maxFs = MAX_FS_VALUES['360p'];
45
53
  break;
46
54
  case 'medium':
47
- maxFs = 3600;
55
+ maxFs = MAX_FS_VALUES['720p'];
48
56
  break;
49
57
  case 'large':
50
- maxFs = 8192;
58
+ maxFs = MAX_FS_VALUES['1080p'];
51
59
  break;
52
60
  case 'best':
53
- maxFs = 8192; // for now 'best' is 1080p, so same as 'large'
61
+ maxFs = MAX_FS_VALUES['1080p']; // for now 'best' is 1080p, so same as 'large'
54
62
  break;
55
63
  default:
56
64
  _loggerProxy.default.logger.warn("RemoteMedia#getMaxFs --> unsupported paneSize: ".concat(paneSize, ", using \"medium\" instead"));
57
- maxFs = 3600;
65
+ maxFs = MAX_FS_VALUES['720p'];
58
66
  }
59
67
  return maxFs;
60
68
  }
@@ -110,16 +118,23 @@ var RemoteMedia = exports.RemoteMedia = /*#__PURE__*/function (_EventsScope) {
110
118
  if (width === 0 || height === 0) {
111
119
  return;
112
120
  }
113
- if (height < 135) {
114
- fs = 60;
115
- } else if (height < 270) {
116
- fs = 240;
117
- } else if (height < 540) {
118
- fs = 920;
121
+
122
+ // we switch to the next resolution level when the height is 10% more than the current resolution height
123
+ // except for 1080p - we switch to it immediately when the height is more than 720p
124
+ var threshold = 1.1;
125
+ var getThresholdHeight = function getThresholdHeight(h) {
126
+ return Math.round(h * threshold);
127
+ };
128
+ if (height < getThresholdHeight(90)) {
129
+ fs = MAX_FS_VALUES['90p'];
130
+ } else if (height < getThresholdHeight(180)) {
131
+ fs = MAX_FS_VALUES['180p'];
132
+ } else if (height < getThresholdHeight(360)) {
133
+ fs = MAX_FS_VALUES['360p'];
119
134
  } else if (height <= 720) {
120
- fs = 3600;
135
+ fs = MAX_FS_VALUES['720p'];
121
136
  } else {
122
- fs = 8192;
137
+ fs = MAX_FS_VALUES['1080p'];
123
138
  }
124
139
  (_this$receiveSlot = this.receiveSlot) === null || _this$receiveSlot === void 0 ? void 0 : _this$receiveSlot.setMaxFs(fs);
125
140
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_eventsScope","_receiveSlot","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","RemoteMediaEvents","exports","SourceUpdate","ReceiveSlotEvents","Stopped","getMaxFs","paneSize","maxFs","LoggerProxy","logger","warn","concat","remoteMediaCounter","RemoteMedia","_EventsScope","_inherits2","_super","receiveSlot","mediaRequestManager","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","setupEventListeners","id","_createClass2","key","value","setSizeHint","width","height","_this$receiveSlot","fs","setMaxFs","stop","_this$receiveSlot2","commit","length","undefined","cancelMediaRequest","removeAllListeners","emit","file","function","sendMediaRequest","csi","mediaRequestId","Error","addRequest","policyInfo","policy","receiveSlots","codecInfo","resolution","codec","cancelRequest","_this2","scope","on","data","get","_this$receiveSlot3","mediaType","_this$receiveSlot4","memberId","_this$receiveSlot5","_this$receiveSlot6","sourceState","_this$receiveSlot7","stream","getUnderlyingReceiveSlot","EventsScope"],"sources":["remoteMedia.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {MediaType, StreamState} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\n\nimport {MediaRequestId, MediaRequestManager} from './mediaRequestManager';\nimport {CSI, ReceiveSlot, ReceiveSlotEvents} from './receiveSlot';\n\nexport const RemoteMediaEvents = {\n SourceUpdate: ReceiveSlotEvents.SourceUpdate,\n Stopped: 'stopped',\n};\n\nexport type RemoteVideoResolution =\n | 'thumbnail' // the smallest possible resolution, 90p or less\n | 'very small' // 180p or less\n | 'small' // 360p or less\n | 'medium' // 720p or less\n | 'large' // 1080p or less\n | 'best'; // highest possible resolution\n\n/**\n * Converts pane size into h264 maxFs\n * @param {PaneSize} paneSize\n * @returns {number}\n */\nexport function getMaxFs(paneSize: RemoteVideoResolution): number {\n let maxFs;\n\n switch (paneSize) {\n case 'thumbnail':\n maxFs = 60;\n break;\n case 'very small':\n maxFs = 240;\n break;\n case 'small':\n maxFs = 920;\n break;\n case 'medium':\n maxFs = 3600;\n break;\n case 'large':\n maxFs = 8192;\n break;\n case 'best':\n maxFs = 8192; // for now 'best' is 1080p, so same as 'large'\n break;\n default:\n LoggerProxy.logger.warn(\n `RemoteMedia#getMaxFs --> unsupported paneSize: ${paneSize}, using \"medium\" instead`\n );\n maxFs = 3600;\n }\n\n return maxFs;\n}\n\ntype Options = {\n resolution?: RemoteVideoResolution; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides\n};\n\nexport type RemoteMediaId = string;\n\nlet remoteMediaCounter = 0;\n\n/**\n * Class representing a remote audio/video stream.\n *\n * Internally it is associated with a specific receive slot\n * and a media request for it.\n */\nexport class RemoteMedia extends EventsScope {\n private receiveSlot?: ReceiveSlot;\n\n private readonly mediaRequestManager: MediaRequestManager;\n\n private readonly options: Options;\n\n private mediaRequestId?: MediaRequestId;\n\n public readonly id: RemoteMediaId;\n\n /**\n * Constructs RemoteMedia instance\n *\n * @param receiveSlot\n * @param mediaRequestManager\n * @param options\n */\n constructor(\n receiveSlot: ReceiveSlot,\n mediaRequestManager: MediaRequestManager,\n options?: Options\n ) {\n super();\n remoteMediaCounter += 1;\n this.receiveSlot = receiveSlot;\n this.mediaRequestManager = mediaRequestManager;\n this.options = options || {};\n this.setupEventListeners();\n this.id = `RM${remoteMediaCounter}-${this.receiveSlot.id}`;\n }\n\n /**\n * Supply the width and height of the video element\n * to restrict the requested resolution to this size\n * @param width width of the video element\n * @param height height of the video element\n * @note width/height of 0 will be ignored\n */\n public setSizeHint(width, height) {\n // only base on height for now\n let fs: number;\n\n if (width === 0 || height === 0) {\n return;\n }\n\n if (height < 135) {\n fs = 60;\n } else if (height < 270) {\n fs = 240;\n } else if (height < 540) {\n fs = 920;\n } else if (height <= 720) {\n fs = 3600;\n } else {\n fs = 8192;\n }\n\n this.receiveSlot?.setMaxFs(fs);\n }\n\n /**\n * Invalidates the remote media by clearing the reference to a receive slot and\n * cancelling the media request.\n * After this call the remote media is unusable.\n *\n * @param {boolean} commit - whether to commit the cancellation of the media request\n * @internal\n */\n public stop(commit = true) {\n this.cancelMediaRequest(commit);\n this.receiveSlot?.removeAllListeners();\n this.receiveSlot = undefined;\n this.emit(\n {\n file: 'multistream/remoteMedia',\n function: 'stop',\n },\n RemoteMediaEvents.Stopped,\n {}\n );\n }\n\n /**\n * Sends a new media request. This method can only be used for receiver-selected policy,\n * because only in that policy we have a 1-1 relationship between RemoteMedia and MediaRequest\n * and the request id is then stored in this RemoteMedia instance.\n * For active-speaker policy, the same request is shared among many RemoteMedia instances,\n * so it's managed through RemoteMediaGroup\n *\n * @internal\n */\n public sendMediaRequest(csi: CSI, commit: boolean) {\n if (this.mediaRequestId) {\n this.cancelMediaRequest(false);\n }\n\n if (!this.receiveSlot) {\n throw new Error('sendMediaRequest() called on an invalidated RemoteMedia instance');\n }\n\n this.mediaRequestId = this.mediaRequestManager.addRequest(\n {\n policyInfo: {\n policy: 'receiver-selected',\n csi,\n },\n receiveSlots: [this.receiveSlot],\n codecInfo: this.options.resolution && {\n codec: 'h264',\n maxFs: getMaxFs(this.options.resolution),\n },\n },\n commit\n );\n }\n\n /**\n * @internal\n */\n public cancelMediaRequest(commit: boolean) {\n if (this.mediaRequestId) {\n this.mediaRequestManager.cancelRequest(this.mediaRequestId, commit);\n this.mediaRequestId = undefined;\n }\n }\n\n /**\n * registers event listeners on the receive slot and forwards all the events\n */\n private setupEventListeners() {\n if (this.receiveSlot) {\n const scope = {\n file: 'multistream/remoteMedia',\n function: 'setupEventListeners',\n };\n\n this.receiveSlot.on(ReceiveSlotEvents.SourceUpdate, (data) => {\n this.emit(scope, RemoteMediaEvents.SourceUpdate, data);\n });\n }\n }\n\n /**\n * Getter for mediaType\n */\n public get mediaType(): MediaType {\n return this.receiveSlot?.mediaType;\n }\n\n /**\n * Getter for memberId\n */\n public get memberId() {\n return this.receiveSlot?.memberId;\n }\n\n /**\n * Getter for csi\n */\n public get csi() {\n return this.receiveSlot?.csi;\n }\n\n /**\n * Getter for source state\n */\n public get sourceState(): StreamState {\n return this.receiveSlot?.sourceState;\n }\n\n /**\n * Getter for remote media stream\n */\n public get stream() {\n return this.receiveSlot?.stream;\n }\n\n /**\n * @internal\n * @returns {ReceiveSlot}\n */\n public getUnderlyingReceiveSlot() {\n return this.receiveSlot;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_eventsScope","_receiveSlot","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","RemoteMediaEvents","exports","SourceUpdate","ReceiveSlotEvents","Stopped","MAX_FS_VALUES","getMaxFs","paneSize","maxFs","LoggerProxy","logger","warn","concat","remoteMediaCounter","RemoteMedia","_EventsScope","_inherits2","_super","receiveSlot","mediaRequestManager","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","setupEventListeners","id","_createClass2","key","value","setSizeHint","width","height","_this$receiveSlot","fs","threshold","getThresholdHeight","h","Math","round","setMaxFs","stop","_this$receiveSlot2","commit","length","undefined","cancelMediaRequest","removeAllListeners","emit","file","function","sendMediaRequest","csi","mediaRequestId","Error","addRequest","policyInfo","policy","receiveSlots","codecInfo","resolution","codec","cancelRequest","_this2","scope","on","data","get","_this$receiveSlot3","mediaType","_this$receiveSlot4","memberId","_this$receiveSlot5","_this$receiveSlot6","sourceState","_this$receiveSlot7","stream","getUnderlyingReceiveSlot","EventsScope"],"sources":["remoteMedia.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {MediaType, StreamState} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\n\nimport {MediaRequestId, MediaRequestManager} from './mediaRequestManager';\nimport {CSI, ReceiveSlot, ReceiveSlotEvents} from './receiveSlot';\n\nexport const RemoteMediaEvents = {\n SourceUpdate: ReceiveSlotEvents.SourceUpdate,\n Stopped: 'stopped',\n};\n\nexport type RemoteVideoResolution =\n | 'thumbnail' // the smallest possible resolution, 90p or less\n | 'very small' // 180p or less\n | 'small' // 360p or less\n | 'medium' // 720p or less\n | 'large' // 1080p or less\n | 'best'; // highest possible resolution\n\nconst MAX_FS_VALUES = {\n '90p': 60,\n '180p': 240,\n '360p': 920,\n '720p': 3600,\n '1080p': 8192,\n};\n\n/**\n * Converts pane size into h264 maxFs\n * @param {PaneSize} paneSize\n * @returns {number}\n */\nexport function getMaxFs(paneSize: RemoteVideoResolution): number {\n let maxFs;\n\n switch (paneSize) {\n case 'thumbnail':\n maxFs = MAX_FS_VALUES['90p'];\n break;\n case 'very small':\n maxFs = MAX_FS_VALUES['180p'];\n break;\n case 'small':\n maxFs = MAX_FS_VALUES['360p'];\n break;\n case 'medium':\n maxFs = MAX_FS_VALUES['720p'];\n break;\n case 'large':\n maxFs = MAX_FS_VALUES['1080p'];\n break;\n case 'best':\n maxFs = MAX_FS_VALUES['1080p']; // for now 'best' is 1080p, so same as 'large'\n break;\n default:\n LoggerProxy.logger.warn(\n `RemoteMedia#getMaxFs --> unsupported paneSize: ${paneSize}, using \"medium\" instead`\n );\n maxFs = MAX_FS_VALUES['720p'];\n }\n\n return maxFs;\n}\n\ntype Options = {\n resolution?: RemoteVideoResolution; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides\n};\n\nexport type RemoteMediaId = string;\n\nlet remoteMediaCounter = 0;\n\n/**\n * Class representing a remote audio/video stream.\n *\n * Internally it is associated with a specific receive slot\n * and a media request for it.\n */\nexport class RemoteMedia extends EventsScope {\n private receiveSlot?: ReceiveSlot;\n\n private readonly mediaRequestManager: MediaRequestManager;\n\n private readonly options: Options;\n\n private mediaRequestId?: MediaRequestId;\n\n public readonly id: RemoteMediaId;\n\n /**\n * Constructs RemoteMedia instance\n *\n * @param receiveSlot\n * @param mediaRequestManager\n * @param options\n */\n constructor(\n receiveSlot: ReceiveSlot,\n mediaRequestManager: MediaRequestManager,\n options?: Options\n ) {\n super();\n remoteMediaCounter += 1;\n this.receiveSlot = receiveSlot;\n this.mediaRequestManager = mediaRequestManager;\n this.options = options || {};\n this.setupEventListeners();\n this.id = `RM${remoteMediaCounter}-${this.receiveSlot.id}`;\n }\n\n /**\n * Supply the width and height of the video element\n * to restrict the requested resolution to this size\n * @param width width of the video element\n * @param height height of the video element\n * @note width/height of 0 will be ignored\n */\n public setSizeHint(width, height) {\n // only base on height for now\n let fs: number;\n\n if (width === 0 || height === 0) {\n return;\n }\n\n // we switch to the next resolution level when the height is 10% more than the current resolution height\n // except for 1080p - we switch to it immediately when the height is more than 720p\n const threshold = 1.1;\n const getThresholdHeight = (h: number) => Math.round(h * threshold);\n\n if (height < getThresholdHeight(90)) {\n fs = MAX_FS_VALUES['90p'];\n } else if (height < getThresholdHeight(180)) {\n fs = MAX_FS_VALUES['180p'];\n } else if (height < getThresholdHeight(360)) {\n fs = MAX_FS_VALUES['360p'];\n } else if (height <= 720) {\n fs = MAX_FS_VALUES['720p'];\n } else {\n fs = MAX_FS_VALUES['1080p'];\n }\n\n this.receiveSlot?.setMaxFs(fs);\n }\n\n /**\n * Invalidates the remote media by clearing the reference to a receive slot and\n * cancelling the media request.\n * After this call the remote media is unusable.\n *\n * @param {boolean} commit - whether to commit the cancellation of the media request\n * @internal\n */\n public stop(commit = true) {\n this.cancelMediaRequest(commit);\n this.receiveSlot?.removeAllListeners();\n this.receiveSlot = undefined;\n this.emit(\n {\n file: 'multistream/remoteMedia',\n function: 'stop',\n },\n RemoteMediaEvents.Stopped,\n {}\n );\n }\n\n /**\n * Sends a new media request. This method can only be used for receiver-selected policy,\n * because only in that policy we have a 1-1 relationship between RemoteMedia and MediaRequest\n * and the request id is then stored in this RemoteMedia instance.\n * For active-speaker policy, the same request is shared among many RemoteMedia instances,\n * so it's managed through RemoteMediaGroup\n *\n * @internal\n */\n public sendMediaRequest(csi: CSI, commit: boolean) {\n if (this.mediaRequestId) {\n this.cancelMediaRequest(false);\n }\n\n if (!this.receiveSlot) {\n throw new Error('sendMediaRequest() called on an invalidated RemoteMedia instance');\n }\n\n this.mediaRequestId = this.mediaRequestManager.addRequest(\n {\n policyInfo: {\n policy: 'receiver-selected',\n csi,\n },\n receiveSlots: [this.receiveSlot],\n codecInfo: this.options.resolution && {\n codec: 'h264',\n maxFs: getMaxFs(this.options.resolution),\n },\n },\n commit\n );\n }\n\n /**\n * @internal\n */\n public cancelMediaRequest(commit: boolean) {\n if (this.mediaRequestId) {\n this.mediaRequestManager.cancelRequest(this.mediaRequestId, commit);\n this.mediaRequestId = undefined;\n }\n }\n\n /**\n * registers event listeners on the receive slot and forwards all the events\n */\n private setupEventListeners() {\n if (this.receiveSlot) {\n const scope = {\n file: 'multistream/remoteMedia',\n function: 'setupEventListeners',\n };\n\n this.receiveSlot.on(ReceiveSlotEvents.SourceUpdate, (data) => {\n this.emit(scope, RemoteMediaEvents.SourceUpdate, data);\n });\n }\n }\n\n /**\n * Getter for mediaType\n */\n public get mediaType(): MediaType {\n return this.receiveSlot?.mediaType;\n }\n\n /**\n * Getter for memberId\n */\n public get memberId() {\n return this.receiveSlot?.memberId;\n }\n\n /**\n * Getter for csi\n */\n public get csi() {\n return this.receiveSlot?.csi;\n }\n\n /**\n * Getter for source state\n */\n public get sourceState(): StreamState {\n return this.receiveSlot?.sourceState;\n }\n\n /**\n * Getter for remote media stream\n */\n public get stream() {\n return this.receiveSlot?.stream;\n }\n\n /**\n * @internal\n * @returns {ReceiveSlot}\n */\n public getUnderlyingReceiveSlot() {\n return this.receiveSlot;\n }\n}\n"],"mappings":"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"}
@@ -77,6 +77,30 @@ var SendSlotManager = exports.default = /*#__PURE__*/function () {
77
77
  this.LoggerProxy.logger.info("SendSlotsManager->setNamedMediaGroups#set named media group ".concat(namedMediaGroups));
78
78
  }
79
79
 
80
+ /**
81
+ * Sets the source state override for the given media type.
82
+ * @param {MediaType} mediaType - The type of media (must be MediaType.VideoMain to apply source state changes).
83
+ * @param {StreamState | null} state - The state to set or null to clear the override value.
84
+ * @returns {void}
85
+ */
86
+ }, {
87
+ key: "setSourceStateOverride",
88
+ value: function setSourceStateOverride(mediaType, state) {
89
+ if (mediaType !== _internalMediaCore.MediaType.VideoMain) {
90
+ throw new Error("sendSlotManager cannot set source state override which media type is ".concat(mediaType));
91
+ }
92
+ var slot = this.slots.get(mediaType);
93
+ if (!slot) {
94
+ throw new Error("Slot for ".concat(mediaType, " does not exist"));
95
+ }
96
+ if (state) {
97
+ slot.setSourceStateOverride(state);
98
+ } else {
99
+ slot.clearSourceStateOverride();
100
+ }
101
+ this.LoggerProxy.logger.info("SendSlotsManager->setSourceStateOverride#set source state override for ".concat(mediaType, " to ").concat(state));
102
+ }
103
+
80
104
  /**
81
105
  * This method publishes the given stream to the sendSlot for the given mediaType
82
106
  * @param {MediaType} mediaType MediaType of the sendSlot to which a stream needs to be published (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)
@@ -1 +1 @@
1
- {"version":3,"names":["_internalMediaCore","require","SendSlotManager","exports","default","LoggerProxy","_classCallCheck2","_defineProperty2","_map","_createClass2","key","value","createSlot","mediaConnection","mediaType","active","arguments","length","undefined","slots","has","Error","concat","slot","createSendSlot","set","logger","info","getSlot","get","setNamedMediaGroups","namedMediaGroups","MediaType","AudioMain","_publishStream","_asyncToGenerator2","_regenerator","mark","_callee","stream","wrap","_callee$","_context","prev","next","publishStream","label","muted","stop","_x","_x2","apply","_unpublishStream","_callee2","_callee2$","_context2","unpublishStream","_x3","setActive","_setCodecParameters","_callee3","codecParameters","_callee3$","_context3","setCodecParameters","_x4","_x5","_deleteCodecParameters","_callee4","parameters","_callee4$","_context4","deleteCodecParameters","_x6","_x7","reset","clear"],"sources":["sendSlotManager.ts"],"sourcesContent":["import {\n SendSlot,\n MediaType,\n LocalStream,\n MultistreamRoapMediaConnection,\n NamedMediaGroup,\n} from '@webex/internal-media-core';\n\nexport default class SendSlotManager {\n private readonly slots: Map<MediaType, SendSlot> = new Map();\n private readonly LoggerProxy: any;\n\n constructor(LoggerProxy: any) {\n this.LoggerProxy = LoggerProxy;\n }\n\n /**\n * This method is used to create a sendSlot for the given mediaType and returns the created sendSlot\n * @param {MultistreamRoapMediaConnection} mediaConnection MultistreamRoapMediaConnection for which a sendSlot needs to be created\n * @param {MediaType} mediaType MediaType for which a sendSlot needs to be created (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {boolean} active This is optional boolean to set the active state of the sendSlot. Default is true\n * @returns {SendSlot} slot The created sendSlot\n */\n public createSlot(\n mediaConnection: MultistreamRoapMediaConnection,\n mediaType: MediaType,\n active = true\n ): SendSlot {\n if (this.slots.has(mediaType)) {\n throw new Error(`Slot for ${mediaType} already exists`);\n }\n\n const slot: SendSlot = mediaConnection.createSendSlot(mediaType, active);\n\n this.slots.set(mediaType, slot);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->createSlot#Created slot for ${mediaType} with active ${active}`\n );\n\n return slot;\n }\n\n /**\n * This method is used to retrieve the sendSlot for the given mediaType\n * @param {MediaType} mediaType of which the slot needs to be retrieved\n * @returns {SendSlot}\n */\n public getSlot(mediaType: MediaType): SendSlot {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n return slot;\n }\n\n /**\n * Allow users to specify 'namedMediaGroups' to indicate which named media group its audio should be sent to.\n * @param {MediaType} mediaType MediaType of the sendSlot to which the audio stream needs to be send to the media group\n * @param {[]}namedMediaGroups - Allow users to specify 'namedMediaGroups'.If the value of 'namedMediaGroups' is zero,\n * named media group will be canceled and the audio stream will be sent to the floor.\n * @returns {void}\n */\n public setNamedMediaGroups(mediaType: MediaType, namedMediaGroups: NamedMediaGroup[]) {\n if (mediaType !== MediaType.AudioMain) {\n throw new Error(\n `sendSlotManager cannot set named media group which media type is ${mediaType}`\n );\n }\n\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n slot.setNamedMediaGroups(namedMediaGroups);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->setNamedMediaGroups#set named media group ${namedMediaGroups}`\n );\n }\n\n /**\n * This method publishes the given stream to the sendSlot for the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot to which a stream needs to be published (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {LocalStream} stream LocalStream to be published\n * @returns {Promise<void>}\n */\n public async publishStream(mediaType: MediaType, stream: LocalStream): Promise<void> {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.publishStream(stream);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->publishStream#Published stream for ${mediaType} and stream with label ${stream.label} and muted ${stream.muted}`\n );\n }\n\n /**\n * This method unpublishes the stream from the sendSlot of the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot from which a stream needs to be unpublished (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @returns {Promise<void>}\n */\n public async unpublishStream(mediaType: MediaType): Promise<void> {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.unpublishStream();\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->unpublishStream#Unpublished stream for ${mediaType}`\n );\n }\n\n /**\n * This method is used to set the active state of the sendSlot for the given mediaType\n * @param {MediaType} mediaType The MediaType of the sendSlot for which the active state needs to be set (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {boolean} active The boolean to set the active state of the sendSlot. Default is true\n * @returns {void}\n */\n public setActive(mediaType: MediaType, active = true): void {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n slot.active = active;\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->setActive#Set active for ${mediaType} to ${active}`\n );\n }\n\n /**\n * This method is used to set the codec parameters for the sendSlot of the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot for which the codec parameters needs to be set (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {Object} codecParameters\n * @returns {Promise<void>}\n */\n public async setCodecParameters(\n mediaType: MediaType,\n codecParameters: {\n [key: string]: string | undefined; // As per ts-sdp undefined is considered as a valid value to be used for codec parameters\n }\n ): Promise<void> {\n // These codec parameter changes underneath are SDP value changes that are taken care by WCME automatically. So no need for any change in streams from the web sdk side\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.setCodecParameters(codecParameters);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->setCodecParameters#Set codec parameters for ${mediaType} to ${codecParameters}`\n );\n }\n\n /**\n * This method is used to delete the codec parameters for the sendSlot of the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot for which the codec parameters needs to be deleted (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {Array<String>} parameters Array of keys of the codec parameters to be deleted\n * @returns {Promise<void>}\n */\n public async deleteCodecParameters(mediaType: MediaType, parameters: string[]): Promise<void> {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.deleteCodecParameters(parameters);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->deleteCodecParameters#Deleted the following codec parameters -> ${parameters} for ${mediaType}`\n );\n }\n\n /**\n * This method is used to reset the SendSlotsManager by deleting all the sendSlots\n * @returns {undefined}\n */\n public reset(): void {\n this.slots.clear();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_internalMediaCore","require","SendSlotManager","exports","default","LoggerProxy","_classCallCheck2","_defineProperty2","_map","_createClass2","key","value","createSlot","mediaConnection","mediaType","active","arguments","length","undefined","slots","has","Error","concat","slot","createSendSlot","set","logger","info","getSlot","get","setNamedMediaGroups","namedMediaGroups","MediaType","AudioMain","setSourceStateOverride","state","VideoMain","clearSourceStateOverride","_publishStream","_asyncToGenerator2","_regenerator","mark","_callee","stream","wrap","_callee$","_context","prev","next","publishStream","label","muted","stop","_x","_x2","apply","_unpublishStream","_callee2","_callee2$","_context2","unpublishStream","_x3","setActive","_setCodecParameters","_callee3","codecParameters","_callee3$","_context3","setCodecParameters","_x4","_x5","_deleteCodecParameters","_callee4","parameters","_callee4$","_context4","deleteCodecParameters","_x6","_x7","reset","clear"],"sources":["sendSlotManager.ts"],"sourcesContent":["import {\n SendSlot,\n MediaType,\n LocalStream,\n MultistreamRoapMediaConnection,\n NamedMediaGroup,\n StreamState,\n} from '@webex/internal-media-core';\n\nexport default class SendSlotManager {\n private readonly slots: Map<MediaType, SendSlot> = new Map();\n private readonly LoggerProxy: any;\n\n constructor(LoggerProxy: any) {\n this.LoggerProxy = LoggerProxy;\n }\n\n /**\n * This method is used to create a sendSlot for the given mediaType and returns the created sendSlot\n * @param {MultistreamRoapMediaConnection} mediaConnection MultistreamRoapMediaConnection for which a sendSlot needs to be created\n * @param {MediaType} mediaType MediaType for which a sendSlot needs to be created (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {boolean} active This is optional boolean to set the active state of the sendSlot. Default is true\n * @returns {SendSlot} slot The created sendSlot\n */\n public createSlot(\n mediaConnection: MultistreamRoapMediaConnection,\n mediaType: MediaType,\n active = true\n ): SendSlot {\n if (this.slots.has(mediaType)) {\n throw new Error(`Slot for ${mediaType} already exists`);\n }\n\n const slot: SendSlot = mediaConnection.createSendSlot(mediaType, active);\n\n this.slots.set(mediaType, slot);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->createSlot#Created slot for ${mediaType} with active ${active}`\n );\n\n return slot;\n }\n\n /**\n * This method is used to retrieve the sendSlot for the given mediaType\n * @param {MediaType} mediaType of which the slot needs to be retrieved\n * @returns {SendSlot}\n */\n public getSlot(mediaType: MediaType): SendSlot {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n return slot;\n }\n\n /**\n * Allow users to specify 'namedMediaGroups' to indicate which named media group its audio should be sent to.\n * @param {MediaType} mediaType MediaType of the sendSlot to which the audio stream needs to be send to the media group\n * @param {[]}namedMediaGroups - Allow users to specify 'namedMediaGroups'.If the value of 'namedMediaGroups' is zero,\n * named media group will be canceled and the audio stream will be sent to the floor.\n * @returns {void}\n */\n public setNamedMediaGroups(mediaType: MediaType, namedMediaGroups: NamedMediaGroup[]) {\n if (mediaType !== MediaType.AudioMain) {\n throw new Error(\n `sendSlotManager cannot set named media group which media type is ${mediaType}`\n );\n }\n\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n slot.setNamedMediaGroups(namedMediaGroups);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->setNamedMediaGroups#set named media group ${namedMediaGroups}`\n );\n }\n\n /**\n * Sets the source state override for the given media type.\n * @param {MediaType} mediaType - The type of media (must be MediaType.VideoMain to apply source state changes).\n * @param {StreamState | null} state - The state to set or null to clear the override value.\n * @returns {void}\n */\n public setSourceStateOverride(mediaType: MediaType, state: StreamState | null) {\n if (mediaType !== MediaType.VideoMain) {\n throw new Error(\n `sendSlotManager cannot set source state override which media type is ${mediaType}`\n );\n }\n\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n if (state) {\n slot.setSourceStateOverride(state);\n } else {\n slot.clearSourceStateOverride();\n }\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->setSourceStateOverride#set source state override for ${mediaType} to ${state}`\n );\n }\n\n /**\n * This method publishes the given stream to the sendSlot for the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot to which a stream needs to be published (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {LocalStream} stream LocalStream to be published\n * @returns {Promise<void>}\n */\n public async publishStream(mediaType: MediaType, stream: LocalStream): Promise<void> {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.publishStream(stream);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->publishStream#Published stream for ${mediaType} and stream with label ${stream.label} and muted ${stream.muted}`\n );\n }\n\n /**\n * This method unpublishes the stream from the sendSlot of the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot from which a stream needs to be unpublished (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @returns {Promise<void>}\n */\n public async unpublishStream(mediaType: MediaType): Promise<void> {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.unpublishStream();\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->unpublishStream#Unpublished stream for ${mediaType}`\n );\n }\n\n /**\n * This method is used to set the active state of the sendSlot for the given mediaType\n * @param {MediaType} mediaType The MediaType of the sendSlot for which the active state needs to be set (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {boolean} active The boolean to set the active state of the sendSlot. Default is true\n * @returns {void}\n */\n public setActive(mediaType: MediaType, active = true): void {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n slot.active = active;\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->setActive#Set active for ${mediaType} to ${active}`\n );\n }\n\n /**\n * This method is used to set the codec parameters for the sendSlot of the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot for which the codec parameters needs to be set (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {Object} codecParameters\n * @returns {Promise<void>}\n */\n public async setCodecParameters(\n mediaType: MediaType,\n codecParameters: {\n [key: string]: string | undefined; // As per ts-sdp undefined is considered as a valid value to be used for codec parameters\n }\n ): Promise<void> {\n // These codec parameter changes underneath are SDP value changes that are taken care by WCME automatically. So no need for any change in streams from the web sdk side\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.setCodecParameters(codecParameters);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->setCodecParameters#Set codec parameters for ${mediaType} to ${codecParameters}`\n );\n }\n\n /**\n * This method is used to delete the codec parameters for the sendSlot of the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot for which the codec parameters needs to be deleted (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {Array<String>} parameters Array of keys of the codec parameters to be deleted\n * @returns {Promise<void>}\n */\n public async deleteCodecParameters(mediaType: MediaType, parameters: string[]): Promise<void> {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.deleteCodecParameters(parameters);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->deleteCodecParameters#Deleted the following codec parameters -> ${parameters} for ${mediaType}`\n );\n }\n\n /**\n * This method is used to reset the SendSlotsManager by deleting all the sendSlots\n * @returns {undefined}\n */\n public reset(): void {\n this.slots.clear();\n }\n}\n"],"mappings":"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"}
@@ -227,14 +227,16 @@ var Roap = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
227
227
  errorType = _remoteSdp$roapMessag.errorType,
228
228
  errorCause = _remoteSdp$roapMessag.errorCause,
229
229
  headers = _remoteSdp$roapMessag.headers;
230
- roapAnswer = {
231
- seq: answerSeq,
232
- messageType: messageType,
233
- sdp: sdps[0],
234
- errorType: errorType,
235
- errorCause: errorCause,
236
- headers: headers
237
- };
230
+ if (messageType === _constants.ROAP.ROAP_TYPES.ANSWER) {
231
+ roapAnswer = {
232
+ seq: answerSeq,
233
+ messageType: messageType,
234
+ sdp: sdps[0],
235
+ errorType: errorType,
236
+ errorCause: errorCause,
237
+ headers: headers
238
+ };
239
+ }
238
240
  }
239
241
  }
240
242
  if (!roapAnswer) {
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_constants","_loggerProxy","_interopRequireDefault","_request","_turnDiscovery","_metrics","_constants2","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Roap","exports","_StatelessWebexPlugin","_inherits2","_super","attrs","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","roapRequest","RoapRequest","turnDiscovery","TurnDiscovery","_createClass2","key","value","sendRoapOK","_this2","_promise","resolve","then","meeting","webex","meetings","meetingCollection","getByKey","correlationId","roapMessage","messageType","ROAP","ROAP_TYPES","OK","version","ROAP_VERSION","seq","LoggerProxy","logger","log","concat","sendRoap","locusSelfUrl","selfUrl","mediaId","isMultistream","locusMediaRequest","sendRoapAnswer","ANSWER","sdps","sdp","sendRoapError","ERROR","errorType","sendRoapMediaRequest","tieBreaker","OFFER","headers","sendEmptyMediaId","preferTranscoding","_ref","_mediaConnections$","locus","mediaConnections","updateMediaConnections","roapAnswer","remoteSdp","JSON","parse","_remoteSdp$roapMessag","answerSeq","errorCause","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","ROAP_HTTP_RESPONSE_MISSING","doTurnDiscovery","isReconnecting","isForced","generateTurnDiscoveryRequestMessage","handleTurnDiscoveryHttpResponse","httpResponse","abortTurnDiscovery","abort","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport RoapRequest from './request';\nimport TurnDiscovery, {TurnDiscoveryResult} from './turnDiscovery';\nimport Meeting from '../meeting';\nimport MeetingUtil from '../meeting/util';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nexport {\n type TurnDiscoveryResult,\n type TurnServerInfo,\n type TurnDiscoverySkipReason,\n} from './turnDiscovery';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} seq\n * @property {Number} tieBreaker\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: TurnDiscovery;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @memberof Roap\n */\n public sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n });\n });\n }\n\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @memberof Roap\n */\n public sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapError(options) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType: options.errorType,\n seq: options.seq,\n };\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(\n `Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`\n );\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, seq, sdp, tieBreaker} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n // The only time we want to send an empty media id is when we are reconnecting, because this way we tell Locus\n // that it needs to create a new confluence, but when reconnecting we always send TURN_DISCOVERY_REQUEST first,\n // so we don't need to ever send an empty media id here\n const sendEmptyMediaId = false;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n isMultistream: meeting.isMultistream,\n preferTranscoding: !meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n let roapAnswer;\n\n if (mediaConnections?.[0]?.remoteSdp) {\n const remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);\n\n if (remoteSdp.roapMessage) {\n const {\n seq: answerSeq,\n messageType,\n sdps,\n errorType,\n errorCause,\n headers,\n } = remoteSdp.roapMessage;\n\n roapAnswer = {\n seq: answerSeq,\n messageType,\n sdp: sdps[0],\n errorType,\n errorCause,\n headers,\n };\n }\n }\n\n if (!roapAnswer) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {\n correlationId: meeting.correlationId,\n messageType: 'ANSWER',\n isMultistream: meeting.isMultistream,\n });\n }\n\n return {locus, roapAnswer};\n });\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @param {Boolean} [isForced]\n * @returns {Promise}\n */\n doTurnDiscovery(\n meeting: Meeting,\n isReconnecting: boolean,\n isForced?: boolean\n ): Promise<TurnDiscoveryResult> {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting, isForced);\n }\n\n generateTurnDiscoveryRequestMessage(meeting: Meeting, isForced: boolean) {\n return this.turnDiscovery.generateTurnDiscoveryRequestMessage(meeting, isForced);\n }\n\n handleTurnDiscoveryHttpResponse(meeting: Meeting, httpResponse: object) {\n return this.turnDiscovery.handleTurnDiscoveryHttpResponse(meeting, httpResponse);\n }\n\n abortTurnDiscovery() {\n return this.turnDiscovery.abort();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_webexCore","require","_constants","_loggerProxy","_interopRequireDefault","_request","_turnDiscovery","_metrics","_constants2","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Roap","exports","_StatelessWebexPlugin","_inherits2","_super","attrs","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","roapRequest","RoapRequest","turnDiscovery","TurnDiscovery","_createClass2","key","value","sendRoapOK","_this2","_promise","resolve","then","meeting","webex","meetings","meetingCollection","getByKey","correlationId","roapMessage","messageType","ROAP","ROAP_TYPES","OK","version","ROAP_VERSION","seq","LoggerProxy","logger","log","concat","sendRoap","locusSelfUrl","selfUrl","mediaId","isMultistream","locusMediaRequest","sendRoapAnswer","ANSWER","sdps","sdp","sendRoapError","ERROR","errorType","sendRoapMediaRequest","tieBreaker","OFFER","headers","sendEmptyMediaId","preferTranscoding","_ref","_mediaConnections$","locus","mediaConnections","updateMediaConnections","roapAnswer","remoteSdp","JSON","parse","_remoteSdp$roapMessag","answerSeq","errorCause","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","ROAP_HTTP_RESPONSE_MISSING","doTurnDiscovery","isReconnecting","isForced","generateTurnDiscoveryRequestMessage","handleTurnDiscoveryHttpResponse","httpResponse","abortTurnDiscovery","abort","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport RoapRequest from './request';\nimport TurnDiscovery, {TurnDiscoveryResult} from './turnDiscovery';\nimport Meeting from '../meeting';\nimport MeetingUtil from '../meeting/util';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nexport {\n type TurnDiscoveryResult,\n type TurnServerInfo,\n type TurnDiscoverySkipReason,\n} from './turnDiscovery';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} seq\n * @property {Number} tieBreaker\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: TurnDiscovery;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @memberof Roap\n */\n public sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n });\n });\n }\n\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @memberof Roap\n */\n public sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapError(options) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType: options.errorType,\n seq: options.seq,\n };\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(\n `Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`\n );\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, seq, sdp, tieBreaker} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n // The only time we want to send an empty media id is when we are reconnecting, because this way we tell Locus\n // that it needs to create a new confluence, but when reconnecting we always send TURN_DISCOVERY_REQUEST first,\n // so we don't need to ever send an empty media id here\n const sendEmptyMediaId = false;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n isMultistream: meeting.isMultistream,\n preferTranscoding: !meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n let roapAnswer;\n\n if (mediaConnections?.[0]?.remoteSdp) {\n const remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);\n\n if (remoteSdp.roapMessage) {\n const {\n seq: answerSeq,\n messageType,\n sdps,\n errorType,\n errorCause,\n headers,\n } = remoteSdp.roapMessage;\n\n if (messageType === ROAP.ROAP_TYPES.ANSWER) {\n roapAnswer = {\n seq: answerSeq,\n messageType,\n sdp: sdps[0],\n errorType,\n errorCause,\n headers,\n };\n }\n }\n }\n\n if (!roapAnswer) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {\n correlationId: meeting.correlationId,\n messageType: 'ANSWER',\n isMultistream: meeting.isMultistream,\n });\n }\n\n return {locus, roapAnswer};\n });\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @param {Boolean} [isForced]\n * @returns {Promise}\n */\n doTurnDiscovery(\n meeting: Meeting,\n isReconnecting: boolean,\n isForced?: boolean\n ): Promise<TurnDiscoveryResult> {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting, isForced);\n }\n\n generateTurnDiscoveryRequestMessage(meeting: Meeting, isForced: boolean) {\n return this.turnDiscovery.generateTurnDiscoveryRequestMessage(meeting, isForced);\n }\n\n handleTurnDiscoveryHttpResponse(meeting: Meeting, httpResponse: object) {\n return this.turnDiscovery.handleTurnDiscoveryHttpResponse(meeting, httpResponse);\n }\n\n abortTurnDiscovery() {\n return this.turnDiscovery.abort();\n }\n}\n"],"mappings":"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"}
@@ -36,6 +36,11 @@ declare class AnnotationChannel extends WebexPlugin implements IAnnotationChanne
36
36
  * @returns {undefined}
37
37
  */
38
38
  private listenToEvents;
39
+ /**
40
+ * Remove event listeners
41
+ * @returns {undefined}
42
+ */
43
+ deregisterEvents(): void;
39
44
  /**
40
45
  * set locusUrl
41
46
  * @param {string} locusUrl
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Error occurred while the webinar required registration
2
+ * Error occurred while join the webinar
3
3
  */
4
- export default class WebinarRegistrationError extends Error {
4
+ export default class JoinWebinarError extends Error {
5
5
  code: number;
6
6
  error: any;
7
7
  sdkMessage: string;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Error thrown when we try to do multistream, but fail. This error
3
+ * is not exported outside of plugin-meetings, because it's handled
4
+ * internally.
5
+ */
6
+ export default class MultistreamNotSupportedError extends Error {
7
+ code: any;
8
+ error: any;
9
+ sdkMessage: any;
10
+ /**
11
+ *
12
+ * @constructor
13
+ * @param {String} [message]
14
+ * @param {Object} [error]
15
+ */
16
+ constructor(message?: string, error?: any);
17
+ }
@@ -136,6 +136,8 @@ export declare const ICE_FAIL_TIMEOUT = 3000;
136
136
  export declare const RETRY_TIMEOUT = 3000;
137
137
  export declare const ICE_AND_DTLS_CONNECTION_TIMEOUT = 20000;
138
138
  export declare const ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT = 35000;
139
+ export declare const WEBINAR_ERROR_WEBCAST: number[];
140
+ export declare const WEBINAR_ERROR_REGISTRATIONID: number[];
139
141
  export declare const DIALER_REGEX: {
140
142
  SIP_ADDRESS: RegExp;
141
143
  PHONE_NUMBER: RegExp;
@@ -214,6 +216,7 @@ export declare const EVENT_TRIGGERS: {
214
216
  MEETING_SELF_CANNOT_VIEW_PARTICIPANT_LIST: string;
215
217
  MEETING_SELF_IS_SHARING_BLOCKED: string;
216
218
  MEETING_SELF_ROLES_CHANGED: string;
219
+ MEETING_SELF_BRB_UPDATE: string;
217
220
  MEETING_CONTROLS_LAYOUT_UPDATE: string;
218
221
  MEETING_ENTRY_EXIT_TONE_UPDATE: string;
219
222
  MEETING_BREAKOUTS_UPDATE: string;
@@ -236,6 +239,7 @@ export declare const EVENT_TRIGGERS: {
236
239
  MEETING_RECONNECTION_FAILURE: string;
237
240
  MEETING_UNLOCKED: string;
238
241
  MEETING_LOCKED: string;
242
+ MEETING_RESOURCE_LINKS_UPDATE: string;
239
243
  MEETING_INFO_AVAILABLE: string;
240
244
  MEETING_INFO_UPDATED: string;
241
245
  MEETING_LOG_UPLOAD_SUCCESS: string;
@@ -286,6 +290,12 @@ export declare const EVENT_TYPES: {
286
290
  REMOTE_SHARE_AUDIO: string;
287
291
  ERROR: string;
288
292
  };
293
+ export declare const HEADERS: {
294
+ CONTENT_TYPE: string;
295
+ CONTENT_TYPE_VALUE: {
296
+ APPLICATION_JSON: string;
297
+ };
298
+ };
289
299
  export declare const MEETING_REMOVED_REASON: {
290
300
  SELF_REMOVED: string;
291
301
  FULLSTATE_REMOVED: string;
@@ -410,7 +420,12 @@ export declare const ERROR_DICTIONARY: {
410
420
  MESSAGE: string;
411
421
  CODE: number;
412
422
  };
413
- WebinarRegistrationError: {
423
+ JoinWebinarError: {
424
+ NAME: string;
425
+ MESSAGE: string;
426
+ CODE: number;
427
+ };
428
+ MULTISTREAM_NOT_SUPPORTED: {
414
429
  NAME: string;
415
430
  MESSAGE: string;
416
431
  CODE: number;
@@ -578,6 +593,7 @@ export declare const LOCUSINFO: {
578
593
  SELF_IS_SHARING_BLOCKED_CHANGE: string;
579
594
  SELF_MEETING_BREAKOUTS_CHANGED: string;
580
595
  SELF_MEETING_INTERPRETATION_CHANGED: string;
596
+ SELF_MEETING_BRB_CHANGED: string;
581
597
  MEDIA_INACTIVITY: string;
582
598
  LINKS_SERVICES: string;
583
599
  LINKS_RESOURCES: string;
@@ -786,6 +802,7 @@ export declare const DISPLAY_HINTS: {
786
802
  DISABLE_ASK_FOR_HELP: string;
787
803
  DISABLE_BREAKOUT_PREASSIGNMENTS: string;
788
804
  DISABLE_LOBBY_TO_BREAKOUT: string;
805
+ DISABLE_BREAKOUT_START: string;
789
806
  DISABLE_VIEW_THE_PARTICIPANT_LIST: string;
790
807
  ENABLE_VIEW_THE_PARTICIPANT_LIST: string;
791
808
  DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST: string;
@@ -1091,6 +1108,8 @@ export declare const MEETING_INFO_FAILURE_REASON: {
1091
1108
  WRONG_CAPTCHA: string;
1092
1109
  POLICY: string;
1093
1110
  WEBINAR_REGISTRATION: string;
1111
+ NEED_JOIN_WITH_WEBCAST: string;
1112
+ WEBINAR_NEED_REGISTRATIONID: string;
1094
1113
  OTHER: string;
1095
1114
  };
1096
1115
  export declare const BNR_STATUS: {
@@ -3,18 +3,18 @@ import CaptchaError from './common/errors/captcha-error';
3
3
  import IntentToJoinError from './common/errors/intent-to-join';
4
4
  import PasswordError from './common/errors/password-error';
5
5
  import PermissionError from './common/errors/permission';
6
- import WebinarRegistrationError from './common/errors/webinar-registration-error';
6
+ import JoinWebinarError from './common/errors/join-webinar-error';
7
7
  import { ReclaimHostEmptyWrongKeyError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError } from './common/errors/reclaim-host-role-errors';
8
8
  import Meeting from './meeting';
9
9
  import MeetingInfoUtil from './meeting-info/utilv2';
10
10
  import JoinMeetingError from './common/errors/join-meeting';
11
- export { getDevices, LocalStream, LocalDisplayStream, LocalSystemAudioStream, LocalStreamEventNames, StreamEventNames, RemoteStreamEventNames, type ServerMuteReason, LocalMicrophoneStreamEventNames, LocalCameraStreamEventNames, LocalMicrophoneStream, LocalCameraStream, createMicrophoneStream, createCameraStream, createDisplayStream, createDisplayStreamWithAudio, FacingMode, DisplaySurface, PresetCameraConstraints, type VideoContentHint, } from '@webex/media-helpers';
11
+ export { LocalStream, LocalDisplayStream, LocalSystemAudioStream, LocalStreamEventNames, StreamEventNames, RemoteStreamEventNames, type ServerMuteReason, LocalMicrophoneStreamEventNames, LocalCameraStreamEventNames, LocalMicrophoneStream, LocalCameraStream, createMicrophoneStream, createCameraStream, createCameraAndMicrophoneStreams, createDisplayStream, createDisplayStreamWithAudio, createDisplayMedia, FacingMode, DisplaySurface, PresetCameraConstraints, type VideoContentHint, type StreamState, } from '@webex/media-helpers';
12
12
  export default Meetings;
13
13
  export * as CONSTANTS from './constants';
14
14
  export * as REACTIONS from './reactions/reactions';
15
15
  export * as sdkAnnotationTypes from './annotation/annotation.types';
16
16
  export * as MeetingInfoV2 from './meeting-info/meeting-info-v2';
17
17
  export { type Reaction } from './reactions/reactions.type';
18
- export { CaptchaError, IntentToJoinError, JoinMeetingError, PasswordError, PermissionError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError, ReclaimHostEmptyWrongKeyError, Meeting, MeetingInfoUtil, WebinarRegistrationError, };
18
+ export { CaptchaError, IntentToJoinError, JoinMeetingError, PasswordError, PermissionError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError, ReclaimHostEmptyWrongKeyError, Meeting, MeetingInfoUtil, JoinWebinarError, };
19
19
  export { RemoteMedia } from './multistream/remoteMedia';
20
20
  export { default as TriggerProxy } from './common/events/trigger-proxy';
@@ -229,11 +229,12 @@ export default class LocusInfo extends EventsScope {
229
229
  /**
230
230
  * handles when the locus.mediaShares is updated
231
231
  * @param {Object} mediaShares the locus.mediaShares property
232
+ * @param {boolean} forceUpdate force to update the mediaShares
232
233
  * @returns {undefined}
233
234
  * @memberof LocusInfo
234
235
  * emits internal event locus_info_update_media_shares
235
236
  */
236
- updateMediaShares(mediaShares: object): void;
237
+ updateMediaShares(mediaShares: object, forceUpdate?: boolean): void;
237
238
  /**
238
239
  * @param {String} participantsUrl
239
240
  * @returns {undefined}