@webex/plugin-meetings 2.14.1 → 2.14.4

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.
@@ -57,7 +57,11 @@ var BEHAVIORAL_METRICS = {
57
57
  ADHOC_MEETING_FAILURE: 'js_sdk_adhoc_meeting_failure',
58
58
  VERIFY_PASSWORD_SUCCESS: 'js_sdk_verify_password_success',
59
59
  VERIFY_PASSWORD_ERROR: 'js_sdk_verify_password_error',
60
- VERIFY_CAPTCHA_ERROR: 'js_sdk_verify_captcha_error'
60
+ VERIFY_CAPTCHA_ERROR: 'js_sdk_verify_captcha_error',
61
+ MOVE_TO_SUCCESS: 'js_sdk_move_to_success',
62
+ MOVE_TO_FAILURE: 'js_sdk_move_to_failure',
63
+ MOVE_FROM_SUCCESS: 'js_sdk_move_from_success',
64
+ MOVE_FROM_FAILURE: 'js_sdk_move_from_failure'
61
65
  };
62
66
  exports.default = BEHAVIORAL_METRICS;
63
67
  //# 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","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","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","RECEIVE_TRANSCRIPTION_FAILURE","ENABLE_BNR_SUCCESS","ENABLE_BNR_FAILURE","DISABLE_BNR_SUCCESS","DISABLE_BNR_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"],"sources":["constants.js"],"sourcesContent":["\n// 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 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\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 RECEIVE_TRANSCRIPTION_FAILURE: 'js_sdk_receive_transcription_failure',\n ENABLE_BNR_SUCCESS: 'js_sdk_enable_bnr_success',\n ENABLE_BNR_FAILURE: 'js_sdk_enable_bnr_failure',\n DISABLE_BNR_SUCCESS: 'js_sdk_disable_bnr_success',\n DISABLE_BNR_FAILURE: 'js_sdk_disable_bnr_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};\n\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":";;;;;;;;;AACA;AAEA,IAAMA,kBAAkB,GAAG;EACzBC,4BAA4B,EAAE,qCADL;EAEzBC,6BAA6B,EAAE,sCAFN;EAGzBC,0BAA0B,EAAE,mCAHH;EAIzBC,2BAA2B,EAAE,oCAJJ;EAKzBC,YAAY,EAAE,qBALW;EAMzBC,YAAY,EAAE,sBANW;EAOzBC,iBAAiB,EAAE,0BAPM;EAQzBC,iBAAiB,EAAE,2BARM;EASzBC,kBAAkB,EAAE,2BATK;EAUzBC,kBAAkB,EAAE,4BAVK;EAWzBC,qBAAqB,EAAE,8BAXE;EAYzBC,uBAAuB,EAAE,oCAZA;EAazBC,yBAAyB,EAAE,sCAbF;EAczBC,sBAAsB,EAAE,gCAdC;EAezBC,yBAAyB,EAAE,mCAfF;EAgBzBC,uBAAuB,EAAE,iCAhBA;EAkBzBC,4BAA4B,EAAE,qCAlBL;EAmBzBC,sBAAsB,EAAE,+BAnBC;EAoBzBC,yBAAyB,EAAE,mCApBF;EAqBzBC,0BAA0B,EAAE,mCArBH;EAsBzBC,qBAAqB,EAAE,+BAtBE;EAuBzBC,sCAAsC,EAAE,gDAvBf;EAwBzBC,qCAAqC,EAAE,+CAxBd;EAyBzBC,kBAAkB,EAAE,4BAzBK;EA0BzBC,kBAAkB,EAAE,4BA1BK;EA2BzBC,2BAA2B,EAAE,qCA3BJ;EA4BzBC,0BAA0B,EAAE,oCA5BH;EA6BzBC,mBAAmB,EAAE,4BA7BI;EA8BzBC,oBAAoB,EAAE,6BA9BG;EA+BzBC,oBAAoB,EAAE,8BA/BG;EAgCzBC,oBAAoB,EAAE,8BAhCG;EAiCzBC,oBAAoB,EAAE,8BAjCG;EAkCzBC,mBAAmB,EAAE,6BAlCI;EAmCzBC,oBAAoB,EAAE,4BAnCG;EAoCzBC,sBAAsB,EAAE,gCApCC;EAqCzBC,qBAAqB,EAAE,8BArCE;EAsCzBC,mBAAmB,EAAE,4BAtCI;EAuCzBC,6BAA6B,EAAE,sCAvCN;EAwCzBC,kBAAkB,EAAE,2BAxCK;EAyCzBC,kBAAkB,EAAE,2BAzCK;EA0CzBC,mBAAmB,EAAE,4BA1CI;EA2CzBC,mBAAmB,EAAE,4BA3CI;EA4CzBC,6BAA6B,EAAE,sCA5CN;EA6CzBC,6BAA6B,EAAE,sCA7CN;EA8CzBC,qBAAqB,EAAE,8BA9CE;EA+CzBC,qBAAqB,EAAE,8BA/CE;EAgDzBC,uBAAuB,EAAE,gCAhDA;EAiDzBC,qBAAqB,EAAE,8BAjDE;EAkDzBC,oBAAoB,EAAE;AAlDG,CAA3B"}
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","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","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","RECEIVE_TRANSCRIPTION_FAILURE","ENABLE_BNR_SUCCESS","ENABLE_BNR_FAILURE","DISABLE_BNR_SUCCESS","DISABLE_BNR_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"],"sources":["constants.js"],"sourcesContent":["\n// 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 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\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 RECEIVE_TRANSCRIPTION_FAILURE: 'js_sdk_receive_transcription_failure',\n ENABLE_BNR_SUCCESS: 'js_sdk_enable_bnr_success',\n ENABLE_BNR_FAILURE: 'js_sdk_enable_bnr_failure',\n DISABLE_BNR_SUCCESS: 'js_sdk_disable_bnr_success',\n DISABLE_BNR_FAILURE: 'js_sdk_disable_bnr_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};\n\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":";;;;;;;;;AACA;AAEA,IAAMA,kBAAkB,GAAG;EACzBC,4BAA4B,EAAE,qCADL;EAEzBC,6BAA6B,EAAE,sCAFN;EAGzBC,0BAA0B,EAAE,mCAHH;EAIzBC,2BAA2B,EAAE,oCAJJ;EAKzBC,YAAY,EAAE,qBALW;EAMzBC,YAAY,EAAE,sBANW;EAOzBC,iBAAiB,EAAE,0BAPM;EAQzBC,iBAAiB,EAAE,2BARM;EASzBC,kBAAkB,EAAE,2BATK;EAUzBC,kBAAkB,EAAE,4BAVK;EAWzBC,qBAAqB,EAAE,8BAXE;EAYzBC,uBAAuB,EAAE,oCAZA;EAazBC,yBAAyB,EAAE,sCAbF;EAczBC,sBAAsB,EAAE,gCAdC;EAezBC,yBAAyB,EAAE,mCAfF;EAgBzBC,uBAAuB,EAAE,iCAhBA;EAkBzBC,4BAA4B,EAAE,qCAlBL;EAmBzBC,sBAAsB,EAAE,+BAnBC;EAoBzBC,yBAAyB,EAAE,mCApBF;EAqBzBC,0BAA0B,EAAE,mCArBH;EAsBzBC,qBAAqB,EAAE,+BAtBE;EAuBzBC,sCAAsC,EAAE,gDAvBf;EAwBzBC,qCAAqC,EAAE,+CAxBd;EAyBzBC,kBAAkB,EAAE,4BAzBK;EA0BzBC,kBAAkB,EAAE,4BA1BK;EA2BzBC,2BAA2B,EAAE,qCA3BJ;EA4BzBC,0BAA0B,EAAE,oCA5BH;EA6BzBC,mBAAmB,EAAE,4BA7BI;EA8BzBC,oBAAoB,EAAE,6BA9BG;EA+BzBC,oBAAoB,EAAE,8BA/BG;EAgCzBC,oBAAoB,EAAE,8BAhCG;EAiCzBC,oBAAoB,EAAE,8BAjCG;EAkCzBC,mBAAmB,EAAE,6BAlCI;EAmCzBC,oBAAoB,EAAE,4BAnCG;EAoCzBC,sBAAsB,EAAE,gCApCC;EAqCzBC,qBAAqB,EAAE,8BArCE;EAsCzBC,mBAAmB,EAAE,4BAtCI;EAuCzBC,6BAA6B,EAAE,sCAvCN;EAwCzBC,kBAAkB,EAAE,2BAxCK;EAyCzBC,kBAAkB,EAAE,2BAzCK;EA0CzBC,mBAAmB,EAAE,4BA1CI;EA2CzBC,mBAAmB,EAAE,4BA3CI;EA4CzBC,6BAA6B,EAAE,sCA5CN;EA6CzBC,6BAA6B,EAAE,sCA7CN;EA8CzBC,qBAAqB,EAAE,8BA9CE;EA+CzBC,qBAAqB,EAAE,8BA/CE;EAgDzBC,uBAAuB,EAAE,gCAhDA;EAiDzBC,qBAAqB,EAAE,8BAjDE;EAkDzBC,oBAAoB,EAAE,6BAlDG;EAmDzBC,eAAe,EAAE,wBAnDQ;EAoDzBC,eAAe,EAAE,wBApDQ;EAqDzBC,iBAAiB,EAAE,0BArDM;EAsDzBC,iBAAiB,EAAE;AAtDM,CAA3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "2.14.1",
3
+ "version": "2.14.4",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "contributors": [
@@ -24,19 +24,19 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@babel/runtime-corejs2": "^7.14.8",
27
- "@webex/webex-core": "2.14.1",
28
- "@webex/internal-plugin-mercury": "2.14.1",
29
- "@webex/internal-plugin-conversation": "2.14.1",
27
+ "@webex/webex-core": "2.14.4",
28
+ "@webex/internal-plugin-mercury": "2.14.4",
29
+ "@webex/internal-plugin-conversation": "2.14.4",
30
30
  "webrtc-adapter": "^7.7.0",
31
31
  "lodash": "^4.17.21",
32
32
  "uuid": "^3.3.2",
33
33
  "global": "^4.4.0",
34
34
  "ip-anonymize": "^0.1.0",
35
- "@webex/common": "2.14.1",
35
+ "@webex/common": "2.14.4",
36
36
  "bowser": "^2.11.0",
37
37
  "sdp-transform": "^2.12.0",
38
38
  "readable-stream": "^3.6.0",
39
- "@webex/common-timers": "2.14.1",
39
+ "@webex/common-timers": "2.14.4",
40
40
  "btoa": "^1.2.1",
41
41
  "@webex/internal-media-core": "^0.0.6-beta",
42
42
  "javascript-state-machine": "^3.1.0",
@@ -18,7 +18,7 @@ export default class ParameterError extends Error {
18
18
  }
19
19
 
20
20
  this.name = ERROR_DICTIONARY.PARAMETER.NAME;
21
- this.sdkMessage = ERROR_DICTIONARY.PARAMETER.MESSAGE;
21
+ this.sdkMessage = message || ERROR_DICTIONARY.PARAMETER.MESSAGE;
22
22
  this.error = error;
23
23
 
24
24
  this.code = ERROR_DICTIONARY.PARAMETER.CODE;
package/src/constants.js CHANGED
@@ -129,6 +129,7 @@ export const _UNKNOWN_ = 'UNKNOWN';
129
129
 
130
130
  export const _WEBEX_MEETING_ = 'WEBEX_MEETING';
131
131
  export const _WAIT_ = 'WAIT';
132
+ export const _MOVE_MEDIA_ = 'MOVE_MEDIA';
132
133
 
133
134
  // *********** PARTICIPANT DELTAS ***********
134
135
  export const PARTICIPANT_DELTAS = {
@@ -637,6 +638,7 @@ export const LOCUS = {
637
638
  export const LOCUSINFO = {
638
639
  EVENTS: {
639
640
  CONTROLS_RECORDING_UPDATED: 'CONTROLS_RECORDING_UPDATED',
641
+ CONTROLS_MEETING_TRANSCRIBE_UPDATED: 'CONTROLS_MEETING_TRANSCRIBE_UPDATED',
640
642
  CONTROLS_MEETING_CONTAINER_UPDATED: 'CONTROLS_MEETING_CONTAINER_UPDATED',
641
643
  SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',
642
644
  SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',
@@ -652,6 +654,7 @@ export const LOCUSINFO = {
652
654
  MEETING_INFO_UPDATED: 'MEETING_INFO_UPDATED',
653
655
  MEETING_LOCKED: 'MEETING_LOCKED',
654
656
  MEETING_UNLOCKED: 'MEETING_UNLOCKED',
657
+ SELF_OBSERVING: 'SELF_OBSERVING',
655
658
  DISCONNECT_DUE_TO_INACTIVITY: 'DISCONNECT_DUE_TO_INACTIVITY'
656
659
  }
657
660
  };
@@ -35,6 +35,13 @@ ControlsUtils.parse = (controls) => {
35
35
  };
36
36
  }
37
37
 
38
+ if (controls && controls.transcribe) {
39
+ parsedControls.transcribe = {
40
+ transcribing: controls.transcribe.transcribing,
41
+ caption: controls.transcribe.caption
42
+ };
43
+ }
44
+
38
45
  return parsedControls;
39
46
  };
40
47
 
@@ -63,6 +70,10 @@ ControlsUtils.getControls = (oldControls, newControls) => {
63
70
  hasMeetingContainerChanged: current?.meetingContainer &&
64
71
  !isEqual(previous?.meetingContainer?.meetingContainerUrl,
65
72
  current?.meetingContainer?.meetingContainerUrl),
73
+
74
+ hasTranscribeChanged: current?.transcribe &&
75
+ !isEqual(previous?.transcribe?.transcribing, current?.transcribe?.transcribing) && // upon first join, previous?.record?.recording = undefined; thus, never going to be equal and will always return true
76
+ (previous?.transcribe?.transcribing || current?.transcribe?.transcribing), // therefore, condition added to prevent false firings of #meeting:recording:stopped upon first joining a meeting
66
77
  }
67
78
  };
68
79
  };
