@webex/plugin-meetings 3.10.0-next.9 → 3.10.0-webex-services-ready.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.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +11 -3
- package/dist/constants.js.map +1 -1
- package/dist/hashTree/constants.js +20 -0
- package/dist/hashTree/constants.js.map +1 -0
- package/dist/hashTree/hashTree.js +515 -0
- package/dist/hashTree/hashTree.js.map +1 -0
- package/dist/hashTree/hashTreeParser.js +1266 -0
- package/dist/hashTree/hashTreeParser.js.map +1 -0
- package/dist/hashTree/types.js +21 -0
- package/dist/hashTree/types.js.map +1 -0
- package/dist/hashTree/utils.js +48 -0
- package/dist/hashTree/utils.js.map +1 -0
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/index.js +511 -48
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/types.js +7 -0
- package/dist/locus-info/types.js.map +1 -0
- package/dist/meeting/index.js +41 -15
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +1 -0
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +112 -70
- package/dist/meetings/index.js.map +1 -1
- package/dist/metrics/constants.js +3 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/reachability/clusterReachability.js +44 -358
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/reachability.types.js +14 -1
- package/dist/reachability/reachability.types.js.map +1 -1
- package/dist/reachability/reachabilityPeerConnection.js +445 -0
- package/dist/reachability/reachabilityPeerConnection.js.map +1 -0
- package/dist/types/constants.d.ts +26 -21
- package/dist/types/hashTree/constants.d.ts +8 -0
- package/dist/types/hashTree/hashTree.d.ts +129 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +260 -0
- package/dist/types/hashTree/types.d.ts +25 -0
- package/dist/types/hashTree/utils.d.ts +9 -0
- package/dist/types/locus-info/index.d.ts +91 -42
- package/dist/types/locus-info/types.d.ts +46 -0
- package/dist/types/meeting/index.d.ts +22 -9
- package/dist/types/meetings/index.d.ts +9 -2
- package/dist/types/metrics/constants.d.ts +2 -0
- package/dist/types/reachability/clusterReachability.d.ts +10 -88
- package/dist/types/reachability/reachability.types.d.ts +12 -1
- package/dist/types/reachability/reachabilityPeerConnection.d.ts +111 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -21
- package/src/constants.ts +13 -1
- package/src/hashTree/constants.ts +9 -0
- package/src/hashTree/hashTree.ts +463 -0
- package/src/hashTree/hashTreeParser.ts +1161 -0
- package/src/hashTree/types.ts +30 -0
- package/src/hashTree/utils.ts +42 -0
- package/src/locus-info/index.ts +556 -85
- package/src/locus-info/types.ts +48 -0
- package/src/meeting/index.ts +58 -26
- package/src/meeting/util.ts +1 -0
- package/src/meetings/index.ts +104 -51
- package/src/metrics/constants.ts +2 -0
- package/src/reachability/clusterReachability.ts +50 -347
- package/src/reachability/reachability.types.ts +15 -1
- package/src/reachability/reachabilityPeerConnection.ts +416 -0
- package/test/unit/spec/hashTree/hashTree.ts +655 -0
- package/test/unit/spec/hashTree/hashTreeParser.ts +1532 -0
- package/test/unit/spec/hashTree/utils.ts +103 -0
- package/test/unit/spec/locus-info/index.js +667 -1
- package/test/unit/spec/meeting/index.js +91 -20
- package/test/unit/spec/meeting/utils.js +77 -0
- package/test/unit/spec/meetings/index.js +71 -26
- package/test/unit/spec/reachability/clusterReachability.ts +281 -138
|
@@ -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","MEETING_IS_IN_PROGRESS_ERROR","STATIC_MEETING_LINK_ALREADY_EXISTS_ERROR","FETCH_MEETING_INFO_V1_SUCCESS","FETCH_MEETING_INFO_V1_FAILURE","ENABLE_STATIC_METTING_LINK_SUCCESS","ENABLE_STATIC_METTING_LINK_FAILURE","DISABLE_STATIC_MEETING_LINK_SUCCESS","DISABLE_STATIC_MEETING_LINK_FAILURE","ADHOC_MEETING_SUCCESS","ADHOC_MEETING_FAILURE","FETCH_STATIC_MEETING_LINK_SUCCESS","FETCH_STATIC_MEETING_LINK_FAILURE","MEETING_LINK_DOES_NOT_EXIST_ERROR","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","LOCUS_SYNC_HANDLING_FAILED","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","VERIFY_REGISTRATION_ID_SUCCESS","VERIFY_REGISTRATION_ID_ERROR","JOIN_FORBIDDEN_ERROR","MEDIA_ISSUE_DETECTED"],"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 MEETING_IS_IN_PROGRESS_ERROR: 'js_sdk_meeting_is_in_progress_error',\n STATIC_MEETING_LINK_ALREADY_EXISTS_ERROR: 'js_sdk_static_meeting_link_already_exists_error',\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 ENABLE_STATIC_METTING_LINK_SUCCESS: 'js_sdk_enable_static_meeting_link_success',\n ENABLE_STATIC_METTING_LINK_FAILURE: 'js_sdk_enable_static_meeting_link_failure',\n DISABLE_STATIC_MEETING_LINK_SUCCESS: 'js_sdk_disable_static_meeting_link_success',\n DISABLE_STATIC_MEETING_LINK_FAILURE: 'js_sdk_disable_static_meeting_link_failure',\n ADHOC_MEETING_SUCCESS: 'js_sdk_adhoc_meeting_success',\n ADHOC_MEETING_FAILURE: 'js_sdk_adhoc_meeting_failure',\n FETCH_STATIC_MEETING_LINK_SUCCESS: 'js_sdk_fetch_static_meeting_link_success',\n FETCH_STATIC_MEETING_LINK_FAILURE: 'js_sdk_fetch_static_meeting_link_failure',\n MEETING_LINK_DOES_NOT_EXIST_ERROR: 'js_sdk_meeting_link_does_not_exist_error',\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 LOCUS_SYNC_HANDLING_FAILED: 'js_sdk_locus_sync_handling_failed',\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 VERIFY_REGISTRATION_ID_SUCCESS: 'js_sdk_verify_registrationId_success',\n VERIFY_REGISTRATION_ID_ERROR: 'js_sdk_verify_registrationId_error',\n JOIN_FORBIDDEN_ERROR: 'js_sdk_join_forbidden_error',\n MEDIA_ISSUE_DETECTED: 'js_sdk_media_issue_detected',\n};\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":"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","ignoreList":[]}
|
|
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","MEETING_IS_IN_PROGRESS_ERROR","STATIC_MEETING_LINK_ALREADY_EXISTS_ERROR","FETCH_MEETING_INFO_V1_SUCCESS","FETCH_MEETING_INFO_V1_FAILURE","ENABLE_STATIC_METTING_LINK_SUCCESS","ENABLE_STATIC_METTING_LINK_FAILURE","DISABLE_STATIC_MEETING_LINK_SUCCESS","DISABLE_STATIC_MEETING_LINK_FAILURE","ADHOC_MEETING_SUCCESS","ADHOC_MEETING_FAILURE","FETCH_STATIC_MEETING_LINK_SUCCESS","FETCH_STATIC_MEETING_LINK_FAILURE","MEETING_LINK_DOES_NOT_EXIST_ERROR","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","LOCUS_SYNC_HANDLING_FAILED","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","VERIFY_REGISTRATION_ID_SUCCESS","VERIFY_REGISTRATION_ID_ERROR","JOIN_FORBIDDEN_ERROR","MEDIA_ISSUE_DETECTED","LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH","LOCUS_HASH_TREE_UNSUPPORTED_OPERATION"],"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 MEETING_IS_IN_PROGRESS_ERROR: 'js_sdk_meeting_is_in_progress_error',\n STATIC_MEETING_LINK_ALREADY_EXISTS_ERROR: 'js_sdk_static_meeting_link_already_exists_error',\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 ENABLE_STATIC_METTING_LINK_SUCCESS: 'js_sdk_enable_static_meeting_link_success',\n ENABLE_STATIC_METTING_LINK_FAILURE: 'js_sdk_enable_static_meeting_link_failure',\n DISABLE_STATIC_MEETING_LINK_SUCCESS: 'js_sdk_disable_static_meeting_link_success',\n DISABLE_STATIC_MEETING_LINK_FAILURE: 'js_sdk_disable_static_meeting_link_failure',\n ADHOC_MEETING_SUCCESS: 'js_sdk_adhoc_meeting_success',\n ADHOC_MEETING_FAILURE: 'js_sdk_adhoc_meeting_failure',\n FETCH_STATIC_MEETING_LINK_SUCCESS: 'js_sdk_fetch_static_meeting_link_success',\n FETCH_STATIC_MEETING_LINK_FAILURE: 'js_sdk_fetch_static_meeting_link_failure',\n MEETING_LINK_DOES_NOT_EXIST_ERROR: 'js_sdk_meeting_link_does_not_exist_error',\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 LOCUS_SYNC_HANDLING_FAILED: 'js_sdk_locus_sync_handling_failed',\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 VERIFY_REGISTRATION_ID_SUCCESS: 'js_sdk_verify_registrationId_success',\n VERIFY_REGISTRATION_ID_ERROR: 'js_sdk_verify_registrationId_error',\n JOIN_FORBIDDEN_ERROR: 'js_sdk_join_forbidden_error',\n MEDIA_ISSUE_DETECTED: 'js_sdk_media_issue_detected',\n LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH: 'js_sdk_locus_classic_vs_hash_tree_mismatch',\n LOCUS_HASH_TREE_UNSUPPORTED_OPERATION: 'js_sdk_locus_hash_tree_unsupported_operation',\n};\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
5
|
-
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
-
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
7
|
-
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
8
|
-
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
9
4
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
10
5
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
11
6
|
_Object$defineProperty(exports, "__esModule", {
|
|
@@ -14,24 +9,16 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
14
9
|
exports.Events = exports.ClusterReachability = void 0;
|
|
15
10
|
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
16
11
|
var _set = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/set"));
|
|
17
|
-
var _entries = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/entries"));
|
|
18
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
19
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
|
|
20
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
|
|
21
13
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
22
14
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
23
15
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
24
16
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
25
17
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
26
18
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
27
|
-
var _common = require("@webex/common");
|
|
28
|
-
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
29
|
-
var _util = require("./util");
|
|
30
19
|
var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
|
|
31
|
-
var _constants = require("../constants");
|
|
32
20
|
var _reachability = require("./reachability.types");
|
|
33
|
-
|
|
34
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
21
|
+
var _reachabilityPeerConnection = require("./reachabilityPeerConnection");
|
|
35
22
|
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
|
|
36
23
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
37
24
|
// data for the Events.resultReady event
|
|
@@ -47,7 +34,8 @@ var Events = exports.Events = {
|
|
|
47
34
|
};
|
|
48
35
|
/**
|
|
49
36
|
* A class that handles reachability checks for a single cluster.
|
|
50
|
-
*
|
|
37
|
+
* Creates and orchestrates a ReachabilityPeerConnection instance.
|
|
38
|
+
* Listens to events and emits them to consumers.
|
|
51
39
|
*/
|
|
52
40
|
var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_EventsScope) {
|
|
53
41
|
/**
|
|
@@ -59,106 +47,49 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
|
|
|
59
47
|
var _this;
|
|
60
48
|
(0, _classCallCheck2.default)(this, ClusterReachability);
|
|
61
49
|
_this = _callSuper(this, ClusterReachability);
|
|
62
|
-
(0, _defineProperty2.default)(_this, "
|
|
63
|
-
(0, _defineProperty2.default)(_this, "numTcpUrls", void 0);
|
|
64
|
-
(0, _defineProperty2.default)(_this, "numXTlsUrls", void 0);
|
|
65
|
-
(0, _defineProperty2.default)(_this, "result", void 0);
|
|
66
|
-
(0, _defineProperty2.default)(_this, "pc", void 0);
|
|
67
|
-
(0, _defineProperty2.default)(_this, "defer", void 0);
|
|
68
|
-
// this defer is resolved once reachability checks for this cluster are completed
|
|
69
|
-
(0, _defineProperty2.default)(_this, "startTimestamp", void 0);
|
|
70
|
-
(0, _defineProperty2.default)(_this, "srflxIceCandidates", []);
|
|
50
|
+
(0, _defineProperty2.default)(_this, "reachabilityPeerConnection", void 0);
|
|
71
51
|
(0, _defineProperty2.default)(_this, "isVideoMesh", void 0);
|
|
72
52
|
(0, _defineProperty2.default)(_this, "name", void 0);
|
|
73
53
|
(0, _defineProperty2.default)(_this, "reachedSubnets", new _set.default());
|
|
74
54
|
_this.name = name;
|
|
75
55
|
_this.isVideoMesh = clusterInfo.isVideoMesh;
|
|
76
|
-
_this.
|
|
77
|
-
_this.
|
|
78
|
-
_this.numXTlsUrls = clusterInfo.xtls.length;
|
|
79
|
-
_this.pc = _this.createPeerConnection(clusterInfo);
|
|
80
|
-
_this.defer = new _common.Defer();
|
|
81
|
-
_this.result = {
|
|
82
|
-
udp: {
|
|
83
|
-
result: 'untested'
|
|
84
|
-
},
|
|
85
|
-
tcp: {
|
|
86
|
-
result: 'untested'
|
|
87
|
-
},
|
|
88
|
-
xtls: {
|
|
89
|
-
result: 'untested'
|
|
90
|
-
}
|
|
91
|
-
};
|
|
56
|
+
_this.reachabilityPeerConnection = new _reachabilityPeerConnection.ReachabilityPeerConnection(name, clusterInfo);
|
|
57
|
+
_this.setupReachabilityPeerConnectionEventListeners();
|
|
92
58
|
return _this;
|
|
93
59
|
}
|
|
94
60
|
|
|
95
61
|
/**
|
|
96
|
-
*
|
|
97
|
-
* @returns {
|
|
62
|
+
* Sets up event listeners for the ReachabilityPeerConnection instance
|
|
63
|
+
* @returns {void}
|
|
98
64
|
*/
|
|
99
65
|
(0, _inherits2.default)(ClusterReachability, _EventsScope);
|
|
100
66
|
return (0, _createClass2.default)(ClusterReachability, [{
|
|
101
|
-
key: "
|
|
102
|
-
value: function
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
* @returns {RTCConfiguration} peerConnectionConfig
|
|
110
|
-
*/
|
|
111
|
-
}, {
|
|
112
|
-
key: "buildPeerConnectionConfig",
|
|
113
|
-
value: function buildPeerConnectionConfig(cluster) {
|
|
114
|
-
var udpIceServers = cluster.udp.map(function (url) {
|
|
115
|
-
return {
|
|
116
|
-
username: '',
|
|
117
|
-
credential: '',
|
|
118
|
-
urls: [url]
|
|
119
|
-
};
|
|
67
|
+
key: "setupReachabilityPeerConnectionEventListeners",
|
|
68
|
+
value: function setupReachabilityPeerConnectionEventListeners() {
|
|
69
|
+
var _this2 = this;
|
|
70
|
+
this.reachabilityPeerConnection.on(_reachability.ReachabilityPeerConnectionEvents.resultReady, function (data) {
|
|
71
|
+
_this2.emit({
|
|
72
|
+
file: 'clusterReachability',
|
|
73
|
+
function: 'setupReachabilityPeerConnectionEventListeners'
|
|
74
|
+
}, Events.resultReady, data);
|
|
120
75
|
});
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return {
|
|
127
|
-
username: 'webexturnreachuser',
|
|
128
|
-
credential: 'webexturnreachpwd',
|
|
129
|
-
urls: [(0, _util.convertStunUrlToTurn)(urlString, 'tcp')]
|
|
130
|
-
};
|
|
76
|
+
this.reachabilityPeerConnection.on(_reachability.ReachabilityPeerConnectionEvents.clientMediaIpsUpdated, function (data) {
|
|
77
|
+
_this2.emit({
|
|
78
|
+
file: 'clusterReachability',
|
|
79
|
+
function: 'setupReachabilityPeerConnectionEventListeners'
|
|
80
|
+
}, Events.clientMediaIpsUpdated, data);
|
|
131
81
|
});
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
82
|
+
this.reachabilityPeerConnection.on(_reachability.ReachabilityPeerConnectionEvents.natTypeUpdated, function (data) {
|
|
83
|
+
_this2.emit({
|
|
84
|
+
file: 'clusterReachability',
|
|
85
|
+
function: 'setupReachabilityPeerConnectionEventListeners'
|
|
86
|
+
}, Events.natTypeUpdated, data);
|
|
87
|
+
});
|
|
88
|
+
this.reachabilityPeerConnection.on(_reachability.ReachabilityPeerConnectionEvents.reachedSubnets, function (data) {
|
|
89
|
+
data.subnets.forEach(function (subnet) {
|
|
90
|
+
_this2.reachedSubnets.add(subnet);
|
|
91
|
+
});
|
|
138
92
|
});
|
|
139
|
-
return {
|
|
140
|
-
iceServers: [].concat((0, _toConsumableArray2.default)(udpIceServers), (0, _toConsumableArray2.default)(tcpIceServers), (0, _toConsumableArray2.default)(turnTlsIceServers)),
|
|
141
|
-
iceCandidatePoolSize: 0,
|
|
142
|
-
iceTransportPolicy: 'all'
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Creates an RTCPeerConnection
|
|
148
|
-
* @param {ClusterNode} clusterInfo information about the media cluster
|
|
149
|
-
* @returns {RTCPeerConnection} peerConnection
|
|
150
|
-
*/
|
|
151
|
-
}, {
|
|
152
|
-
key: "createPeerConnection",
|
|
153
|
-
value: function createPeerConnection(clusterInfo) {
|
|
154
|
-
try {
|
|
155
|
-
var config = this.buildPeerConnectionConfig(clusterInfo);
|
|
156
|
-
var peerConnection = new RTCPeerConnection(config);
|
|
157
|
-
return peerConnection;
|
|
158
|
-
} catch (peerConnectionError) {
|
|
159
|
-
_loggerProxy.default.logger.warn("Reachability:index#createPeerConnection --> Error creating peerConnection:", peerConnectionError);
|
|
160
|
-
return undefined;
|
|
161
|
-
}
|
|
162
93
|
}
|
|
163
94
|
|
|
164
95
|
/**
|
|
@@ -167,271 +98,29 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
|
|
|
167
98
|
}, {
|
|
168
99
|
key: "getResult",
|
|
169
100
|
value: function getResult() {
|
|
170
|
-
return this.
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Closes the peerConnection
|
|
175
|
-
*
|
|
176
|
-
* @returns {void}
|
|
177
|
-
*/
|
|
178
|
-
}, {
|
|
179
|
-
key: "closePeerConnection",
|
|
180
|
-
value: function closePeerConnection() {
|
|
181
|
-
if (this.pc) {
|
|
182
|
-
this.pc.onicecandidate = null;
|
|
183
|
-
this.pc.onicegatheringstatechange = null;
|
|
184
|
-
this.pc.close();
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Resolves the defer, indicating that reachability checks for this cluster are completed
|
|
190
|
-
*
|
|
191
|
-
* @returns {void}
|
|
192
|
-
*/
|
|
193
|
-
}, {
|
|
194
|
-
key: "finishReachabilityCheck",
|
|
195
|
-
value: function finishReachabilityCheck() {
|
|
196
|
-
this.defer.resolve();
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Aborts the cluster reachability checks by closing the peer connection
|
|
201
|
-
*
|
|
202
|
-
* @returns {void}
|
|
203
|
-
*/
|
|
204
|
-
}, {
|
|
205
|
-
key: "abort",
|
|
206
|
-
value: function abort() {
|
|
207
|
-
var CLOSED = _constants.CONNECTION_STATE.CLOSED;
|
|
208
|
-
if (this.pc.connectionState !== CLOSED) {
|
|
209
|
-
this.closePeerConnection();
|
|
210
|
-
this.finishReachabilityCheck();
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Adds public IP (client media IPs)
|
|
216
|
-
* @param {string} protocol
|
|
217
|
-
* @param {string} publicIP
|
|
218
|
-
* @returns {void}
|
|
219
|
-
*/
|
|
220
|
-
}, {
|
|
221
|
-
key: "addPublicIP",
|
|
222
|
-
value: function addPublicIP(protocol, publicIP) {
|
|
223
|
-
var result = this.result[protocol];
|
|
224
|
-
if (publicIP) {
|
|
225
|
-
var ipAdded = false;
|
|
226
|
-
if (result.clientMediaIPs) {
|
|
227
|
-
if (!result.clientMediaIPs.includes(publicIP)) {
|
|
228
|
-
result.clientMediaIPs.push(publicIP);
|
|
229
|
-
ipAdded = true;
|
|
230
|
-
}
|
|
231
|
-
} else {
|
|
232
|
-
result.clientMediaIPs = [publicIP];
|
|
233
|
-
ipAdded = true;
|
|
234
|
-
}
|
|
235
|
-
if (ipAdded) this.emit({
|
|
236
|
-
file: 'clusterReachability',
|
|
237
|
-
function: 'addPublicIP'
|
|
238
|
-
}, Events.clientMediaIpsUpdated, {
|
|
239
|
-
protocol: protocol,
|
|
240
|
-
clientMediaIPs: result.clientMediaIPs
|
|
241
|
-
});
|
|
242
|
-
}
|
|
101
|
+
return this.reachabilityPeerConnection.getResult();
|
|
243
102
|
}
|
|
244
103
|
|
|
245
104
|
/**
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
* @returns {void}
|
|
249
|
-
*/
|
|
250
|
-
}, {
|
|
251
|
-
key: "registerIceGatheringStateChangeListener",
|
|
252
|
-
value: function registerIceGatheringStateChangeListener() {
|
|
253
|
-
var _this2 = this;
|
|
254
|
-
this.pc.onicegatheringstatechange = function () {
|
|
255
|
-
if (_this2.pc.iceGatheringState === _constants.ICE_GATHERING_STATE.COMPLETE) {
|
|
256
|
-
_this2.closePeerConnection();
|
|
257
|
-
_this2.finishReachabilityCheck();
|
|
258
|
-
}
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* Saves the latency in the result for the given protocol and marks it as reachable,
|
|
264
|
-
* emits the "resultReady" event if this is the first result for that protocol,
|
|
265
|
-
* emits the "clientMediaIpsUpdated" event if we already had a result and only found
|
|
266
|
-
* a new client IP
|
|
267
|
-
*
|
|
268
|
-
* @param {string} protocol
|
|
269
|
-
* @param {number} latency
|
|
270
|
-
* @param {string|null} [publicIp]
|
|
271
|
-
* @param {string|null} [serverIp]
|
|
272
|
-
* @returns {void}
|
|
273
|
-
*/
|
|
274
|
-
}, {
|
|
275
|
-
key: "saveResult",
|
|
276
|
-
value: function saveResult(protocol, latency, publicIp, serverIp) {
|
|
277
|
-
var result = this.result[protocol];
|
|
278
|
-
if (result.latencyInMilliseconds === undefined) {
|
|
279
|
-
_loggerProxy.default.logger.log(// @ts-ignore
|
|
280
|
-
"Reachability:index#saveResult --> Successfully reached ".concat(this.name, " over ").concat(protocol, ": ").concat(latency, "ms"));
|
|
281
|
-
result.latencyInMilliseconds = latency;
|
|
282
|
-
result.result = 'reachable';
|
|
283
|
-
if (publicIp) {
|
|
284
|
-
result.clientMediaIPs = [publicIp];
|
|
285
|
-
}
|
|
286
|
-
this.emit({
|
|
287
|
-
file: 'clusterReachability',
|
|
288
|
-
function: 'saveResult'
|
|
289
|
-
}, Events.resultReady, _objectSpread({
|
|
290
|
-
protocol: protocol
|
|
291
|
-
}, result));
|
|
292
|
-
} else {
|
|
293
|
-
this.addPublicIP(protocol, publicIp);
|
|
294
|
-
}
|
|
295
|
-
if (serverIp) {
|
|
296
|
-
this.reachedSubnets.add(serverIp);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
/**
|
|
301
|
-
* Determines NAT Type.
|
|
302
|
-
*
|
|
303
|
-
* @param {RTCIceCandidate} candidate
|
|
304
|
-
* @returns {void}
|
|
305
|
-
*/
|
|
306
|
-
}, {
|
|
307
|
-
key: "determineNatType",
|
|
308
|
-
value: function determineNatType(candidate) {
|
|
309
|
-
var _this3 = this;
|
|
310
|
-
this.srflxIceCandidates.push(candidate);
|
|
311
|
-
if (this.srflxIceCandidates.length > 1) {
|
|
312
|
-
var portsFound = {};
|
|
313
|
-
this.srflxIceCandidates.forEach(function (c) {
|
|
314
|
-
var key = "".concat(c.address, ":").concat(c.relatedPort);
|
|
315
|
-
if (!portsFound[key]) {
|
|
316
|
-
portsFound[key] = new _set.default();
|
|
317
|
-
}
|
|
318
|
-
portsFound[key].add(c.port);
|
|
319
|
-
});
|
|
320
|
-
(0, _entries.default)(portsFound).forEach(function (_ref) {
|
|
321
|
-
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
322
|
-
ports = _ref2[1];
|
|
323
|
-
if (ports.size > 1) {
|
|
324
|
-
// Found candidates with the same address and relatedPort, but different ports
|
|
325
|
-
_this3.emit({
|
|
326
|
-
file: 'clusterReachability',
|
|
327
|
-
function: 'determineNatType'
|
|
328
|
-
}, Events.natTypeUpdated, {
|
|
329
|
-
natType: _reachability.NatType.SymmetricNat
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
/**
|
|
337
|
-
* Registers a listener for the icecandidate event
|
|
338
|
-
*
|
|
339
|
-
* @returns {void}
|
|
340
|
-
*/
|
|
341
|
-
}, {
|
|
342
|
-
key: "registerIceCandidateListener",
|
|
343
|
-
value: function registerIceCandidateListener() {
|
|
344
|
-
var _this4 = this;
|
|
345
|
-
this.pc.onicecandidate = function (e) {
|
|
346
|
-
var TURN_TLS_PORT = 443;
|
|
347
|
-
var CANDIDATE_TYPES = {
|
|
348
|
-
SERVER_REFLEXIVE: 'srflx',
|
|
349
|
-
RELAY: 'relay'
|
|
350
|
-
};
|
|
351
|
-
var latencyInMilliseconds = _this4.getElapsedTime();
|
|
352
|
-
if (e.candidate) {
|
|
353
|
-
if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {
|
|
354
|
-
var serverIp = null;
|
|
355
|
-
if ('url' in e.candidate) {
|
|
356
|
-
var stunServerUrlRegex = /stun:([\d.]+):\d+/;
|
|
357
|
-
var match = e.candidate.url.match(stunServerUrlRegex);
|
|
358
|
-
if (match) {
|
|
359
|
-
// eslint-disable-next-line prefer-destructuring
|
|
360
|
-
serverIp = match[1];
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
_this4.saveResult('udp', latencyInMilliseconds, e.candidate.address, serverIp);
|
|
364
|
-
_this4.determineNatType(e.candidate);
|
|
365
|
-
}
|
|
366
|
-
if (e.candidate.type === CANDIDATE_TYPES.RELAY) {
|
|
367
|
-
var protocol = e.candidate.port === TURN_TLS_PORT ? 'xtls' : 'tcp';
|
|
368
|
-
_this4.saveResult(protocol, latencyInMilliseconds, null, e.candidate.address);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
};
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
/**
|
|
375
|
-
* Starts the process of doing UDP and TCP reachability checks on the media cluster.
|
|
376
|
-
* XTLS reachability checking is not supported.
|
|
377
|
-
*
|
|
378
|
-
* @returns {Promise}
|
|
105
|
+
* Starts the process of doing UDP, TCP, and XTLS reachability checks on the media cluster.
|
|
106
|
+
* @returns {Promise<ClusterReachabilityResult>}
|
|
379
107
|
*/
|
|
380
108
|
}, {
|
|
381
109
|
key: "start",
|
|
382
110
|
value: (function () {
|
|
383
111
|
var _start = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
384
|
-
var offer, gatherIceCandidatePromise, _t;
|
|
385
112
|
return _regenerator.default.wrap(function (_context) {
|
|
386
113
|
while (1) switch (_context.prev = _context.next) {
|
|
387
114
|
case 0:
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
break;
|
|
391
|
-
}
|
|
392
|
-
_loggerProxy.default.logger.warn("Reachability:ClusterReachability#start --> Error: peerConnection is undefined");
|
|
393
|
-
return _context.abrupt("return", this.result);
|
|
115
|
+
_context.next = 1;
|
|
116
|
+
return this.reachabilityPeerConnection.start();
|
|
394
117
|
case 1:
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
this.result.udp = {
|
|
398
|
-
result: this.numUdpUrls > 0 ? 'unreachable' : 'untested'
|
|
399
|
-
};
|
|
400
|
-
this.result.tcp = {
|
|
401
|
-
result: this.numTcpUrls > 0 ? 'unreachable' : 'untested'
|
|
402
|
-
};
|
|
403
|
-
this.result.xtls = {
|
|
404
|
-
result: this.numXTlsUrls > 0 ? 'unreachable' : 'untested'
|
|
405
|
-
};
|
|
406
|
-
_context.prev = 2;
|
|
407
|
-
_context.next = 3;
|
|
408
|
-
return this.pc.createOffer({
|
|
409
|
-
offerToReceiveAudio: true
|
|
410
|
-
});
|
|
411
|
-
case 3:
|
|
412
|
-
offer = _context.sent;
|
|
413
|
-
this.startTimestamp = performance.now();
|
|
414
|
-
|
|
415
|
-
// Set up the state change listeners before triggering the ICE gathering
|
|
416
|
-
gatherIceCandidatePromise = this.gatherIceCandidates(); // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer
|
|
417
|
-
// we just need to make this call to trigger the ICE gathering process
|
|
418
|
-
this.pc.setLocalDescription(offer);
|
|
419
|
-
_context.next = 4;
|
|
420
|
-
return gatherIceCandidatePromise;
|
|
421
|
-
case 4:
|
|
422
|
-
_context.next = 6;
|
|
423
|
-
break;
|
|
424
|
-
case 5:
|
|
425
|
-
_context.prev = 5;
|
|
426
|
-
_t = _context["catch"](2);
|
|
427
|
-
_loggerProxy.default.logger.warn("Reachability:ClusterReachability#start --> Error: ", _t);
|
|
428
|
-
case 6:
|
|
429
|
-
return _context.abrupt("return", this.result);
|
|
430
|
-
case 7:
|
|
118
|
+
return _context.abrupt("return", this.getResult());
|
|
119
|
+
case 2:
|
|
431
120
|
case "end":
|
|
432
121
|
return _context.stop();
|
|
433
122
|
}
|
|
434
|
-
}, _callee, this
|
|
123
|
+
}, _callee, this);
|
|
435
124
|
}));
|
|
436
125
|
function start() {
|
|
437
126
|
return _start.apply(this, arguments);
|
|
@@ -439,17 +128,14 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
|
|
|
439
128
|
return start;
|
|
440
129
|
}()
|
|
441
130
|
/**
|
|
442
|
-
*
|
|
443
|
-
*
|
|
444
|
-
* @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached
|
|
131
|
+
* Aborts the cluster reachability checks
|
|
132
|
+
* @returns {void}
|
|
445
133
|
*/
|
|
446
134
|
)
|
|
447
135
|
}, {
|
|
448
|
-
key: "
|
|
449
|
-
value: function
|
|
450
|
-
this.
|
|
451
|
-
this.registerIceCandidateListener();
|
|
452
|
-
return this.defer.promise;
|
|
136
|
+
key: "abort",
|
|
137
|
+
value: function abort() {
|
|
138
|
+
this.reachabilityPeerConnection.abort();
|
|
453
139
|
}
|
|
454
140
|
}]);
|
|
455
141
|
}(_eventsScope.default);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_common","require","_loggerProxy","_interopRequireDefault","_util","_eventsScope","_constants","_reachability","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","Events","exports","resultReady","clientMediaIpsUpdated","natTypeUpdated","ClusterReachability","_EventsScope","name","clusterInfo","_this","_classCallCheck2","_set","isVideoMesh","numUdpUrls","udp","numTcpUrls","tcp","numXTlsUrls","xtls","pc","createPeerConnection","defer","Defer","result","_inherits2","_createClass2","key","value","getElapsedTime","Math","round","performance","now","startTimestamp","buildPeerConnectionConfig","cluster","udpIceServers","map","url","username","credential","urls","tcpIceServers","urlString","convertStunUrlToTurn","turnTlsIceServers","convertStunUrlToTurnTls","iceServers","concat","_toConsumableArray2","iceCandidatePoolSize","iceTransportPolicy","config","peerConnection","RTCPeerConnection","peerConnectionError","LoggerProxy","logger","warn","undefined","getResult","closePeerConnection","onicecandidate","onicegatheringstatechange","close","finishReachabilityCheck","resolve","abort","CLOSED","CONNECTION_STATE","connectionState","addPublicIP","protocol","publicIP","ipAdded","clientMediaIPs","includes","emit","file","function","registerIceGatheringStateChangeListener","_this2","iceGatheringState","ICE_GATHERING_STATE","COMPLETE","saveResult","latency","publicIp","serverIp","latencyInMilliseconds","log","reachedSubnets","add","determineNatType","candidate","_this3","srflxIceCandidates","portsFound","c","address","relatedPort","port","_entries","_ref","_ref2","_slicedToArray2","ports","size","natType","NatType","SymmetricNat","registerIceCandidateListener","_this4","TURN_TLS_PORT","CANDIDATE_TYPES","SERVER_REFLEXIVE","RELAY","type","stunServerUrlRegex","match","_start","_asyncToGenerator2","_regenerator","mark","_callee","offer","gatherIceCandidatePromise","_t","wrap","_context","prev","next","abrupt","createOffer","offerToReceiveAudio","sent","gatherIceCandidates","setLocalDescription","stop","start","promise","EventsScope"],"sources":["clusterReachability.ts"],"sourcesContent":["import {Defer} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ClusterNode} from './request';\nimport {convertStunUrlToTurn, convertStunUrlToTurnTls} from './util';\nimport EventsScope from '../common/events/events-scope';\n\nimport {CONNECTION_STATE, Enum, ICE_GATHERING_STATE} from '../constants';\nimport {ClusterReachabilityResult, NatType} from './reachability.types';\n\n// data for the Events.resultReady event\nexport type ResultEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n result: 'reachable' | 'unreachable' | 'untested';\n latencyInMilliseconds: number; // amount of time it took to get the ICE candidate\n clientMediaIPs?: string[];\n};\n\n// data for the Events.clientMediaIpsUpdated event\nexport type ClientMediaIpsUpdatedEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n clientMediaIPs: string[];\n};\n\nexport type NatTypeUpdatedEventData = {\n natType: NatType;\n};\n\nexport const Events = {\n resultReady: 'resultReady', // emitted when a cluster is reached successfully using specific protocol\n clientMediaIpsUpdated: 'clientMediaIpsUpdated', // emitted when more public IPs are found after resultReady was already sent for a given protocol\n natTypeUpdated: 'natTypeUpdated', // emitted when NAT type is determined\n} as const;\n\nexport type Events = Enum<typeof Events>;\n\n/**\n * A class that handles reachability checks for a single cluster.\n * It emits events from Events enum\n */\nexport class ClusterReachability extends EventsScope {\n private numUdpUrls: number;\n private numTcpUrls: number;\n private numXTlsUrls: number;\n private result: ClusterReachabilityResult;\n private pc?: RTCPeerConnection;\n private defer: Defer; // this defer is resolved once reachability checks for this cluster are completed\n private startTimestamp: number;\n private srflxIceCandidates: RTCIceCandidate[] = [];\n public readonly isVideoMesh: boolean;\n public readonly name;\n public readonly reachedSubnets: Set<string> = new Set();\n\n /**\n * Constructor for ClusterReachability\n * @param {string} name cluster name\n * @param {ClusterNode} clusterInfo information about the media cluster\n */\n constructor(name: string, clusterInfo: ClusterNode) {\n super();\n this.name = name;\n this.isVideoMesh = clusterInfo.isVideoMesh;\n this.numUdpUrls = clusterInfo.udp.length;\n this.numTcpUrls = clusterInfo.tcp.length;\n this.numXTlsUrls = clusterInfo.xtls.length;\n\n this.pc = this.createPeerConnection(clusterInfo);\n\n this.defer = new Defer();\n this.result = {\n udp: {\n result: 'untested',\n },\n tcp: {\n result: 'untested',\n },\n xtls: {\n result: 'untested',\n },\n };\n }\n\n /**\n * Gets total elapsed time, can be called only after start() is called\n * @returns {Number} Milliseconds\n */\n private getElapsedTime() {\n return Math.round(performance.now() - this.startTimestamp);\n }\n\n /**\n * Generate peerConnection config settings\n * @param {ClusterNode} cluster\n * @returns {RTCConfiguration} peerConnectionConfig\n */\n private buildPeerConnectionConfig(cluster: ClusterNode): RTCConfiguration {\n const udpIceServers = cluster.udp.map((url) => ({\n username: '',\n credential: '',\n urls: [url],\n }));\n\n // STUN servers are contacted only using UDP, so in order to test TCP reachability\n // we pretend that Linus is a TURN server, because we can explicitly say \"transport=tcp\" in TURN urls.\n // We then check for relay candidates to know if TURN-TCP worked (see registerIceCandidateListener()).\n const tcpIceServers = cluster.tcp.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurn(urlString, 'tcp')],\n };\n });\n\n const turnTlsIceServers = cluster.xtls.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurnTls(urlString)],\n };\n });\n\n return {\n iceServers: [...udpIceServers, ...tcpIceServers, ...turnTlsIceServers],\n iceCandidatePoolSize: 0,\n iceTransportPolicy: 'all',\n };\n }\n\n /**\n * Creates an RTCPeerConnection\n * @param {ClusterNode} clusterInfo information about the media cluster\n * @returns {RTCPeerConnection} peerConnection\n */\n private createPeerConnection(clusterInfo: ClusterNode) {\n try {\n const config = this.buildPeerConnectionConfig(clusterInfo);\n\n const peerConnection = new RTCPeerConnection(config);\n\n return peerConnection;\n } catch (peerConnectionError) {\n LoggerProxy.logger.warn(\n `Reachability:index#createPeerConnection --> Error creating peerConnection:`,\n peerConnectionError\n );\n\n return undefined;\n }\n }\n\n /**\n * @returns {ClusterReachabilityResult} reachability result for this cluster\n */\n getResult() {\n return this.result;\n }\n\n /**\n * Closes the peerConnection\n *\n * @returns {void}\n */\n private closePeerConnection() {\n if (this.pc) {\n this.pc.onicecandidate = null;\n this.pc.onicegatheringstatechange = null;\n this.pc.close();\n }\n }\n\n /**\n * Resolves the defer, indicating that reachability checks for this cluster are completed\n *\n * @returns {void}\n */\n private finishReachabilityCheck() {\n this.defer.resolve();\n }\n\n /**\n * Aborts the cluster reachability checks by closing the peer connection\n *\n * @returns {void}\n */\n public abort() {\n const {CLOSED} = CONNECTION_STATE;\n\n if (this.pc.connectionState !== CLOSED) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n\n /**\n * Adds public IP (client media IPs)\n * @param {string} protocol\n * @param {string} publicIP\n * @returns {void}\n */\n private addPublicIP(protocol: 'udp' | 'tcp' | 'xtls', publicIP?: string | null) {\n const result = this.result[protocol];\n\n if (publicIP) {\n let ipAdded = false;\n\n if (result.clientMediaIPs) {\n if (!result.clientMediaIPs.includes(publicIP)) {\n result.clientMediaIPs.push(publicIP);\n ipAdded = true;\n }\n } else {\n result.clientMediaIPs = [publicIP];\n ipAdded = true;\n }\n\n if (ipAdded)\n this.emit(\n {\n file: 'clusterReachability',\n function: 'addPublicIP',\n },\n Events.clientMediaIpsUpdated,\n {\n protocol,\n clientMediaIPs: result.clientMediaIPs,\n }\n );\n }\n }\n\n /**\n * Registers a listener for the iceGatheringStateChange event\n *\n * @returns {void}\n */\n private registerIceGatheringStateChangeListener() {\n this.pc.onicegatheringstatechange = () => {\n if (this.pc.iceGatheringState === ICE_GATHERING_STATE.COMPLETE) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n };\n }\n\n /**\n * Saves the latency in the result for the given protocol and marks it as reachable,\n * emits the \"resultReady\" event if this is the first result for that protocol,\n * emits the \"clientMediaIpsUpdated\" event if we already had a result and only found\n * a new client IP\n *\n * @param {string} protocol\n * @param {number} latency\n * @param {string|null} [publicIp]\n * @param {string|null} [serverIp]\n * @returns {void}\n */\n private saveResult(\n protocol: 'udp' | 'tcp' | 'xtls',\n latency: number,\n publicIp?: string | null,\n serverIp?: string | null\n ) {\n const result = this.result[protocol];\n\n if (result.latencyInMilliseconds === undefined) {\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#saveResult --> Successfully reached ${this.name} over ${protocol}: ${latency}ms`\n );\n result.latencyInMilliseconds = latency;\n result.result = 'reachable';\n if (publicIp) {\n result.clientMediaIPs = [publicIp];\n }\n\n this.emit(\n {\n file: 'clusterReachability',\n function: 'saveResult',\n },\n Events.resultReady,\n {\n protocol,\n ...result,\n }\n );\n } else {\n this.addPublicIP(protocol, publicIp);\n }\n\n if (serverIp) {\n this.reachedSubnets.add(serverIp);\n }\n }\n\n /**\n * Determines NAT Type.\n *\n * @param {RTCIceCandidate} candidate\n * @returns {void}\n */\n private determineNatType(candidate: RTCIceCandidate) {\n this.srflxIceCandidates.push(candidate);\n\n if (this.srflxIceCandidates.length > 1) {\n const portsFound: Record<string, Set<number>> = {};\n\n this.srflxIceCandidates.forEach((c) => {\n const key = `${c.address}:${c.relatedPort}`;\n if (!portsFound[key]) {\n portsFound[key] = new Set();\n }\n portsFound[key].add(c.port);\n });\n\n Object.entries(portsFound).forEach(([, ports]) => {\n if (ports.size > 1) {\n // Found candidates with the same address and relatedPort, but different ports\n this.emit(\n {\n file: 'clusterReachability',\n function: 'determineNatType',\n },\n Events.natTypeUpdated,\n {\n natType: NatType.SymmetricNat,\n }\n );\n }\n });\n }\n }\n\n /**\n * Registers a listener for the icecandidate event\n *\n * @returns {void}\n */\n private registerIceCandidateListener() {\n this.pc.onicecandidate = (e) => {\n const TURN_TLS_PORT = 443;\n const CANDIDATE_TYPES = {\n SERVER_REFLEXIVE: 'srflx',\n RELAY: 'relay',\n };\n\n const latencyInMilliseconds = this.getElapsedTime();\n\n if (e.candidate) {\n if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {\n let serverIp = null;\n if ('url' in e.candidate) {\n const stunServerUrlRegex = /stun:([\\d.]+):\\d+/;\n\n const match = (e.candidate as any).url.match(stunServerUrlRegex);\n if (match) {\n // eslint-disable-next-line prefer-destructuring\n serverIp = match[1];\n }\n }\n\n this.saveResult('udp', latencyInMilliseconds, e.candidate.address, serverIp);\n\n this.determineNatType(e.candidate);\n }\n\n if (e.candidate.type === CANDIDATE_TYPES.RELAY) {\n const protocol = e.candidate.port === TURN_TLS_PORT ? 'xtls' : 'tcp';\n this.saveResult(protocol, latencyInMilliseconds, null, e.candidate.address);\n }\n }\n };\n }\n\n /**\n * Starts the process of doing UDP and TCP reachability checks on the media cluster.\n * XTLS reachability checking is not supported.\n *\n * @returns {Promise}\n */\n async start(): Promise<ClusterReachabilityResult> {\n if (!this.pc) {\n LoggerProxy.logger.warn(\n `Reachability:ClusterReachability#start --> Error: peerConnection is undefined`\n );\n\n return this.result;\n }\n\n // Initialize this.result as saying that nothing is reachable.\n // It will get updated as we go along and successfully gather ICE candidates.\n this.result.udp = {\n result: this.numUdpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.tcp = {\n result: this.numTcpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.xtls = {\n result: this.numXTlsUrls > 0 ? 'unreachable' : 'untested',\n };\n\n try {\n const offer = await this.pc.createOffer({offerToReceiveAudio: true});\n\n this.startTimestamp = performance.now();\n\n // Set up the state change listeners before triggering the ICE gathering\n const gatherIceCandidatePromise = this.gatherIceCandidates();\n\n // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer\n // we just need to make this call to trigger the ICE gathering process\n this.pc.setLocalDescription(offer);\n\n await gatherIceCandidatePromise;\n } catch (error) {\n LoggerProxy.logger.warn(`Reachability:ClusterReachability#start --> Error: `, error);\n }\n\n return this.result;\n }\n\n /**\n * Starts the process of gathering ICE candidates\n *\n * @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached\n */\n private gatherIceCandidates() {\n this.registerIceGatheringStateChangeListener();\n this.registerIceCandidateListener();\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_eventsScope","_interopRequireDefault","require","_reachability","_reachabilityPeerConnection","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","Events","exports","resultReady","clientMediaIpsUpdated","natTypeUpdated","ClusterReachability","_EventsScope","name","clusterInfo","_this","_classCallCheck2","_defineProperty2","_set","isVideoMesh","reachabilityPeerConnection","ReachabilityPeerConnection","setupReachabilityPeerConnectionEventListeners","_inherits2","_createClass2","key","value","_this2","on","ReachabilityPeerConnectionEvents","data","emit","file","function","reachedSubnets","subnets","forEach","subnet","add","getResult","_start","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","start","abrupt","stop","arguments","abort","EventsScope"],"sources":["clusterReachability.ts"],"sourcesContent":["import {ClusterNode} from './request';\nimport EventsScope from '../common/events/events-scope';\n\nimport {Enum} from '../constants';\nimport {\n ClusterReachabilityResult,\n NatType,\n ReachabilityPeerConnectionEvents,\n} from './reachability.types';\nimport {ReachabilityPeerConnection} from './reachabilityPeerConnection';\n\n// data for the Events.resultReady event\nexport type ResultEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n result: 'reachable' | 'unreachable' | 'untested';\n latencyInMilliseconds: number; // amount of time it took to get the ICE candidate\n clientMediaIPs?: string[];\n};\n\n// data for the Events.clientMediaIpsUpdated event\nexport type ClientMediaIpsUpdatedEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n clientMediaIPs: string[];\n};\n\nexport type NatTypeUpdatedEventData = {\n natType: NatType;\n};\n\nexport const Events = {\n resultReady: 'resultReady', // emitted when a cluster is reached successfully using specific protocol\n clientMediaIpsUpdated: 'clientMediaIpsUpdated', // emitted when more public IPs are found after resultReady was already sent for a given protocol\n natTypeUpdated: 'natTypeUpdated', // emitted when NAT type is determined\n} as const;\n\nexport type Events = Enum<typeof Events>;\n\n/**\n * A class that handles reachability checks for a single cluster.\n * Creates and orchestrates a ReachabilityPeerConnection instance.\n * Listens to events and emits them to consumers.\n */\nexport class ClusterReachability extends EventsScope {\n private reachabilityPeerConnection: ReachabilityPeerConnection;\n public readonly isVideoMesh: boolean;\n public readonly name;\n public readonly reachedSubnets: Set<string> = new Set();\n\n /**\n * Constructor for ClusterReachability\n * @param {string} name cluster name\n * @param {ClusterNode} clusterInfo information about the media cluster\n */\n constructor(name: string, clusterInfo: ClusterNode) {\n super();\n this.name = name;\n this.isVideoMesh = clusterInfo.isVideoMesh;\n\n this.reachabilityPeerConnection = new ReachabilityPeerConnection(name, clusterInfo);\n\n this.setupReachabilityPeerConnectionEventListeners();\n }\n\n /**\n * Sets up event listeners for the ReachabilityPeerConnection instance\n * @returns {void}\n */\n private setupReachabilityPeerConnectionEventListeners() {\n this.reachabilityPeerConnection.on(ReachabilityPeerConnectionEvents.resultReady, (data) => {\n this.emit(\n {\n file: 'clusterReachability',\n function: 'setupReachabilityPeerConnectionEventListeners',\n },\n Events.resultReady,\n data\n );\n });\n\n this.reachabilityPeerConnection.on(\n ReachabilityPeerConnectionEvents.clientMediaIpsUpdated,\n (data) => {\n this.emit(\n {\n file: 'clusterReachability',\n function: 'setupReachabilityPeerConnectionEventListeners',\n },\n Events.clientMediaIpsUpdated,\n data\n );\n }\n );\n\n this.reachabilityPeerConnection.on(ReachabilityPeerConnectionEvents.natTypeUpdated, (data) => {\n this.emit(\n {\n file: 'clusterReachability',\n function: 'setupReachabilityPeerConnectionEventListeners',\n },\n Events.natTypeUpdated,\n data\n );\n });\n\n this.reachabilityPeerConnection.on(ReachabilityPeerConnectionEvents.reachedSubnets, (data) => {\n data.subnets.forEach((subnet) => {\n this.reachedSubnets.add(subnet);\n });\n });\n }\n\n /**\n * @returns {ClusterReachabilityResult} reachability result for this cluster\n */\n getResult(): ClusterReachabilityResult {\n return this.reachabilityPeerConnection.getResult();\n }\n\n /**\n * Starts the process of doing UDP, TCP, and XTLS reachability checks on the media cluster.\n * @returns {Promise<ClusterReachabilityResult>}\n */\n async start(): Promise<ClusterReachabilityResult> {\n await this.reachabilityPeerConnection.start();\n\n return this.getResult();\n }\n\n /**\n * Aborts the cluster reachability checks\n * @returns {void}\n */\n public abort() {\n this.reachabilityPeerConnection.abort();\n }\n}\n"],"mappings":"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","ignoreList":[]}
|