@webex/plugin-meetings 3.0.0-beta.270 → 3.0.0-beta.271

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.
@@ -66,7 +66,9 @@ var BEHAVIORAL_METRICS = {
66
66
  LOCUS_DELTA_SYNC_FAILED: 'js_sdk_locus_delta_sync_failed',
67
67
  LOCUS_DELTA_OUT_OF_ORDER: 'js_sdk_locus_delta_ooo',
68
68
  PERMISSION_TOKEN_REFRESH: 'js_sdk_permission_token_refresh',
69
- PERMISSION_TOKEN_REFRESH_ERROR: 'js_sdk_permission_token_refresh_error'
69
+ PERMISSION_TOKEN_REFRESH_ERROR: 'js_sdk_permission_token_refresh_error',
70
+ TURN_DISCOVERY_LATENCY: 'js_sdk_turn_discovery_latency',
71
+ ROAP_OFFER_TO_ANSWER_LATENCY: 'js_sdk_roap_offer_to_answer_latency'
70
72
  };
71
73
  exports.default = BEHAVIORAL_METRICS;
72
74
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["BEHAVIORAL_METRICS","MEETINGS_REGISTRATION_FAILED","MEETINGS_REGISTRATION_SUCCESS","MERCURY_CONNECTION_FAILURE","MERCURY_CONNECTION_RESTORED","JOIN_SUCCESS","JOIN_FAILURE","ADD_MEDIA_SUCCESS","ADD_MEDIA_FAILURE","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_FAILURE","MEETING_START_WHITEBOARD_SHARE_FAILURE","MEETING_STOP_WHITEBOARD_SHARE_FAILURE","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"],"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 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 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_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 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};\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":";;;;;;;AAAA;;AAEA,IAAMA,kBAAkB,GAAG;EACzBC,4BAA4B,EAAE,qCAAqC;EACnEC,6BAA6B,EAAE,sCAAsC;EACrEC,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,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,+BAA+B;EACtDC,sCAAsC,EAAE,gDAAgD;EACxFC,qCAAqC,EAAE,+CAA+C;EACtFC,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;AAClC,CAAC;AAAC"}
1
+ {"version":3,"names":["BEHAVIORAL_METRICS","MEETINGS_REGISTRATION_FAILED","MEETINGS_REGISTRATION_SUCCESS","MERCURY_CONNECTION_FAILURE","MERCURY_CONNECTION_RESTORED","JOIN_SUCCESS","JOIN_FAILURE","ADD_MEDIA_SUCCESS","ADD_MEDIA_FAILURE","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_FAILURE","MEETING_START_WHITEBOARD_SHARE_FAILURE","MEETING_STOP_WHITEBOARD_SHARE_FAILURE","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"],"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 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 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_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 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};\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":";;;;;;;AAAA;;AAEA,IAAMA,kBAAkB,GAAG;EACzBC,4BAA4B,EAAE,qCAAqC;EACnEC,6BAA6B,EAAE,sCAAsC;EACrEC,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,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,+BAA+B;EACtDC,sCAAsC,EAAE,gDAAgD;EACxFC,qCAAqC,EAAE,+CAA+C;EACtFC,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;AAChC,CAAC;AAAC"}
@@ -58,5 +58,7 @@ declare const BEHAVIORAL_METRICS: {
58
58
  LOCUS_DELTA_OUT_OF_ORDER: string;
59
59
  PERMISSION_TOKEN_REFRESH: string;
60
60
  PERMISSION_TOKEN_REFRESH_ERROR: string;
61
+ TURN_DISCOVERY_LATENCY: string;
62
+ ROAP_OFFER_TO_ANSWER_LATENCY: string;
61
63
  };