@@ -618,6 +618,7 @@ export default class LocusInfo extends EventsScope {
618
618
  hasRecordingChanged,
619
619
  hasRecordingPausedChanged,
620
620
  hasMeetingContainerChanged,
621
+ hasTranscribeChanged
621
622
  },
622
623
  current
623
624
  } = ControlsUtils.getControls(this.controls, controls);
@@ -667,6 +668,21 @@ export default class LocusInfo extends EventsScope {
667
668
  );
668
669
  }
669
670
 
671
+ if (hasTranscribeChanged) {
672
+ const {transcribing, caption} = current.transcribe;
673
+
674
+ this.emitScoped(
675
+ {
676
+ file: 'locus-info',
677
+ function: 'updateControls'
678
+ },
679
+ LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,
680
+ {
681
+ transcribing, caption
682
+ }
683
+ );
684
+ }
685
+
670
686
  this.controls = controls;
671
687
  }
672
688
  }
@@ -1015,6 +1031,16 @@ export default class LocusInfo extends EventsScope {
1015
1031
  );
1016
1032
  }
1017
1033
 
1034
+ if (parsedSelves.updates.isUserObserving) {
1035
+ this.emitScoped(
1036
+ {
1037
+ file: 'locus-info',
1038
+ function: 'updateSelf'
1039
+ },
1040
+ LOCUSINFO.EVENTS.SELF_OBSERVING
1041
+ );
1042
+ }
1043
+
1018
1044
 
