@webex/plugin-meetings 3.7.0-web-workers-keepalive.1 → 3.7.0-wxcc.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 (49) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/common/errors/join-forbidden-error.js +52 -0
  4. package/dist/common/errors/join-forbidden-error.js.map +1 -0
  5. package/dist/constants.js +22 -2
  6. package/dist/constants.js.map +1 -1
  7. package/dist/interpretation/index.js +1 -1
  8. package/dist/interpretation/siLanguage.js +1 -1
  9. package/dist/locus-info/index.js +1 -1
  10. package/dist/locus-info/index.js.map +1 -1
  11. package/dist/meeting/in-meeting-actions.js +2 -0
  12. package/dist/meeting/in-meeting-actions.js.map +1 -1
  13. package/dist/meeting/index.js +66 -41
  14. package/dist/meeting/index.js.map +1 -1
  15. package/dist/meeting-info/meeting-info-v2.js +70 -19
  16. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  17. package/dist/meeting-info/utilv2.js +1 -1
  18. package/dist/meeting-info/utilv2.js.map +1 -1
  19. package/dist/meetings/index.js +102 -53
  20. package/dist/meetings/index.js.map +1 -1
  21. package/dist/meetings/meetings.types.js +2 -0
  22. package/dist/meetings/meetings.types.js.map +1 -1
  23. package/dist/metrics/constants.js +2 -1
  24. package/dist/metrics/constants.js.map +1 -1
  25. package/dist/types/common/errors/join-forbidden-error.d.ts +15 -0
  26. package/dist/types/constants.d.ts +18 -0
  27. package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
  28. package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
  29. package/dist/types/meetings/index.d.ts +16 -1
  30. package/dist/types/meetings/meetings.types.d.ts +8 -0
  31. package/dist/types/metrics/constants.d.ts +1 -0
  32. package/dist/webinar/index.js +1 -1
  33. package/package.json +22 -22
  34. package/src/common/errors/join-forbidden-error.ts +26 -0
  35. package/src/constants.ts +20 -0
  36. package/src/locus-info/index.ts +3 -1
  37. package/src/meeting/in-meeting-actions.ts +4 -0
  38. package/src/meeting/index.ts +25 -0
  39. package/src/meeting-info/meeting-info-v2.ts +51 -0
  40. package/src/meeting-info/utilv2.ts +3 -1
  41. package/src/meetings/index.ts +72 -19
  42. package/src/meetings/meetings.types.ts +10 -0
  43. package/src/metrics/constants.ts +1 -0
  44. package/test/unit/spec/locus-info/index.js +70 -60
  45. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
  46. package/test/unit/spec/meeting/index.js +42 -5
  47. package/test/unit/spec/meeting-info/meetinginfov2.js +37 -0
  48. package/test/unit/spec/meeting-info/utilv2.js +17 -0
  49. package/test/unit/spec/meetings/index.js +150 -13
@@ -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","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"}
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","JOIN_FORBIDDEN_ERROR"],"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 JOIN_FORBIDDEN_ERROR: 'js_sdk_join_forbidden_error',\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,2BAA2B;EAC/CC,oBAAoB,EAAE;AACxB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Error occurred while join the meeting
3
+ */
4
+ export default class JoinForbiddenError extends Error {
5
+ code: number;
6
+ error: any;
7
+ sdkMessage: string;
8
+ wbxAppApiCode: number;
9
+ /**
10
+ * @constructor
11
+ * @param {String} [message]
12
+ * @param {Object} [error]
13
+ */
14
+ constructor(message?: string, error?: any);
15
+ }
@@ -24,6 +24,7 @@ export declare const ENDED = "ended";
24
24
  export declare const HECATE = "hecate";
25
25
  export declare const HOST = "host";
26
26
  export declare const JOIN = "join";
27
+ export declare const JOIN_LINK_MTID = "MTID";
27
28
  export declare const LEAVE = "leave";
28
29
  export declare const LIVE = "live";
29
30
  export declare const LOCAL = "local";
@@ -75,6 +76,7 @@ export declare const _ON_HOLD_LOBBY_ = "ON_HOLD_LOBBY";
75
76
  export declare const _MEETING_LINK_ = "MEETING_LINK";