62
64
  export { BEHAVIORAL_METRICS as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "3.0.0-beta.270",
3
+ "version": "3.0.0-beta.271",
4
4
  "description": "",
5
5
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
6
6
  "contributors": [
@@ -32,12 +32,12 @@
32
32
  "build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
33
33
  },
34
34
  "devDependencies": {
35
- "@webex/plugin-meetings": "3.0.0-beta.270",
36
- "@webex/test-helper-chai": "3.0.0-beta.270",
37
- "@webex/test-helper-mocha": "3.0.0-beta.270",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.270",
39
- "@webex/test-helper-retry": "3.0.0-beta.270",
40
- "@webex/test-helper-test-users": "3.0.0-beta.270",
35
+ "@webex/plugin-meetings": "3.0.0-beta.271",
36
+ "@webex/test-helper-chai": "3.0.0-beta.271",
37
+ "@webex/test-helper-mocha": "3.0.0-beta.271",
38
+ "@webex/test-helper-mock-webex": "3.0.0-beta.271",
39
+ "@webex/test-helper-retry": "3.0.0-beta.271",
40
+ "@webex/test-helper-test-users": "3.0.0-beta.271",
41
41
  "chai": "^4.3.4",
42
42
  "chai-as-promised": "^7.1.1",
43
43
  "jsdom-global": "3.0.2",
@@ -46,19 +46,19 @@
46
46
  "typescript": "^4.7.4"
47
47
  },
48
48
  "dependencies": {
49
- "@webex/common": "3.0.0-beta.270",
49
+ "@webex/common": "3.0.0-beta.271",
50
50
  "@webex/internal-media-core": "2.0.4",
51
- "@webex/internal-plugin-conversation": "3.0.0-beta.270",
52
- "@webex/internal-plugin-device": "3.0.0-beta.270",
53
- "@webex/internal-plugin-llm": "3.0.0-beta.270",
54
- "@webex/internal-plugin-mercury": "3.0.0-beta.270",
55
- "@webex/internal-plugin-metrics": "3.0.0-beta.270",
56
- "@webex/internal-plugin-support": "3.0.0-beta.270",
57
- "@webex/internal-plugin-user": "3.0.0-beta.270",
58
- "@webex/media-helpers": "3.0.0-beta.270",
59
- "@webex/plugin-people": "3.0.0-beta.270",
60
- "@webex/plugin-rooms": "3.0.0-beta.270",
61
- "@webex/webex-core": "3.0.0-beta.270",
51
+ "@webex/internal-plugin-conversation": "3.0.0-beta.271",
52
+ "@webex/internal-plugin-device": "3.0.0-beta.271",
53
+ "@webex/internal-plugin-llm": "3.0.0-beta.271",
54
+ "@webex/internal-plugin-mercury": "3.0.0-beta.271",
55
+ "@webex/internal-plugin-metrics": "3.0.0-beta.271",
56
+ "@webex/internal-plugin-support": "3.0.0-beta.271",
57
+ "@webex/internal-plugin-user": "3.0.0-beta.271",
58
+ "@webex/media-helpers": "3.0.0-beta.271",
59
+ "@webex/plugin-people": "3.0.0-beta.271",
60
+ "@webex/plugin-rooms": "3.0.0-beta.271",
61
+ "@webex/webex-core": "3.0.0-beta.271",
62
62
  "ampersand-collection": "^2.0.2",
63
63
  "bowser": "^2.11.0",
64
64
  "btoa": "^1.2.1",
@@ -5093,6 +5093,9 @@ export default class Meeting extends StatelessWebexPlugin {
5093
5093
  this.mediaProperties.webrtcMediaConnection.on(Event.ROAP_MESSAGE_TO_SEND, (event) => {
5094
5094
  const LOG_HEADER = `Meeting:index#setupMediaConnectionListeners.ROAP_MESSAGE_TO_SEND --> correlationId=${this.correlationId}`;
5095
5095
 
5096
+ // @ts-ignore
5097
+ const cdl = this.webex.internal.newMetrics.callDiagnosticLatencies;
5098
+
5096
5099
  switch (event.roapMessage.messageType) {
5097
5100
  case 'OK':
5098
5101
  // @ts-ignore
@@ -5100,6 +5103,11 @@ export default class Meeting extends StatelessWebexPlugin {
5100
5103
  name: 'client.media-engine.remote-sdp-received',
5101
5104
  options: {meetingId: this.id},
5102
5105
  });
5106
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_OFFER_TO_ANSWER_LATENCY, {
5107
+ correlation_id: this.correlationId,
5108
+ latency: cdl.getLocalSDPGenRemoteSDPRecv(),
5109
+ meetingId: this.id,
5110
+ });
5103
5111
 
5104
5112
  logRequest(
5105
5113
  this.roap.sendRoapOK({
@@ -5292,6 +5300,10 @@ export default class Meeting extends StatelessWebexPlugin {
5292
5300
  LoggerProxy.logger.info(
5293
5301
  `Meeting:index#setupMediaConnectionListeners --> correlationId=${this.correlationId} connection state changed to ${event.state}`
5294
5302
  );
5303
+
5304
+ // @ts-ignore
5305
+ const cdl = this.webex.internal.newMetrics.callDiagnosticLatencies;
5306
+
5295
5307
  switch (event.state) {
5296
5308
  case ConnectionState.Connecting:
5297
5309
  // @ts-ignore
@@ -5313,6 +5325,7 @@ export default class Meeting extends StatelessWebexPlugin {
5313
5325
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.CONNECTION_SUCCESS, {
5314
5326
  correlation_id: this.correlationId,
5315
5327
  locus_id: this.locusId,
5328
+ latency: cdl.getICESetupTime(),
5316
5329
  });
5317
5330
  this.setNetworkStatus(NETWORK_STATUS.CONNECTED);
5318
5331
  this.reconnectionManager.iceReconnected();
@@ -5692,12 +5705,35 @@ export default class Meeting extends StatelessWebexPlugin {
5692
5705
  promises.push(this.setLocalShareAudioStream(localStreams.screenShare.audio));
5693
5706
  }
5694
5707
 
5708
+ // @ts-ignore
5709
+ const cdl = this.webex.internal.newMetrics.callDiagnosticLatencies;
5710
+
5695
5711
  return Promise.all(promises)
5696
- .then(() => this.roap.doTurnDiscovery(this, false))
5712
+ .then(() => {
5713
+ // @ts-ignore
5714
+ this.webex.internal.newMetrics.submitInternalEvent({
5715
+ name: 'internal.client.add-media.turn-discovery.start',
5716
+ });
5717
+
5718
+ return this.roap.doTurnDiscovery(this, false);
5719
+ })
5697
5720
  .then(async (turnDiscoveryObject) => {
5698
5721
  ({turnDiscoverySkippedReason} = turnDiscoveryObject);
5699
5722
  turnServerUsed = !turnDiscoverySkippedReason;
5700
5723
 
5724
+ // @ts-ignore
5725
+ this.webex.internal.newMetrics.submitInternalEvent({
5726
+ name: 'internal.client.add-media.turn-discovery.end',
5727
+ });
5728
+
5729
+ if (turnServerUsed) {
5730
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_LATENCY, {
5731
+ correlation_id: this.correlationId,
5732
+ latency: cdl.getTurnDiscoveryTime(),
5733
+ turnServerUsed,
5734
+ });
5735
+ }
5736
+
5701
5737
  const {turnServerInfo} = turnDiscoveryObject;
5702
5738
 
5703
5739
  const mc = await this.createMediaConnection(turnServerInfo, bundlePolicy);
@@ -61,6 +61,8 @@ const BEHAVIORAL_METRICS = {
61
61
  LOCUS_DELTA_OUT_OF_ORDER: 'js_sdk_locus_delta_ooo',
62
62
  PERMISSION_TOKEN_REFRESH: 'js_sdk_permission_token_refresh',
63
63
  PERMISSION_TOKEN_REFRESH_ERROR: 'js_sdk_permission_token_refresh_error',
64
+ TURN_DISCOVERY_LATENCY: 'js_sdk_turn_discovery_latency',
65
+ ROAP_OFFER_TO_ANSWER_LATENCY: 'js_sdk_roap_offer_to_answer_latency',
64
66
  };
65
67
 
66
68
  export {BEHAVIORAL_METRICS as default};
@@ -30,6 +30,7 @@ import {
30
30
  SELF_POLICY,
31
31
  IP_VERSION,
32
32
  ERROR_DICTIONARY,
33
+ NETWORK_STATUS,
33
34
  } from '@webex/plugin-meetings/src/constants';
34
35
  import * as InternalMediaCoreModule from '@webex/internal-media-core';
35
36
  import {
@@ -69,6 +70,7 @@ import {MediaRequestManager} from '@webex/plugin-meetings/src/multistream/mediaR
69
70
  import * as ReceiveSlotManagerModule from '@webex/plugin-meetings/src/multistream/receiveSlotManager';
70
71
  import * as SendSlotManagerModule from '@webex/plugin-meetings/src/multistream/sendSlotManager';
71
72
 
73
+ import CallDiagnosticLatencies from '@webex/internal-plugin-metrics/src/call-diagnostic/call-diagnostic-metrics-latencies';
72
74
  import LLM from '@webex/internal-plugin-llm';
73
75
  import Mercury from '@webex/internal-plugin-mercury';
74
76
  import Breakouts from '@webex/plugin-meetings/src/breakouts';
@@ -226,6 +228,10 @@ describe('plugin-meetings', () => {
226
228
  getReachabilityMetrics: sinon.stub().resolves({}),
227
229
  };
228
230
  webex.internal.llm.on = sinon.stub();
231
+ webex.internal.newMetrics.callDiagnosticLatencies = new CallDiagnosticLatencies(
232
+ {},
233
+ {parent: webex}
234
+ );
229
235
  membersSpy = sinon.spy(MembersImport, 'default');
230
236
  meetingRequestSpy = sinon.spy(MeetingRequestImport, 'default');
231
237
 
@@ -1186,22 +1192,42 @@ describe('plugin-meetings', () => {
1186
1192
  const error = await assert.isRejected(meeting.addMedia());
1187
1193
 
1188
1194
  assert.isNull(meeting.statsAnalyzer);
1189
- assert(Metrics.sendBehavioralMetric.calledOnce);
1190
- assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADD_MEDIA_FAILURE, {
1191
- correlation_id: meeting.correlationId,
1192
- locus_id: meeting.locusUrl.split('/').pop(),
1193
- reason: error.message,
1194
- stack: error.stack,
1195
- code: error.code,
1196
- turnDiscoverySkippedReason: undefined,
1197
- turnServerUsed: true,
1198
- isMultistream: false,
1199
- signalingState: 'unknown',
1200
- connectionState: 'unknown',
1201
- iceConnectionState: 'unknown',
1202
- someReachabilityMetric1: 'some value1',
1203
- someReachabilityMetric2: 'some value2',
1195
+ assert(webex.internal.newMetrics.submitInternalEvent.calledTwice);
1196
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.firstCall, {
1197
+ name: 'internal.client.add-media.turn-discovery.start',
1204
1198
  });
1199
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.secondCall, {
1200
+ name: 'internal.client.add-media.turn-discovery.end',
1201
+ });
1202
+ assert(Metrics.sendBehavioralMetric.calledTwice);
1203
+ assert.calledWith(
1204
+ Metrics.sendBehavioralMetric.firstCall,
1205
+ BEHAVIORAL_METRICS.TURN_DISCOVERY_LATENCY,
1206
+ {
1207
+ correlation_id: meeting.correlationId,
1208
+ turnServerUsed: true,
1209
+ latency: undefined,
1210
+ }
1211
+ );
1212
+ assert.calledWith(
1213
+ Metrics.sendBehavioralMetric.secondCall,
1214
+ BEHAVIORAL_METRICS.ADD_MEDIA_FAILURE,
1215
+ {
1216
+ correlation_id: meeting.correlationId,
1217
+ locus_id: meeting.locusUrl.split('/').pop(),
1218
+ reason: error.message,
1219
+ stack: error.stack,
1220
+ code: error.code,
1221
+ turnDiscoverySkippedReason: undefined,
1222
+ turnServerUsed: true,
1223
+ isMultistream: false,
1224
+ signalingState: 'unknown',
1225
+ connectionState: 'unknown',
1226
+ iceConnectionState: 'unknown',
1227
+ someReachabilityMetric1: 'some value1',
1228
+ someReachabilityMetric2: 'some value2',
1229
+ }
1230
+ );
1205
1231
  });
1206
1232
 
1207
1233
  it('checks metrics called with skipped reason config', async () => {
@@ -1211,6 +1237,13 @@ describe('plugin-meetings', () => {
1211
1237
  meeting.meetingState = 'ACTIVE';
1212
1238
  await meeting.addMedia().catch((err) => {
1213
1239
  assert.exists(err);
1240
+ assert(webex.internal.newMetrics.submitInternalEvent.calledTwice);
1241
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.firstCall, {
1242
+ name: 'internal.client.add-media.turn-discovery.start',
1243
+ });
1244
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.secondCall, {
1245
+ name: 'internal.client.add-media.turn-discovery.end',
1246
+ });
1214
1247
  assert(Metrics.sendBehavioralMetric.calledOnce);
1215
1248
  assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADD_MEDIA_FAILURE, {
1216
1249
  correlation_id: meeting.correlationId,
@@ -1237,9 +1270,25 @@ describe('plugin-meetings', () => {
1237
1270
  });
1238
1271
  const result = await assert.isRejected(meeting.addMedia());
1239
1272
 
1240
- assert(Metrics.sendBehavioralMetric.calledOnce);
1273
+ assert(webex.internal.newMetrics.submitInternalEvent.calledTwice);
1274
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.firstCall, {
1275
+ name: 'internal.client.add-media.turn-discovery.start',
1276
+ });
1277
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.secondCall, {
1278
+ name: 'internal.client.add-media.turn-discovery.end',
1279
+ });
1280
+ assert(Metrics.sendBehavioralMetric.calledTwice);
1241
1281
  assert.calledWith(
1242
- Metrics.sendBehavioralMetric,
1282
+ Metrics.sendBehavioralMetric.firstCall,
1283
+ BEHAVIORAL_METRICS.TURN_DISCOVERY_LATENCY,
1284
+ {
1285
+ correlation_id: meeting.correlationId,
1286
+ turnServerUsed: true,
1287
+ latency: undefined,
1288
+ }
1289
+ );
1290
+ assert.calledWith(
1291
+ Metrics.sendBehavioralMetric.secondCall,
1243
1292
  BEHAVIORAL_METRICS.ADD_MEDIA_FAILURE,
1244
1293
  sinon.match({
1245
1294
  correlation_id: meeting.correlationId,
@@ -1278,6 +1327,23 @@ describe('plugin-meetings', () => {
1278
1327
  meeting.statsAnalyzer = {stopAnalyzer: sinon.stub().resolves()};
1279
1328
  const error = await assert.isRejected(meeting.addMedia());
1280
1329
 
1330
+ assert(webex.internal.newMetrics.submitInternalEvent.calledTwice);
1331
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.firstCall, {
1332
+ name: 'internal.client.add-media.turn-discovery.start',
1333
+ });
1334
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.secondCall, {
1335
+ name: 'internal.client.add-media.turn-discovery.end',
1336
+ });
1337
+ assert(Metrics.sendBehavioralMetric.calledTwice);
1338
+ assert.calledWith(
1339
+ Metrics.sendBehavioralMetric.firstCall,
1340
+ BEHAVIORAL_METRICS.TURN_DISCOVERY_LATENCY,
1341
+ {
1342
+ correlation_id: meeting.correlationId,
1343
+ turnServerUsed: true,
1344
+ latency: undefined,
1345
+ }
1346
+ );
1281
1347
  assert.calledWith(
1282
1348
  Metrics.sendBehavioralMetric,
1283
1349
  BEHAVIORAL_METRICS.ADD_MEDIA_FAILURE,
@@ -1297,7 +1363,6 @@ describe('plugin-meetings', () => {
1297
1363
  );
1298
1364
 
1299
1365
  assert.isNull(meeting.statsAnalyzer);
1300
- assert(Metrics.sendBehavioralMetric.calledOnce);
1301
1366
  });
1302
1367
 
1303
1368
  it('should include the peer connection properties correctly for transcoded', async () => {
@@ -1318,6 +1383,23 @@ describe('plugin-meetings', () => {
1318
1383
  meeting.statsAnalyzer = {stopAnalyzer: sinon.stub().resolves()};
1319
1384
  const error = await assert.isRejected(meeting.addMedia());
1320
1385
 
1386
+ assert(webex.internal.newMetrics.submitInternalEvent.calledTwice);
1387
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.firstCall, {
1388
+ name: 'internal.client.add-media.turn-discovery.start',
1389
+ });
1390
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.secondCall, {
1391
+ name: 'internal.client.add-media.turn-discovery.end',
1392
+ });
1393
+ assert(Metrics.sendBehavioralMetric.calledTwice);
1394
+ assert.calledWith(
1395
+ Metrics.sendBehavioralMetric.firstCall,
1396
+ BEHAVIORAL_METRICS.TURN_DISCOVERY_LATENCY,
1397
+ {
1398
+ correlation_id: meeting.correlationId,
1399
+ turnServerUsed: true,
1400
+ latency: undefined,
1401
+ }
1402
+ );
1321
1403
  assert.calledWith(
1322
1404
  Metrics.sendBehavioralMetric,
1323
1405
  BEHAVIORAL_METRICS.ADD_MEDIA_FAILURE,
@@ -1337,7 +1419,6 @@ describe('plugin-meetings', () => {
1337
1419
  );
1338
1420
 
1339
1421
  assert.isNull(meeting.statsAnalyzer);
1340
- assert(Metrics.sendBehavioralMetric.calledOnce);
1341
1422
  });
1342
1423
 
1343
1424
  it('should work the second time addMedia is called in case the first time fails', async () => {
@@ -1400,6 +1481,13 @@ describe('plugin-meetings', () => {
1400
1481
  const checkWorking = ({allowMediaInLobby} = {}) => {
1401
1482
  assert.calledOnce(meeting.roap.doTurnDiscovery);
1402
1483
  assert.calledWith(meeting.roap.doTurnDiscovery, meeting, false);
1484
+ assert(webex.internal.newMetrics.submitInternalEvent.calledTwice);
1485
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.firstCall, {
1486
+ name: 'internal.client.add-media.turn-discovery.start',
1487
+ });
1488
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent.secondCall, {
1489
+ name: 'internal.client.add-media.turn-discovery.end',
1490
+ });
1403
1491
  assert.calledOnce(meeting.mediaProperties.setMediaDirection);
1404
1492
  assert.calledOnce(Media.createMediaConnection);
1405
1493
  assert.calledWith(
@@ -1562,15 +1650,19 @@ describe('plugin-meetings', () => {
1562
1650
  mediaSettings: {},
1563
1651
  });
1564
1652
 
1565
- assert.calledOnce(Metrics.sendBehavioralMetric);
1566
- assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADD_MEDIA_SUCCESS, {
1567
- correlation_id: meeting.correlationId,
1568
- locus_id: meeting.locusUrl.split('/').pop(),
1569
- connectionType: 'udp',
1570
- isMultistream: false,
1571
- someReachabilityMetric1: 'some value1',
1572
- someReachabilityMetric2: 'some value2'
1573
- });
1653
+ assert.calledTwice(Metrics.sendBehavioralMetric);
1654
+ assert.calledWith(
1655
+ Metrics.sendBehavioralMetric.secondCall,
1656
+ BEHAVIORAL_METRICS.ADD_MEDIA_SUCCESS,
1657
+ {
1658
+ correlation_id: meeting.correlationId,
1659
+ locus_id: meeting.locusUrl.split('/').pop(),
1660
+ connectionType: 'udp',
1661
+ isMultistream: false,
1662
+ someReachabilityMetric1: 'some value1',
1663
+ someReachabilityMetric2: 'some value2',
1664
+ }
1665
+ );
1574
1666
 
1575
1667
  assert.called(webex.internal.newMetrics.submitClientEvent);
1576
1668
  assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
@@ -4846,6 +4938,47 @@ describe('plugin-meetings', () => {
4846
4938
  });
4847
4939
  });
4848
4940
 
4941
+ describe('submitClientEvent on connectionSuccess', () => {
4942
+ it('sends client.ice.end when connectionSuccess on CONNECTION_STATE_CHANGED event', () => {
4943
+ meeting.reconnectionManager = new ReconnectionManager(meeting);
4944
+ meeting.reconnectionManager.iceReconnected = sinon.stub().returns(undefined);
4945
+ meeting.setNetworkStatus = sinon.stub().returns(undefined);
4946
+ meeting.statsAnalyzer = {startAnalyzer: sinon.stub()};
4947
+ meeting.mediaProperties.webrtcMediaConnection = {
4948
+ // mock the on() method and store all the listeners
4949
+ on: sinon.stub().callsFake((event, listener) => {
4950
+ eventListeners[event] = listener;
4951
+ }),
4952
+ };
4953
+
4954
+ meeting.setupMediaConnectionListeners();
4955
+ eventListeners[Event.CONNECTION_STATE_CHANGED]({
4956
+ state: 'Connected',
4957
+ });
4958
+ assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
4959
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
4960
+ name: 'client.ice.end',
4961
+ options: {
4962
+ meetingId: meeting.id,
4963
+ },
4964
+ });
4965
+ assert.calledOnce(Metrics.sendBehavioralMetric);
4966
+ assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.CONNECTION_SUCCESS, {
4967
+ correlation_id: meeting.correlationId,
4968
+ locus_id: meeting.locusId,
4969
+ latency: undefined,
4970
+ });
4971
+ assert.calledOnce(meeting.setNetworkStatus);
4972
+ assert.calledWith(meeting.setNetworkStatus, NETWORK_STATUS.CONNECTED);
4973
+ assert.calledOnce(meeting.reconnectionManager.iceReconnected);
4974
+ assert.calledOnce(meeting.statsAnalyzer.startAnalyzer);
4975
+ assert.calledWith(
4976
+ meeting.statsAnalyzer.startAnalyzer,
4977
+ meeting.mediaProperties.webrtcMediaConnection
4978
+ );
4979
+ });
4980
+ });
4981
+
4849
4982
  describe('should send correct metrics for ROAP_FAILURE event', () => {
4850
4983
  const fakeErrorMessage = 'test error';
4851
4984
  const fakeRootCauseName = 'root cause name';
@@ -5008,6 +5141,17 @@ describe('plugin-meetings', () => {
5008
5141
  mediaId: meeting.mediaId,
5009
5142
  correlationId: meeting.correlationId,
5010
5143
  });
5144
+
5145
+ assert.calledOnce(Metrics.sendBehavioralMetric);
5146
+ assert.calledWith(
5147
+ Metrics.sendBehavioralMetric,
5148
+ BEHAVIORAL_METRICS.ROAP_OFFER_TO_ANSWER_LATENCY,
5149
+ {
5150
+ correlation_id: meeting.correlationId,
5151
+ meetingId: meeting.id,
5152
+ latency: undefined,
5153
+ }
5154
+ );
5011
5155
  });
5012
5156
 
5013
5157
  it('handles OFFER message correctly', () => {