1019
1045
  this.emitScoped(
1020
1046
  {
@@ -4,6 +4,8 @@ import {
4
4
  _JOINED_,
5
5
  _CALL_,
6
6
  _WAIT_,
7
+ _MOVE_MEDIA_,
8
+ _OBSERVE_,
7
9
  _LEFT_,
8
10
  MEETING_END_REASON,
9
11
  MEDIA_STATE,
@@ -81,6 +83,7 @@ SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
81
83
  updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);
82
84
  updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);
83
85
  updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);
86
+ updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);
84
87
 
85
88
  updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);
86
89
  updates.audioStateChange = previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;
@@ -250,6 +253,15 @@ SelfUtils.moderatorChanged = (oldSelf, changedSelf) => {
250
253
  return oldSelf.moderator !== changedSelf.moderator;
251
254
  };
252
255
 
256
+
257
+ /**
258
+ * @param {Object} oldSelf
259
+ * @param {Object} changedSelf
260
+ * @returns {Boolean}
261
+ * @throws {Error} if changed self was undefined
262
+ */
263
+ SelfUtils.isDeviceObserving = (oldSelf, changedSelf) => oldSelf && oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ && changedSelf && changedSelf.joinedWith?.intent?.type === _OBSERVE_;
264
+
253
265
  /**
254
266
  * @param {Object} oldSelf
255
267
  * @param {Object} changedSelf
@@ -1593,6 +1593,24 @@ export default class Meeting extends StatelessWebexPlugin {
1593
1593
  {meetingContainerUrl}
1594
1594
  );
1595
1595
  });
1596
+
1597
+ this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,
1598
+ ({caption, transcribing}) => {
1599
+ if (transcribing && this.transcription && this.config.receiveTranscription) {
1600
+ this.receiveTranscription();
1601
+ }
1602
+ else if (!transcribing && this.transcription) {
1603
+ Trigger.trigger(
1604
+ this,
1605
+ {
1606
+ file: 'meeting/index',
1607
+ function: 'setupLocusControlsListener'
1608
+ },
1609
+ EVENT_TRIGGERS.MEETING_STOPPED_RECEIVING_TRANSCRIPTION,
1610
+ {caption, transcribing}
1611
+ );
1612
+ }
1613
+ });
1596
1614
  }
1597
1615
 
1598
1616
  /**
@@ -2885,7 +2903,8 @@ export default class Meeting extends StatelessWebexPlugin {
2885
2903
  const audioStopped = audioTrack && audioTrack.readyState === ENDED;
2886
2904
  const videoStopped = videoTrack && videoTrack.readyState === ENDED;
2887
2905
 
2888
- if (audioStopped && videoStopped) {
2906
+ // triggers event for audio and video stop , sometime either audio or video one of them exists
2907
+ if (audioStopped || videoStopped) {
2889
2908
  Trigger.trigger(
2890
2909
  this,
2891
2910
  {
@@ -2898,7 +2917,7 @@ export default class Meeting extends StatelessWebexPlugin {
2898
2917
  );
2899
2918
  }
2900
2919
  else if (audioTrack || videoTrack) {
2901
- LoggerProxy.logger.warn('Meeting:index#closeLocalStream --> Error: MediaStreamTrack.readyState is incorrect.');
2920
+ LoggerProxy.logger.warn('Meeting:index#closeLocalStream --> Warning: track might already been ended or unavaliable.');
2902
2921
  }
2903
2922
  });
2904
2923
  }
@@ -3397,7 +3416,7 @@ export default class Meeting extends StatelessWebexPlugin {
3397
3416
  * @throws TranscriptionNotSupportedError
3398
3417
  */
