@webex/plugin-meetings 3.7.0-next.52 → 3.7.0-next.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/join-forbidden-error.js +52 -0
- package/dist/common/errors/join-forbidden-error.js.map +1 -0
- package/dist/constants.js +12 -2
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.js +25 -8
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +70 -19
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meetings/index.js +2 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/types/common/errors/join-forbidden-error.d.ts +15 -0
- package/dist/types/constants.d.ts +8 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +3 -3
- package/src/common/errors/join-forbidden-error.ts +26 -0
- package/src/constants.ts +8 -0
- package/src/meeting/index.ts +17 -0
- package/src/meeting-info/meeting-info-v2.ts +51 -0
- package/src/meetings/index.ts +3 -1
- package/src/metrics/constants.ts +1 -0
- package/test/unit/spec/meeting/index.js +34 -1
- package/test/unit/spec/meeting-info/meetinginfov2.js +37 -0
- package/test/unit/spec/meetings/index.js +6 -0
|
@@ -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;
|
|
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
|
+
}
|
|
@@ -140,6 +140,7 @@ export declare const ICE_AND_DTLS_CONNECTION_TIMEOUT = 20000;
|
|
|
140
140
|
export declare const ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT = 35000;
|
|
141
141
|
export declare const WEBINAR_ERROR_WEBCAST: number[];
|
|
142
142
|
export declare const WEBINAR_ERROR_REGISTRATIONID: number[];
|
|
143
|
+
export declare const JOIN_BEFORE_HOST = 403003;
|
|
143
144
|
export declare const DIALER_REGEX: {
|
|
144
145
|
SIP_ADDRESS: RegExp;
|
|
145
146
|
PHONE_NUMBER: RegExp;
|
|
@@ -432,6 +433,11 @@ export declare const ERROR_DICTIONARY: {
|
|
|
432
433
|
MESSAGE: string;
|
|
433
434
|
CODE: number;
|
|
434
435
|
};
|
|
436
|
+
JoinForbiddenError: {
|
|
437
|
+
NAME: string;
|
|
438
|
+
MESSAGE: string;
|
|
439
|
+
CODE: number;
|
|
440
|
+
};
|
|
435
441
|
};
|
|
436
442
|
export declare const FLOOR_ACTION: {
|
|
437
443
|
GRANTED: string;
|
|
@@ -1112,6 +1118,8 @@ export declare const MEETING_INFO_FAILURE_REASON: {
|
|
|
1112
1118
|
WEBINAR_REGISTRATION: string;
|
|
1113
1119
|
NEED_JOIN_WITH_WEBCAST: string;
|
|
1114
1120
|
WEBINAR_NEED_REGISTRATIONID: string;
|
|
1121
|
+
NOT_REACH_JBH: string;
|
|
1122
|
+
JOIN_FORBIDDEN: string;
|
|
1115
1123
|
OTHER: string;
|
|
1116
1124
|
};
|
|
1117
1125
|
export declare const BNR_STATUS: {
|
|
@@ -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
|
package/dist/webinar/index.js
CHANGED
package/package.json
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
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-next.
|
|
46
|
+
"@webex/plugin-meetings": "3.7.0-next.53",
|
|
47
47
|
"@webex/plugin-rooms": "3.7.0-next.20",
|
|
48
48
|
"@webex/test-helper-chai": "3.7.0-next.15",
|
|
49
49
|
"@webex/test-helper-mocha": "3.7.0-next.15",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"@webex/internal-plugin-metrics": "3.7.0-next.15",
|
|
72
72
|
"@webex/internal-plugin-support": "3.7.0-next.21",
|
|
73
73
|
"@webex/internal-plugin-user": "3.7.0-next.15",
|
|
74
|
-
"@webex/internal-plugin-voicea": "3.7.0-next.
|
|
74
|
+
"@webex/internal-plugin-voicea": "3.7.0-next.53",
|
|
75
75
|
"@webex/media-helpers": "3.7.0-next.20",
|
|
76
76
|
"@webex/plugin-people": "3.7.0-next.18",
|
|
77
77
|
"@webex/plugin-rooms": "3.7.0-next.20",
|
|
@@ -92,5 +92,5 @@
|
|
|
92
92
|
"//": [
|
|
93
93
|
"TODO: upgrade jwt-decode when moving to node 18"
|
|
94
94
|
],
|
|
95
|
-
"version": "3.7.0-next.
|
|
95
|
+
"version": "3.7.0-next.53"
|
|
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
|
@@ -203,6 +203,7 @@ export const ICE_AND_DTLS_CONNECTION_TIMEOUT = 20000;
|
|
|
203
203
|
export const ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT = 35000;
|
|
204
204
|
export const WEBINAR_ERROR_WEBCAST = [403026];
|
|
205
205
|
export const WEBINAR_ERROR_REGISTRATIONID = [403037, 403137];
|
|
206
|
+
export const JOIN_BEFORE_HOST = 403003;
|
|
206
207
|
|
|
207
208
|
// ******************** REGEX **********************
|
|
208
209
|
// Please alphabetize
|
|
@@ -553,6 +554,11 @@ export const ERROR_DICTIONARY = {
|
|
|
553
554
|
MESSAGE: 'Client asked for multistream backend (Homer), but got something else instead',
|
|
554
555
|
CODE: 17,
|
|
555
556
|
},
|
|
557
|
+
JoinForbiddenError: {
|
|
558
|
+
NAME: 'JoinForbiddenError',
|
|
559
|
+
MESSAGE: 'Meeting join forbidden.',
|
|
560
|
+
CODE: 18,
|
|
561
|
+
},
|
|
556
562
|
};
|
|
557
563
|
|
|
558
564
|
export const FLOOR_ACTION = {
|
|
@@ -1333,6 +1339,8 @@ export const MEETING_INFO_FAILURE_REASON = {
|
|
|
1333
1339
|
WEBINAR_REGISTRATION: 'WEBINAR_REGISTRATION', // webinar need registration
|
|
1334
1340
|
NEED_JOIN_WITH_WEBCAST: 'NEED_JOIN_WITH_WEBCAST', // webinar need using webcast join
|
|
1335
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
|
|
1336
1344
|
OTHER: 'OTHER', // any other error (network, etc)
|
|
1337
1345
|
};
|
|
1338
1346
|
|
package/src/meeting/index.ts
CHANGED
|
@@ -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
|
|
@@ -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,
|
package/src/meetings/index.ts
CHANGED
|
@@ -65,6 +65,7 @@ import PermissionError from '../common/errors/permission';
|
|
|
65
65
|
import JoinWebinarError from '../common/errors/join-webinar-error';
|
|
66
66
|
import {SpaceIDDeprecatedError} from '../common/errors/webex-errors';
|
|
67
67
|
import NoMeetingInfoError from '../common/errors/no-meeting-info';
|
|
68
|
+
import JoinForbiddenError from '../common/errors/join-forbidden-error';
|
|
68
69
|
|
|
69
70
|
let mediaLogger;
|
|
70
71
|
|
|
@@ -1463,7 +1464,8 @@ export default class Meetings extends WebexPlugin {
|
|
|
1463
1464
|
!(err instanceof CaptchaError) &&
|
|
1464
1465
|
!(err instanceof PasswordError) &&
|
|
1465
1466
|
!(err instanceof PermissionError) &&
|
|
1466
|
-
!(err instanceof JoinWebinarError)
|
|
1467
|
+
!(err instanceof JoinWebinarError) &&
|
|
1468
|
+
!(err instanceof JoinForbiddenError)
|
|
1467
1469
|
) {
|
|
1468
1470
|
LoggerProxy.logger.info(
|
|
1469
1471
|
`Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`
|
package/src/metrics/constants.ts
CHANGED
|
@@ -73,6 +73,7 @@ const BEHAVIORAL_METRICS = {
|
|
|
73
73
|
JOIN_WEBINAR_ERROR: 'js_sdk_join_webinar_error',
|
|
74
74
|
GUEST_ENTERED_LOBBY: 'js_sdk_guest_entered_lobby',
|
|
75
75
|
GUEST_EXITED_LOBBY: 'js_sdk_guest_exited_lobby',
|
|
76
|
+
JOIN_FORBIDDEN_ERROR: 'js_sdk_join_forbidden_error',
|
|
76
77
|
};
|
|
77
78
|
|
|
78
79
|
export {BEHAVIORAL_METRICS as default};
|
|
@@ -99,7 +99,7 @@ import {
|
|
|
99
99
|
MeetingInfoV2CaptchaError,
|
|
100
100
|
MeetingInfoV2PasswordError,
|
|
101
101
|
MeetingInfoV2PolicyError,
|
|
102
|
-
MeetingInfoV2JoinWebinarError,
|
|
102
|
+
MeetingInfoV2JoinWebinarError, MeetingInfoV2JoinForbiddenError,
|
|
103
103
|
} from '../../../../src/meeting-info/meeting-info-v2';
|
|
104
104
|
import {
|
|
105
105
|
DTLS_HANDSHAKE_FAILED_CLIENT_CODE,
|
|
@@ -114,6 +114,7 @@ import {ERROR_DESCRIPTIONS} from '@webex/internal-plugin-metrics/src/call-diagno
|
|
|
114
114
|
import MeetingCollection from '@webex/plugin-meetings/src/meetings/collection';
|
|
115
115
|
|
|
116
116
|
import {EVENT_TRIGGERS as VOICEAEVENTS} from '@webex/internal-plugin-voicea';
|
|
117
|
+
import JoinForbiddenError from '../../../../src/common/errors/join-forbidden-error';
|
|
117
118
|
|
|
118
119
|
describe('plugin-meetings', () => {
|
|
119
120
|
const logger = {
|
|
@@ -6339,6 +6340,38 @@ describe('plugin-meetings', () => {
|
|
|
6339
6340
|
assert.equal(meeting.passwordStatus, PASSWORD_STATUS.REQUIRED);
|
|
6340
6341
|
});
|
|
6341
6342
|
|
|
6343
|
+
it('handles meetingInfoProvider not reach JBH', async () => {
|
|
6344
|
+
meeting.destination = FAKE_DESTINATION;
|
|
6345
|
+
meeting.destinationType = FAKE_TYPE;
|
|
6346
|
+
meeting.attrs.meetingInfoProvider = {
|
|
6347
|
+
fetchMeetingInfo: sinon
|
|
6348
|
+
.stub()
|
|
6349
|
+
.throws(new MeetingInfoV2JoinForbiddenError(403003, FAKE_MEETING_INFO)),
|
|
6350
|
+
};
|
|
6351
|
+
|
|
6352
|
+
await assert.isRejected(meeting.fetchMeetingInfo({sendCAevents: true}), JoinForbiddenError);
|
|
6353
|
+
|
|
6354
|
+
assert.calledWith(
|
|
6355
|
+
meeting.attrs.meetingInfoProvider.fetchMeetingInfo,
|
|
6356
|
+
FAKE_DESTINATION,
|
|
6357
|
+
FAKE_TYPE,
|
|
6358
|
+
null,
|
|
6359
|
+
null,
|
|
6360
|
+
undefined,
|
|
6361
|
+
'locus-id',
|
|
6362
|
+
{},
|
|
6363
|
+
{meetingId: meeting.id, sendCAevents: true}
|
|
6364
|
+
);
|
|
6365
|
+
|
|
6366
|
+
assert.deepEqual(meeting.meetingInfo, FAKE_MEETING_INFO);
|
|
6367
|
+
assert.equal(meeting.meetingInfoFailureCode, 403003);
|
|
6368
|
+
assert.equal(
|
|
6369
|
+
meeting.meetingInfoFailureReason,
|
|
6370
|
+
MEETING_INFO_FAILURE_REASON.NOT_REACH_JBH
|
|
6371
|
+
);
|
|
6372
|
+
assert.equal(meeting.requiredCaptcha, null);
|
|
6373
|
+
});
|
|
6374
|
+
|
|
6342
6375
|
it('handles meetingInfoProvider policy error', async () => {
|
|
6343
6376
|
meeting.destination = FAKE_DESTINATION;
|
|
6344
6377
|
meeting.destinationType = FAKE_TYPE;
|
|
@@ -19,6 +19,7 @@ import MeetingInfo, {
|
|
|
19
19
|
MeetingInfoV2AdhocMeetingError,
|
|
20
20
|
MeetingInfoV2PolicyError,
|
|
21
21
|
MeetingInfoV2JoinWebinarError,
|
|
22
|
+
MeetingInfoV2JoinForbiddenError,
|
|
22
23
|
} from '@webex/plugin-meetings/src/meeting-info/meeting-info-v2';
|
|
23
24
|
import MeetingInfoUtil from '@webex/plugin-meetings/src/meeting-info/utilv2';
|
|
24
25
|
import Metrics from '@webex/plugin-meetings/src/metrics';
|
|
@@ -930,6 +931,42 @@ describe('plugin-meetings', () => {
|
|
|
930
931
|
});
|
|
931
932
|
}
|
|
932
933
|
);
|
|
934
|
+
|
|
935
|
+
forEach(
|
|
936
|
+
[
|
|
937
|
+
{errorCode: 403003},
|
|
938
|
+
],
|
|
939
|
+
({errorCode}) => {
|
|
940
|
+
it(`should throw a MeetingInfoV2JoinForbiddenError for error code ${errorCode}`, async () => {
|
|
941
|
+
const message = 'a message';
|
|
942
|
+
const meetingInfoData = 'meeting info';
|
|
943
|
+
|
|
944
|
+
webex.request = sinon.stub().rejects({
|
|
945
|
+
statusCode: 403,
|
|
946
|
+
body: {message, code: errorCode, data: {meetingInfo: meetingInfoData}},
|
|
947
|
+
});
|
|
948
|
+
try {
|
|
949
|
+
await meetingInfo.fetchMeetingInfo('1234323', DESTINATION_TYPE.MEETING_ID, 'abc', {
|
|
950
|
+
id: '999',
|
|
951
|
+
code: 'aabbcc11',
|
|
952
|
+
});
|
|
953
|
+
} catch (err) {
|
|
954
|
+
assert.instanceOf(err, MeetingInfoV2JoinForbiddenError);
|
|
955
|
+
assert.deepEqual(err.message, `${message}, code=${errorCode}`);
|
|
956
|
+
assert.equal(err.wbxAppApiCode, errorCode);
|
|
957
|
+
assert.deepEqual(err.meetingInfo, meetingInfoData);
|
|
958
|
+
|
|
959
|
+
assert(Metrics.sendBehavioralMetric.calledOnce);
|
|
960
|
+
assert.calledWith(
|
|
961
|
+
Metrics.sendBehavioralMetric,
|
|
962
|
+
BEHAVIORAL_METRICS.JOIN_FORBIDDEN_ERROR,
|
|
963
|
+
{code: errorCode}
|
|
964
|
+
);
|
|
965
|
+
|
|
966
|
+
}
|
|
967
|
+
});
|
|
968
|
+
}
|
|
969
|
+
);
|
|
933
970
|
});
|
|
934
971
|
});
|
|
935
972
|
});
|
|
@@ -43,6 +43,7 @@ import CaptchaError from '@webex/plugin-meetings/src/common/errors/captcha-error
|
|
|
43
43
|
import {forEach} from 'lodash';
|
|
44
44
|
import PasswordError from '@webex/plugin-meetings/src/common/errors/password-error';
|
|
45
45
|
import PermissionError from '@webex/plugin-meetings/src/common/errors/permission';
|
|
46
|
+
import JoinForbiddenError from '@webex/plugin-meetings/src/common/errors/join-forbidden-error';
|
|
46
47
|
import {NoiseReductionEffect, VirtualBackgroundEffect} from '@webex/media-helpers';
|
|
47
48
|
import NoMeetingInfoError from '../../../../src/common/errors/no-meeting-info';
|
|
48
49
|
|
|
@@ -2052,6 +2053,11 @@ describe('plugin-meetings', () => {
|
|
|
2052
2053
|
debugLogMessage:
|
|
2053
2054
|
'Meetings:index#createMeeting --> Debug PermissionError: Not allowed to execute the function, some properties on server, or local client state do not allow you to complete this action. fetching /meetingInfo for creation.',
|
|
2054
2055
|
},
|
|
2056
|
+
{
|
|
2057
|
+
error: new JoinForbiddenError(),
|
|
2058
|
+
debugLogMessage:
|
|
2059
|
+
'Meetings:index#createMeeting --> Debug JoinForbiddenError: Meeting join forbidden. fetching /meetingInfo for creation.',
|
|
2060
|
+
},
|
|
2055
2061
|
{
|
|
2056
2062
|
error: new Error(),
|
|
2057
2063
|
infoLogMessage: true,
|