76
77
  export declare const _MEETING_UUID_ = "MEETING_UUID";
77
78
  export declare const _MEETING_ = "MEETING";
79
+ export declare const _SPACE_SHARE_ = "SPACE_SHARE";
78
80
  export declare const _MEETING_CENTER_ = "MEETING_CENTER";
79
81
  export declare const _MEETING_ID_ = "MEETING_ID";
80
82
  export declare const _NOT_IN_MEETING_ = "NOT_IN_MEETING";
@@ -138,6 +140,7 @@ export declare const ICE_AND_DTLS_CONNECTION_TIMEOUT = 20000;
138
140
  export declare const ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT = 35000;
139
141
  export declare const WEBINAR_ERROR_WEBCAST: number[];
140
142
  export declare const WEBINAR_ERROR_REGISTRATIONID: number[];
143
+ export declare const JOIN_BEFORE_HOST = 403003;
141
144
  export declare const DIALER_REGEX: {
142
145
  SIP_ADDRESS: RegExp;
143
146
  PHONE_NUMBER: RegExp;
@@ -430,6 +433,11 @@ export declare const ERROR_DICTIONARY: {
430
433
  MESSAGE: string;
431
434
  CODE: number;
432
435
  };
436
+ JoinForbiddenError: {
437
+ NAME: string;
438
+ MESSAGE: string;
439
+ CODE: number;
440
+ };
433
441
  };