3399
3418
  isTranscriptionSupported() {
3400
- if (this.policy?.WEBEX_ASSISTANT_STATUS_ACTIVE) {
3419
+ if (this.locusInfo.controls.transcribe?.transcribing) {
3401
3420
  return true;
3402
3421
  }
3403
3422
 
@@ -3556,6 +3575,15 @@ export default class Meeting extends StatelessWebexPlugin {
3556
3575
  * Scenario D: Joining any other way (sip, pstn, conversationUrl, link just need to specify resourceId)
3557
3576
  */
3558
3577
  join(options = {}) {
3578
+ if (!this.webex.meetings.registered) {
3579
+ const errorMessage = 'Meeting:index#join --> Device not registered';
3580
+ const error = new Error(errorMessage);
3581
+
3582
+ LoggerProxy.logger.error(errorMessage);
3583
+
3584
+ return Promise.reject(error);
3585
+ }
3586
+
3559
3587
  // If a join request is being processed, refer to the deferred promise.
3560
3588
  if (this.deferJoin) {
3561
3589
  return this.deferJoin;
@@ -3868,7 +3896,7 @@ export default class Meeting extends StatelessWebexPlugin {
3868
3896
  mediaCapabilities: {
3869
3897
  rx: {
3870
3898
  audio: false,
3871
- share: false,
3899
+ share: true,
3872
3900
  share_audio: false,
3873
3901
  video: false,
3874
3902
  whiteboard: false
@@ -3886,16 +3914,73 @@ export default class Meeting extends StatelessWebexPlugin {
3886
3914
 
3887
3915
  Metrics.postEvent({event: eventType.MOVE_MEDIA, meeting: this});
3888
3916
 
3889
- return MeetingUtil.joinMeetingOptions(this, {resourceId, moveToResource: true}).then(() => {
3890
- this.meetingFiniteStateMachine.join();
3917
+ this.locusInfo.once(LOCUSINFO.EVENTS.SELF_OBSERVING, async () => {
3918
+ // Clean up the camera , microphone track and re initiate it
3891
3919
 
3892
- return this.updateMedia({
3893
- mediaSettings: {
3894
- sendVideo: false, receiveVideo: false, sendAudio: false, receiveAudio: false, sendShare: false, receiveShare: false
3920
+ try {
3921
+ if (this.isSharing) {
3922
+ await this.stopFloorRequest();
3895
3923
  }
3896
- }).then(() => Promise.resolve(this));
3924
+ const mediaSettings = {
3925
+ mediaDirection: {
3926
+ sendVideo: false,
3927
+ receiveVideo: false,
3928
+ sendAudio: false,
3929
+ receiveAudio: false,
3930
+ sendShare: false,
3931
+ receiveShare: true
3932
+ }
3933
+ };
3934
+
3935
+ // clean up the local tracks
3936
+ this.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
3937
+
3938
+ // close the existing local tracks
3939
+ await this.closeLocalStream();
3940
+ await this.closeLocalShare();
3941
+
3942
+ this.mediaProperties.unsetMediaTracks();
3943
+
3944
+
3945
+ // when a move to is intiated by the client , Locus delets the existing media node from the server as soon the DX answers the meeting
3946
+ // once the DX answers we establish connection back the media server with only receiveShare enabled
3947
+ await this.reconnectionManager.reconnectMedia(mediaSettings)
3948
+ .then(() => {
3949
+ Metrics.sendBehavioralMetric(
3950
+ BEHAVIORAL_METRICS.MOVE_TO_SUCCESS,
3951
+ );
3952
+ });
3953
+ }
3954
+ catch (error) {
3955
+ LoggerProxy.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
3956
+ Metrics.sendBehavioralMetric(
3957
+ BEHAVIORAL_METRICS.MOVE_TO_FAILURE,
3958
+ {
3959
+ correlation_id: this.correlationId,
3960
+ locus_id: this.locusUrl.split('/').pop(),
3961
+ reason: error.message,
3962
+ stack: error.stack
3963
+ }
3964
+ );
3965
+ }
3966
+ });
3967
+
3968
+ LoggerProxy.logger.info('Meeting:index#moveTo --> Initated moved to using resourceId', resourceId);
3969
+
3970
+ return MeetingUtil.joinMeetingOptions(this, {resourceId, moveToResource: true}).then(() => {
3971
+ this.meetingFiniteStateMachine.join();
3897
3972
  }).catch((error) => {
3898
3973
  this.meetingFiniteStateMachine.fail(error);
3974
+ Metrics.sendBehavioralMetric(
3975
+ BEHAVIORAL_METRICS.MOVE_TO_FAILURE,
3976
+ {
3977
+ correlation_id: this.correlationId,
3978
+ locus_id: this.locusUrl.split('/').pop(),
3979
+ reason: error.message,
3980
+ stack: error.stack
3981
+ }
3982
+ );
3983
+ LoggerProxy.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
3899
3984
 
3900
3985
  return Promise.reject(error);
3901
3986
  });
@@ -3909,54 +3994,38 @@ export default class Meeting extends StatelessWebexPlugin {
3909
3994
  * @memberof Meeting
3910
3995
  */
3911
3996
  moveFrom(resourceId) {
3997
+ // On moveFrom ask the developer to re capture it moveFrom then updateMedia
3912
3998
  if (!resourceId) {
3913
3999
  throw new ParameterError('Cannot move call without a resourceId.');
3914
4000
  }
3915
4001
  const oldCorrelationId = this.correlationId;
3916
4002
 
3917
- this.id = uuid.v4();
3918
-
3919
- this.webex.meetings.meetingCollection.set(this);
3920
-
3921
- Metrics.postEvent({
3922
- event: eventType.MEDIA_CAPABILITIES,
3923
- meeting: this,
3924
- data: {
3925
- mediaCapabilities: {
3926
- rx: {
3927
- audio: true,
3928
- share: true,
3929
- share_audio: true,
3930
- video: true,
3931
- whiteboard: true
3932
- },
3933
- tx: {
3934
- audio: true,
3935
- share: true,
3936
- share_audio: true,
3937
- video: true,
3938
- whiteboard: true
3939
- }
3940
- }
3941
- }
3942
- });
3943
4003
  Metrics.postEvent({event: eventType.MOVE_MEDIA, meeting: this});
3944
4004
 
3945
- return MeetingUtil.joinMeetingOptions(this).then((join) => this.getMediaStreams({sendAudio: true, sendVideo: true, sendShare: false})
3946
- .then(([localStream, localShare]) =>
3947
- this.updateMedia({
3948
- mediaSettings: {
3949
- sendAudio: true, receiveAudio: true, sendVideo: true, receiveVideo: true, sendShare: false, receiveShare: false
3950
- },
3951
- localStream,
3952
- localShare
3953
- })
3954
- .then(() => Promise.resolve(join)))
3955
- .then(() => MeetingUtil.leaveMeeting(this, {resourceId, correlationId: oldCorrelationId, moveMeeting: true})))
3956
- .then(() => {
3957
- this.webex.meetings.meetingCollection.delete(this.id);
4005
+ return MeetingUtil.joinMeetingOptions(this)
4006
+ .then(() => MeetingUtil.leaveMeeting(this, {
4007
+ resourceId,
4008
+ correlationId: oldCorrelationId,
4009
+ moveMeeting: true
4010
+ }).then(() => {
4011
+ this.resourceId = '';
4012
+ Metrics.sendBehavioralMetric(
4013
+ BEHAVIORAL_METRICS.MOVE_FROM_SUCCESS,
4014
+ );
4015
+ })).catch((error) => {
4016
+ this.meetingFiniteStateMachine.fail(error);
4017
+ Metrics.sendBehavioralMetric(
4018
+ BEHAVIORAL_METRICS.MOVE_FROM_FAILURE,
4019
+ {
4020
+ correlation_id: this.correlationId,
4021
+ locus_id: this.locusUrl.split('/').pop(),
4022
+ reason: error.message,
4023
+ stack: error.stack
4024
+ }
4025
+ );
4026
+ LoggerProxy.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
3958
4027
 
3959
- return Promise.resolve();
4028
+ return Promise.reject(error);
3960
4029
  });
3961
4030
  }
3962
4031
 
@@ -4423,7 +4492,9 @@ export default class Meeting extends StatelessWebexPlugin {
4423
4492
  if (!this.canUpdateMedia()) {
4424
4493
  return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.ALL, options);
4425
4494
  }
4426
- const {localStream, localShare, mediaSettings} = options;
4495
+ const {
4496
+ localStream, localShare, mediaSettings
4497
+ } = options;
4427
4498
 
4428
4499
  const previousSendShareStatus = this.mediaProperties.mediaDirection.sendShare;
4429
4500
 
@@ -4433,7 +4504,7 @@ export default class Meeting extends StatelessWebexPlugin {
4433
4504
  meetingId: this.id,
4434
4505
  remoteQualityLevel: this.mediaProperties.remoteQualityLevel,
4435
4506
  enableRtx: this.config.enableRtx,
4436
- enableExtmap: this.config.enableExtmap
4507
+ enableExtmap: this.config.enableExtmap,
4437
4508
  })
4438
4509
  .then((peerConnection) => {
4439
4510
  LoggerProxy.logger.info(`${LOG_HEADER} PeerConnection received from updateMedia, ${peerConnection}`);
@@ -4462,7 +4533,7 @@ export default class Meeting extends StatelessWebexPlugin {
4462
4533
  .sendRoapMediaRequest({
4463
4534
  sdp: this.mediaProperties.peerConnection.sdp,
4464
4535
  roapSeq: this.roapSeq,
4465
- meeting: this // or can pass meeting ID
4536
+ meeting: this, // or can pass meeting ID
4466
4537
  }),
4467
4538
  {
4468
4539
  header: `${LOG_HEADER} sendRoapMediaRequest being sent`,
@@ -51,7 +51,11 @@ const BEHAVIORAL_METRICS = {
51
51
  ADHOC_MEETING_FAILURE: 'js_sdk_adhoc_meeting_failure',
52
52
  VERIFY_PASSWORD_SUCCESS: 'js_sdk_verify_password_success',
53
53
  VERIFY_PASSWORD_ERROR: 'js_sdk_verify_password_error',
54
- VERIFY_CAPTCHA_ERROR: 'js_sdk_verify_captcha_error'
54
+ VERIFY_CAPTCHA_ERROR: 'js_sdk_verify_captcha_error',
55
+ MOVE_TO_SUCCESS: 'js_sdk_move_to_success',
56
+ MOVE_TO_FAILURE: 'js_sdk_move_to_failure',
57
+ MOVE_FROM_SUCCESS: 'js_sdk_move_from_success',
58
+ MOVE_FROM_FAILURE: 'js_sdk_move_from_failure'
55
59
  };
56
60
 
57
61