434
442
  export declare const FLOOR_ACTION: {
435
443
  GRANTED: string;
@@ -1110,6 +1118,8 @@ export declare const MEETING_INFO_FAILURE_REASON: {
1110
1118
  WEBINAR_REGISTRATION: string;
1111
1119
  NEED_JOIN_WITH_WEBCAST: string;
1112
1120
  WEBINAR_NEED_REGISTRATIONID: string;
1121
+ NOT_REACH_JBH: string;
1122
+ JOIN_FORBIDDEN: string;
1113
1123
  OTHER: string;
1114
1124
  };
1115
1125
  export declare const BNR_STATUS: {
@@ -1157,3 +1167,11 @@ export declare const DESTINATION_TYPE: {
1157
1167
  readonly MEETING_UUID: "MEETING_UUID";
1158
1168
  };
1159
1169
  export type DESTINATION_TYPE = Enum<typeof DESTINATION_TYPE>;
1170
+ export declare const INITIAL_REGISTRATION_STATUS: {
1171
+ fetchWebexSite: boolean;
1172
+ getGeoHint: boolean;
1173
+ startReachability: boolean;
1174
+ deviceRegister: boolean;
1175
+ mercuryConnect: boolean;
1176
+ checkH264Support: boolean;
1177
+ };
@@ -43,6 +43,7 @@ interface IInMeetingActions {
43
43
  waitingForOthersToJoin?: boolean;
44
44
  canSendReactions?: boolean;
45
45
  canManageBreakout?: boolean;
46
+ canStartBreakout?: boolean;
46
47
  canBroadcastMessageToBreakout?: boolean;
47
48
  canAdmitLobbyToBreakout?: boolean;
48
49
  isBreakoutPreassignmentsEnabled?: boolean;
@@ -137,6 +138,7 @@ export default class InMeetingActions implements IInMeetingActions {
137
138
  waitingForOthersToJoin: any;
138
139
  canSendReactions: any;
139
140
  canManageBreakout: any;
141
+ canStartBreakout: any;
140
142
  canBroadcastMessageToBreakout: any;
141
143
  canAdmitLobbyToBreakout: any;
142
144
  isBreakoutPreassignmentsEnabled: any;
@@ -81,6 +81,23 @@ export declare class MeetingInfoV2JoinWebinarError extends Error {
81
81
  */
82
82
  constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message?: string);
83
83
  }
84
+ /**
85
+ * Error preventing join because of a forbidden error
86
+ */
87
+ export declare class MeetingInfoV2JoinForbiddenError extends Error {
88
+ meetingInfo: any;
89
+ sdkMessage: any;
90
+ wbxAppApiCode: any;
91
+ body: any;
92
+ /**
93
+ *
94
+ * @constructor
95
+ * @param {Number} [wbxAppApiErrorCode]
96
+ * @param {Object} [meetingInfo]
97
+ * @param {String} [message]
98
+ */
99
+ constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message?: string);
100
+ }
84
101
  /**
85
102
  * @class MeetingInfo
86
103
  */
@@ -112,6 +129,12 @@ export default class MeetingInfoV2 {
112
129
  * @returns {void}
113
130
  */
114
131
  handleJoinWebinarError: (err: any) => void;
132
+ /**
133
+ * Raises a handleForbiddenError for join meeting forbidden error
134
+ * @param {any} err the error from the request
135
+ * @returns {void}
136
+ */
137
+ handleForbiddenError: (err: any) => void;
115
138
  /**
116
139
  * Creates adhoc space meetings for a space by fetching the conversation infomation
117
140
  * @param {String} conversationUrl conversationUrl to start adhoc meeting on
@@ -8,7 +8,7 @@ import 'webrtc-adapter';
8
8
  import { DESTINATION_TYPE } from '../constants';
9
9
  import { CallStateForMetrics } from '../meeting';
10
10
  import Reachability from '../reachability';
11
- import { INoiseReductionEffect, IVirtualBackgroundEffect } from './meetings.types';
11
+ import { INoiseReductionEffect, IVirtualBackgroundEffect, MeetingRegistrationStatus } from './meetings.types';
12
12
  /**
13
13
  * Meetings Ready Event
14
14
  * Emitted when the meetings instance on webex is ready
@@ -94,6 +94,7 @@ export default class Meetings extends WebexPlugin {
94
94
  mediaHelpers: any;
95
95
  breakoutLocusForHandleLater: any;
96
96
  namespace: string;
97
+ registrationStatus: MeetingRegistrationStatus;
97
98
  /**
98
99
  * Initializes the Meetings Plugin
99
100
  * @constructor
@@ -178,6 +179,13 @@ export default class Meetings extends WebexPlugin {
178
179
  * @memberof Meetings
179
180
  */
180
181
  private onReady;
182
+ /**
183
+ * API to change log upload interval. Setting the factor to 0 will disable periodic log uploads.
184
+ *
185
+ * @param {number} factor new factor value
186
+ * @returns {void}
187
+ */
188
+ private _setLogUploadIntervalMultiplicationFactor;
181
189
  /**
182
190
  * API to toggle unified meetings
183
191
  * @param {Boolean} changeState
@@ -219,6 +227,13 @@ export default class Meetings extends WebexPlugin {
219
227
  * @returns {undefined}
220
228
  */
221
229
  private _toggleIpv6BackendNativeSupport;
230
+ /**
231
+ * Executes a registration step and updates the registration status.
232
+ * @param {Function} step - The registration step to execute.
233
+ * @param {string} stepName - The name of the registration step.
234
+ * @returns {Promise} A promise that resolves when the step is completed.
235
+ */
236
+ executeRegistrationStep(step: () => Promise<any>, stepName: string): Promise<void>;
222
237
  /**
223
238
  * Explicitly sets up the meetings plugin by registering
224
239
  * the device, connecting to mercury, and listening for locus events.
@@ -11,3 +11,11 @@ export declare const MEETING_KEY: {
11
11
  readonly CORRELATION_ID: "correlationId";
12
12
  };
13
13
  export type MEETING_KEY = Enum<typeof MEETING_KEY>;
14
+ export type MeetingRegistrationStatus = {
15
+ fetchWebexSite: boolean;
16
+ getGeoHint: boolean;
17
+ startReachability: boolean;
18
+ deviceRegister: boolean;
19
+ mercuryConnect: boolean;
20
+ checkH264Support: boolean;
21
+ };
@@ -70,5 +70,6 @@ declare const BEHAVIORAL_METRICS: {
70
70
  JOIN_WEBINAR_ERROR: string;
71
71
  GUEST_ENTERED_LOBBY: string;
72
72
  GUEST_EXITED_LOBBY: string;
73
+ JOIN_FORBIDDEN_ERROR: string;
73
74
  };
74
75
  export { BEHAVIORAL_METRICS as default };
@@ -458,7 +458,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
458
458
  }, _callee7);
459
459
  }))();
460
460
  },
461
- version: "3.7.0-web-workers-keepalive.1"
461
+ version: "3.7.0-wxcc.1"
462
462
  });
463
463
  var _default = exports.default = Webinar;
464
464
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -43,13 +43,13 @@
43
43
  "@webex/eslint-config-legacy": "0.0.0",
44
44
  "@webex/jest-config-legacy": "0.0.0",
45
45
  "@webex/legacy-tools": "0.0.0",
46
- "@webex/plugin-meetings": "3.7.0-web-workers-keepalive.1",
47
- "@webex/plugin-rooms": "3.7.0-web-workers-keepalive.1",
48
- "@webex/test-helper-chai": "3.7.0-web-workers-keepalive.1",
49
- "@webex/test-helper-mocha": "3.7.0-web-workers-keepalive.1",
50
- "@webex/test-helper-mock-webex": "3.7.0-web-workers-keepalive.1",
51
- "@webex/test-helper-retry": "3.7.0-web-workers-keepalive.1",
52
- "@webex/test-helper-test-users": "3.7.0-web-workers-keepalive.1",
46
+ "@webex/plugin-meetings": "3.7.0-wxcc.1",
47
+ "@webex/plugin-rooms": "3.7.0-wxcc.1",
48
+ "@webex/test-helper-chai": "3.7.0-wxcc.1",
49
+ "@webex/test-helper-mocha": "3.7.0-wxcc.1",
50
+ "@webex/test-helper-mock-webex": "3.7.0-wxcc.1",
51
+ "@webex/test-helper-retry": "3.7.0-wxcc.1",
52
+ "@webex/test-helper-test-users": "3.7.0-wxcc.1",
53
53
  "chai": "^4.3.4",
54
54
  "chai-as-promised": "^7.1.1",
55
55
  "eslint": "^8.24.0",
@@ -61,22 +61,22 @@
61
61
  "typescript": "^4.7.4"
62
62
  },
63
63
  "dependencies": {
64
- "@webex/common": "3.7.0-web-workers-keepalive.1",
64
+ "@webex/common": "3.7.0-wxcc.1",
65
65
  "@webex/event-dictionary-ts": "^1.0.1643",
66
- "@webex/internal-media-core": "2.14.0",
67
- "@webex/internal-plugin-conversation": "3.7.0-web-workers-keepalive.1",
68
- "@webex/internal-plugin-device": "3.7.0-web-workers-keepalive.1",
69
- "@webex/internal-plugin-llm": "3.7.0-web-workers-keepalive.1",
70
- "@webex/internal-plugin-mercury": "3.7.0-web-workers-keepalive.1",
71
- "@webex/internal-plugin-metrics": "3.7.0-web-workers-keepalive.1",
72
- "@webex/internal-plugin-support": "3.7.0-web-workers-keepalive.1",
73
- "@webex/internal-plugin-user": "3.7.0-web-workers-keepalive.1",
74
- "@webex/internal-plugin-voicea": "3.7.0-web-workers-keepalive.1",
75
- "@webex/media-helpers": "3.7.0-web-workers-keepalive.1",
76
- "@webex/plugin-people": "3.7.0-web-workers-keepalive.1",
77
- "@webex/plugin-rooms": "3.7.0-web-workers-keepalive.1",
66
+ "@webex/internal-media-core": "2.14.2",
67
+ "@webex/internal-plugin-conversation": "3.7.0-wxcc.1",
68
+ "@webex/internal-plugin-device": "3.7.0-wxcc.1",
69
+ "@webex/internal-plugin-llm": "3.7.0-wxcc.1",
70
+ "@webex/internal-plugin-mercury": "3.7.0-wxcc.1",
71
+ "@webex/internal-plugin-metrics": "3.7.0-wxcc.1",
72
+ "@webex/internal-plugin-support": "3.7.0-wxcc.1",
73
+ "@webex/internal-plugin-user": "3.7.0-wxcc.1",
74
+ "@webex/internal-plugin-voicea": "3.7.0-wxcc.1",
75
+ "@webex/media-helpers": "3.7.0-wxcc.1",
76
+ "@webex/plugin-people": "3.7.0-wxcc.1",
77
+ "@webex/plugin-rooms": "3.7.0-wxcc.1",
78
78
  "@webex/web-capabilities": "^1.4.0",
79
- "@webex/webex-core": "3.7.0-web-workers-keepalive.1",
79
+ "@webex/webex-core": "3.7.0-wxcc.1",
80
80
  "ampersand-collection": "^2.0.2",
81
81
  "bowser": "^2.11.0",
82
82
  "btoa": "^1.2.1",
@@ -92,5 +92,5 @@
92
92
  "//": [
93
93
  "TODO: upgrade jwt-decode when moving to node 18"
94
94
  ],
95
- "version": "3.7.0-web-workers-keepalive.1"
95
+ "version": "3.7.0-wxcc.1"
96
96
  }
@@ -0,0 +1,26 @@
1
+ import {ERROR_DICTIONARY} from '../../constants';
2
+
3
+ /**
4
+ * Error occurred while join the meeting
5
+ */
6
+ export default class JoinForbiddenError extends Error {
7
+ code: number;
8
+ error: any;
9
+ sdkMessage: string;
10
+ wbxAppApiCode: number;
11
+
12
+ /**
13
+ * @constructor
14
+ * @param {String} [message]
15
+ * @param {Object} [error]
16
+ */
17
+ constructor(message: string = ERROR_DICTIONARY.JoinForbiddenError.MESSAGE, error: any = null) {
18
+ super(message);
19
+ this.name = ERROR_DICTIONARY.JoinForbiddenError.NAME;
20
+ this.sdkMessage = message;
21
+ this.error = error;
22
+ this.stack = error ? error.stack : new Error().stack;
23
+ this.code = ERROR_DICTIONARY.JoinForbiddenError.CODE;
24
+ this.wbxAppApiCode = error?.wbxAppApiCode;
25
+ }
26
+ }
package/src/constants.ts CHANGED
@@ -36,6 +36,8 @@ export const HOST = 'host';
36
36
 
37
37
  export const JOIN = 'join';
38
38
 
39
+ export const JOIN_LINK_MTID = 'MTID';
40
+
39
41
  export const LEAVE = 'leave';
40
42
  export const LIVE = 'live';
41
43
  export const LOCAL = 'local';
@@ -104,6 +106,7 @@ export const _ON_HOLD_LOBBY_ = 'ON_HOLD_LOBBY';
104
106
  export const _MEETING_LINK_ = 'MEETING_LINK';
105
107
  export const _MEETING_UUID_ = 'MEETING_UUID';
106
108
  export const _MEETING_ = 'MEETING';
109
+ export const _SPACE_SHARE_ = 'SPACE_SHARE';
107
110
  export const _MEETING_CENTER_ = 'MEETING_CENTER';
108
111
  export const _MEETING_ID_ = 'MEETING_ID';
109
112
 
@@ -200,6 +203,7 @@ export const ICE_AND_DTLS_CONNECTION_TIMEOUT = 20000;
200
203
  export const ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT = 35000;
201
204
  export const WEBINAR_ERROR_WEBCAST = [403026];
202
205
  export const WEBINAR_ERROR_REGISTRATIONID = [403037, 403137];
206
+ export const JOIN_BEFORE_HOST = 403003;
203
207
 
204
208
  // ******************** REGEX **********************
205
209
  // Please alphabetize
@@ -550,6 +554,11 @@ export const ERROR_DICTIONARY = {
550
554
  MESSAGE: 'Client asked for multistream backend (Homer), but got something else instead',
551
555
  CODE: 17,
552
556
  },
557
+ JoinForbiddenError: {
558
+ NAME: 'JoinForbiddenError',
559
+ MESSAGE: 'Meeting join forbidden.',
560
+ CODE: 18,
561
+ },
553
562
  };
554
563
 
555
564
  export const FLOOR_ACTION = {
@@ -1330,6 +1339,8 @@ export const MEETING_INFO_FAILURE_REASON = {
1330
1339
  WEBINAR_REGISTRATION: 'WEBINAR_REGISTRATION', // webinar need registration
1331
1340
  NEED_JOIN_WITH_WEBCAST: 'NEED_JOIN_WITH_WEBCAST', // webinar need using webcast join
1332
1341
  WEBINAR_NEED_REGISTRATIONID: 'WEBINAR_NEED_REGISTRATIONID', // webinar need registrationID
1342
+ NOT_REACH_JBH: 'NOT_REACH_JBH', // Meeting is not allow to access since not reach JBH (join before host) time
1343
+ JOIN_FORBIDDEN: 'JOIN_FORBIDDEN', // meeting is not allow join
1333
1344
  OTHER: 'OTHER', // any other error (network, etc)
1334
1345
  };
1335
1346
 
@@ -1389,3 +1400,12 @@ export const DESTINATION_TYPE = {
1389
1400
  } as const;
1390
1401
 
1391
1402
  export type DESTINATION_TYPE = Enum<typeof DESTINATION_TYPE>;
1403
+
1404
+ export const INITIAL_REGISTRATION_STATUS = {
1405
+ fetchWebexSite: false,
1406
+ getGeoHint: false,
1407
+ startReachability: false,
1408
+ deviceRegister: false,
1409
+ mercuryConnect: false,
1410
+ checkH264Support: false,
1411
+ };
@@ -10,6 +10,7 @@ import {
10
10
  _SIP_BRIDGE_,
11
11
  MEETING_STATE,
12
12
  _MEETING_,
13
+ _SPACE_SHARE_,
13
14
  LOCUSINFO,
14
15
  LOCUS,
15
16
  _LEFT_,
@@ -489,7 +490,8 @@ export default class LocusInfo extends EventsScope {
489
490
  isMeetingActive() {
490
491
  if (
491
492
  this.parsedLocus.fullState.type === _CALL_ ||
492
- this.parsedLocus.fullState.type === _SIP_BRIDGE_
493
+ this.parsedLocus.fullState.type === _SIP_BRIDGE_ ||
494
+ this.parsedLocus.fullState.type === _SPACE_SHARE_
493
495
  ) {
494
496
  // @ts-ignore
495
497
  const partner = this.getLocusPartner(this.participants, this.self);
@@ -47,6 +47,7 @@ interface IInMeetingActions {
47
47
  waitingForOthersToJoin?: boolean;
48
48
  canSendReactions?: boolean;
49
49
  canManageBreakout?: boolean;
50
+ canStartBreakout?: boolean;
50
51
  canBroadcastMessageToBreakout?: boolean;
51
52
  canAdmitLobbyToBreakout?: boolean;
52
53
  isBreakoutPreassignmentsEnabled?: boolean;
@@ -180,6 +181,8 @@ export default class InMeetingActions implements IInMeetingActions {
180
181
 
181
182
  canManageBreakout = null;
182
183
 
184
+ canStartBreakout = null;
185
+
183
186
  canBroadcastMessageToBreakout = null;
184
187
 
185
188
  canAdmitLobbyToBreakout = null;
@@ -324,6 +327,7 @@ export default class InMeetingActions implements IInMeetingActions {
324
327
  waitingForOthersToJoin: this.waitingForOthersToJoin,
325
328
  canSendReactions: this.canSendReactions,
326
329
  canManageBreakout: this.canManageBreakout,
330
+ canStartBreakout: this.canStartBreakout,
327
331
  canBroadcastMessageToBreakout: this.canBroadcastMessageToBreakout,
328
332
  canAdmitLobbyToBreakout: this.canAdmitLobbyToBreakout,
329
333
  isBreakoutPreassignmentsEnabled: this.isBreakoutPreassignmentsEnabled,
@@ -123,6 +123,7 @@ import {
123
123
  NAMED_MEDIA_GROUP_TYPE_AUDIO,
124
124
  WEBINAR_ERROR_WEBCAST,
125
125
  WEBINAR_ERROR_REGISTRATIONID,
126
+ JOIN_BEFORE_HOST,
126
127
  } from '../constants';
127
128
  import BEHAVIORAL_METRICS from '../metrics/constants';
128
129
  import ParameterError from '../common/errors/parameter';
@@ -131,6 +132,7 @@ import {
131
132
  MeetingInfoV2CaptchaError,
132
133
  MeetingInfoV2PolicyError,
133
134
  MeetingInfoV2JoinWebinarError,
135
+ MeetingInfoV2JoinForbiddenError,
134
136
  } from '../meeting-info/meeting-info-v2';
135
137
  import {CSI, ReceiveSlotManager} from '../multistream/receiveSlotManager';
136
138
  import SendSlotManager from '../multistream/sendSlotManager';
@@ -162,6 +164,7 @@ import {ConnectionStateHandler, ConnectionStateEvent} from './connectionStateHan
162
164
  import JoinWebinarError from '../common/errors/join-webinar-error';
163
165
  import Member from '../member';
164
166
  import MultistreamNotSupportedError from '../common/errors/multistream-not-supported-error';
167
+ import JoinForbiddenError from '../common/errors/join-forbidden-error';
165
168
 
166
169
  // default callback so we don't call an undefined function, but in practice it should never be used
167
170
  const DEFAULT_ICE_PHASE_CALLBACK = () => 'JOIN_MEETING_FINAL';
@@ -1784,6 +1787,20 @@ export default class Meeting extends StatelessWebexPlugin {
1784
1787
  }
1785
1788
 
1786
1789
  throw new JoinWebinarError();
1790
+ } else if (err instanceof MeetingInfoV2JoinForbiddenError) {
1791
+ this.meetingInfoFailureReason = MEETING_INFO_FAILURE_REASON.JOIN_FORBIDDEN;
1792
+ this.meetingInfoFailureCode = err.wbxAppApiCode;
1793
+
1794
+ if (err.meetingInfo) {
1795
+ this.meetingInfo = err.meetingInfo;
1796
+ }
1797
+
1798
+ // Handle the case where user hasn't reached Join Before Host (JBH) time (error code 403003)
1799
+ if (JOIN_BEFORE_HOST === err.wbxAppApiCode) {
1800
+ this.meetingInfoFailureReason = MEETING_INFO_FAILURE_REASON.NOT_REACH_JBH;
1801
+ }
1802
+
1803
+ throw new JoinForbiddenError(this.meetingInfoFailureReason, err);
1787
1804
  } else if (err instanceof MeetingInfoV2PasswordError) {
1788
1805
  LoggerProxy.logger.info(
1789
1806
  // @ts-ignore
@@ -3890,6 +3907,7 @@ export default class Meeting extends StatelessWebexPlugin {
3890
3907
  this.userDisplayHints
3891
3908
  ),
3892
3909
  canManageBreakout: MeetingUtil.canManageBreakout(this.userDisplayHints),
3910
+ canStartBreakout: MeetingUtil.canStartBreakout(this.userDisplayHints),
3893
3911
  canBroadcastMessageToBreakout: MeetingUtil.canBroadcastMessageToBreakout(
3894
3912
  this.userDisplayHints,
3895
3913
  this.selfUserPolicies
@@ -4646,6 +4664,7 @@ export default class Meeting extends StatelessWebexPlugin {
4646
4664
 
4647
4665
  this.receiveSlotManager.reset();
4648
4666
  this.mediaProperties.webrtcMediaConnection.close();
4667
+ this.mediaProperties.unsetPeerConnection();
4649
4668
  this.sendSlotManager.reset();
4650
4669
  this.setNetworkStatus(undefined);
4651
4670
  }
@@ -8573,6 +8592,12 @@ export default class Meeting extends StatelessWebexPlugin {
8573
8592
  correlationId: this.correlationId,
8574
8593
  muted,
8575
8594
  encoderImplementation: this.statsAnalyzer?.shareVideoEncoderImplementation,
8595
+ // TypeScript 4 does not recognize the `displaySurface` property. Instead of upgrading the
8596
+ // SDK to TypeScript 5, which may affect other packages, use bracket notation for now, since
8597
+ // all we're doing here is adding metrics.
8598
+ // eslint-disable-next-line dot-notation
8599
+ displaySurface: this.mediaProperties?.shareVideoStream?.getSettings()['displaySurface'],
8600
+ isMultistream: this.isMultistream,
8576
8601
  });
8577
8602
  };
8578
8603
 
@@ -18,6 +18,7 @@ const ADHOC_MEETING_DEFAULT_ERROR =
18
18
  'Failed starting the adhoc meeting, Please contact support team ';
19
19
  const CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES = [423005, 423006];
20
20
  const POLICY_ERROR_CODES = [403049, 403104, 403103, 403048, 403102, 403101];
21
+ const JOIN_FORBIDDEN_CODES = [403003];
21
22
  /**
22
23
  * 403021 - Meeting registration is required
23
24
  * 403022 - Meeting registration is still pending
@@ -162,6 +163,31 @@ export class MeetingInfoV2JoinWebinarError extends Error {
162
163
  }
163
164
  }
164
165
 
166
+ /**
167
+ * Error preventing join because of a forbidden error
168
+ */
169
+ export class MeetingInfoV2JoinForbiddenError extends Error {
170
+ meetingInfo: any;
171
+ sdkMessage: any;
172
+ wbxAppApiCode: any;
173
+ body: any;
174
+ /**
175
+ *
176
+ * @constructor
177
+ * @param {Number} [wbxAppApiErrorCode]
178
+ * @param {Object} [meetingInfo]
179
+ * @param {String} [message]
180
+ */
181
+ constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message?: string) {
182
+ super(`${message}, code=${wbxAppApiErrorCode}`);
183
+ this.name = 'MeetingInfoV2JoinForbiddenError';
184
+ this.sdkMessage = message;
185
+ this.stack = new Error().stack;
186
+ this.wbxAppApiCode = wbxAppApiErrorCode;
187
+ this.meetingInfo = meetingInfo;
188
+ }
189
+ }
190
+
165
191
  /**
166
192
  * @class MeetingInfo
167
193
  */
@@ -238,6 +264,29 @@ export default class MeetingInfoV2 {
238
264
  }
239
265
  };
240
266
 
267
+ /**
268
+ * Raises a handleForbiddenError for join meeting forbidden error
269
+ * @param {any} err the error from the request
270
+ * @returns {void}
271
+ */
272
+ handleForbiddenError = (err) => {
273
+ if (!err.body) {
274
+ return;
275
+ }
276
+
277
+ if (JOIN_FORBIDDEN_CODES.includes(err.body?.code)) {
278
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.JOIN_FORBIDDEN_ERROR, {
279
+ code: err.body?.code,
280
+ });
281
+
282
+ throw new MeetingInfoV2JoinForbiddenError(
283
+ err.body?.code,
284
+ err.body?.data?.meetingInfo,
285
+ err.body?.message
286
+ );
287
+ }
288
+ };
289
+
241
290
  /**
242
291
  * Creates adhoc space meetings for a space by fetching the conversation infomation
243
292
  * @param {String} conversationUrl conversationUrl to start adhoc meeting on
@@ -299,6 +348,7 @@ export default class MeetingInfoV2 {
299
348
  .catch((err) => {
300
349
  this.handlePolicyError(err);
301
350
  this.handleJoinWebinarError(err);
351
+ this.handleForbiddenError(err);
302
352
 
303
353
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_FAILURE, {
304
354
  reason: err.message,
@@ -454,6 +504,7 @@ export default class MeetingInfoV2 {
454
504
  if (err?.statusCode === 403) {
455
505
  this.handlePolicyError(err);
456
506
  this.handleJoinWebinarError(err);
507
+ this.handleForbiddenError(err);
457
508
 
458
509
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR, {
459
510
  reason: err.message,
@@ -19,6 +19,7 @@ import {
19
19
  UUID_REG,
20
20
  VALID_EMAIL_ADDRESS,
21
21
  DEFAULT_MEETING_INFO_REQUEST_BODY,
22
+ JOIN_LINK_MTID,
22
23
  } from '../constants';
23
24
  import ParameterError from '../common/errors/parameter';
24
25
  import LoggerProxy from '../common/logs/logger-proxy';
@@ -70,7 +71,8 @@ export default class MeetingInfoUtil {
70
71
  parsedUrl.pathname.includes(`/${MEET_M}`) ||
71
72
  parsedUrl.pathname.includes(`/${MEET_CISCO}`) ||
72
73
  parsedUrl.pathname.includes(`/${MEET_CO}`) ||
73
- parsedUrl.pathname.includes(`/${JOIN}`));
74
+ parsedUrl.pathname.includes(`/${JOIN}`) ||
75
+ (parsedUrl.search && parsedUrl.search.includes(JOIN_LINK_MTID)));
74
76
  }
75
77
 
76
78
  return hostNameBool && pathNameBool;