@webex/plugin-meetings 3.9.0-next.24 → 3.9.0-next.25
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 +4 -0
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +11 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +9 -0
- package/dist/locus-info/index.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +2 -0
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +64 -24
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +48 -14
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +3 -0
- package/dist/meeting/util.js.map +1 -1
- package/dist/member/index.js +9 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +10 -0
- package/dist/member/util.js.map +1 -1
- package/dist/types/constants.d.ts +3 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
- package/dist/types/meeting/index.d.ts +14 -0
- package/dist/types/meeting/request.d.ts +16 -0
- package/dist/types/meeting/util.d.ts +1 -0
- package/dist/types/member/index.d.ts +1 -0
- package/dist/types/member/util.d.ts +5 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +1 -1
- package/src/constants.ts +6 -0
- package/src/locus-info/controlsUtils.ts +18 -0
- package/src/locus-info/index.ts +9 -0
- package/src/meeting/in-meeting-actions.ts +4 -0
- package/src/meeting/index.ts +43 -0
- package/src/meeting/request.ts +38 -0
- package/src/meeting/util.ts +3 -0
- package/src/member/index.ts +10 -0
- package/src/member/util.ts +14 -0
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
- package/test/unit/spec/meeting/index.js +22 -0
- package/test/unit/spec/meeting/utils.js +1 -0
- package/test/unit/spec/member/util.js +24 -0
package/dist/member/util.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_types","require","_constants","_parameter","_interopRequireDefault","MemberUtil","canReclaimHost","participant","ParameterError","canReclaimHostRole","getControlsRoles","_participant$controls","_participant$controls2","controls","role","roles","isBrb","_participant$controls3","_participant$controls4","brb","enabled","hasRole","controlRole","_MemberUtil$getContro","some","type","hasCohost","ServerRoles","Cohost","hasModerator","Moderator","hasPresenter","Presenter","extractControlRoles","cohost","moderator","presenter","isUser","_USER_","isModerator","isGuest","guest","isDevice","_RESOURCE_ROOM_","isModeratorAssignmentProhibited","moderatorAssignmentNotAllowed","isPresenterAssignmentProhibited","presenterAssignmentNotAllowed","isSame","id","person","isNotAdmitted","status","devices","intent","_WAIT_","_IN_LOBBY_","_IN_MEETING_","isAudioMuted","isMuted","AUDIO_STATUS","AUDIO","isVideoMuted","VIDEO_STATUS","VIDEO","isHandRaised","_participant$controls5","_participant$controls6","hand","raised","isBreakoutsSupported","doesNotSupportBreakouts","isInterpretationSupported","doesNotSupportSiInterpreter","isLiveAnnotationSupported","annotatorAssignmentNotAllowed","statusAccessor","controlsAccessor","_participant$controls7","_participant$controls8","_participant$status","remoteMute","muted","localStatus","_RECEIVE_ONLY_","_SEND_RECEIVE_","getRecordingMember","record","recording","meta","modifiedBy","isRecording","localRecord","isRemovable","isSelf","isInMeeting","_CALL_","isMutable","extractStatus","length","_NOT_IN_MEETING_","state","_JOINED_","_IDLE_","foundDevice","find","device","_OBSERVE_","_LEFT_","extractId","extractMediaStatus","_participant$status2","_participant$status3","audio","audioStatus","video","videoStatus","extractName","name","extractPairedWithParticipantUrl","_participant$devices","participantUrl","forEach","_device$intents","intents","associatedWith","_default","exports","default"],"sources":["util.ts"],"sourcesContent":["import {\n IExternalRoles,\n ServerRoles,\n ServerRoleShape,\n IMediaStatus,\n Participant,\n ParticipantUrl,\n} from './types';\nimport {\n _USER_,\n _RESOURCE_ROOM_,\n _OBSERVE_,\n _WAIT_,\n _LEFT_,\n _JOINED_,\n _IDLE_,\n _IN_LOBBY_,\n _NOT_IN_MEETING_,\n _IN_MEETING_,\n AUDIO_STATUS,\n VIDEO_STATUS,\n _SEND_RECEIVE_,\n _RECEIVE_ONLY_,\n _CALL_,\n VIDEO,\n AUDIO,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst MemberUtil = {\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n canReclaimHost: (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'canReclaimHostRole could not be processed, participant is undefined.'\n );\n }\n\n return participant.canReclaimHostRole || false;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {[ServerRoleShape]}\n */\n getControlsRoles: (participant: Participant): Array<ServerRoleShape> =>\n participant?.controls?.role?.roles,\n\n /**\n * Checks if the participant has the brb status enabled.\n *\n * @param {Participant} participant - The locus participant object.\n * @returns {boolean} - True if the participant has brb enabled, false otherwise.\n */\n isBrb: (participant: Participant): boolean => participant.controls?.brb?.enabled || false,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @param {ServerRoles} controlRole the search role\n * @returns {Boolean}\n */\n hasRole: (participant: Participant, controlRole: ServerRoles): boolean =>\n MemberUtil.getControlsRoles(participant)?.some(\n (role) => role.type === controlRole && role.hasRole\n ),\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n hasCohost: (participant: Participant): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Cohost) || false,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n hasModerator: (participant: Participant): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Moderator) || false,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n hasPresenter: (participant: Participant): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Presenter) || false,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {IExternalRoles}\n */\n extractControlRoles: (participant: Participant): IExternalRoles => {\n const roles = {\n cohost: MemberUtil.hasCohost(participant),\n moderator: MemberUtil.hasModerator(participant),\n presenter: MemberUtil.hasPresenter(participant),\n };\n\n return roles;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isUser: (participant: Participant) => participant && participant.type === _USER_,\n\n isModerator: (participant: Participant) => participant && participant.moderator,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isGuest: (participant: Participant) => participant && participant.guest,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isDevice: (participant: Participant) => participant && participant.type === _RESOURCE_ROOM_,\n\n isModeratorAssignmentProhibited: (participant: Participant) =>\n participant && participant.moderatorAssignmentNotAllowed,\n\n isPresenterAssignmentProhibited: (participant: Participant) =>\n participant && participant.presenterAssignmentNotAllowed,\n\n /**\n * checks to see if the participant id is the same as the passed id\n * there are multiple ids that can be used\n * @param {Object} participant - The locus participant object.\n * @param {String} id\n * @returns {Boolean}\n */\n isSame: (participant: Participant, id: string) =>\n participant && (participant.id === id || (participant.person && participant.person.id === id)),\n\n /**\n * @param {Object} participant - The locus participant object.\n * @param {Boolean} isGuest\n * @param {String} status\n * @returns {Boolean}\n */\n isNotAdmitted: (participant: Participant, isGuest: boolean, status: string): boolean =>\n participant &&\n participant.guest &&\n ((participant.devices &&\n participant.devices[0] &&\n participant.devices[0].intent &&\n participant.devices[0].intent.type === _WAIT_ &&\n // @ts-ignore\n isGuest &&\n status === _IN_LOBBY_) ||\n // @ts-ignore\n !status === _IN_MEETING_),\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isAudioMuted: (participant: Participant) => {\n if (!participant) {\n throw new ParameterError('Audio could not be processed, participant is undefined.');\n }\n\n return MemberUtil.isMuted(participant, AUDIO_STATUS, AUDIO);\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isVideoMuted: (participant: Participant): boolean => {\n if (!participant) {\n throw new ParameterError('Video could not be processed, participant is undefined.');\n }\n\n return MemberUtil.isMuted(participant, VIDEO_STATUS, VIDEO);\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isHandRaised: (participant: Participant) => {\n if (!participant) {\n throw new ParameterError('Raise hand could not be processed, participant is undefined.');\n }\n\n return participant.controls?.hand?.raised || false;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isBreakoutsSupported: (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'Breakout support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.doesNotSupportBreakouts;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isInterpretationSupported: (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'Interpretation support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.doesNotSupportSiInterpreter;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isLiveAnnotationSupported: (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'LiveAnnotation support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.annotatorAssignmentNotAllowed;\n },\n\n /**\n * utility method for audio/video muted status\n * @param {any} participant\n * @param {String} statusAccessor\n * @param {String} controlsAccessor\n * @returns {Boolean | undefined}\n */\n isMuted: (participant: Participant, statusAccessor: string, controlsAccessor: string) => {\n // check remote mute\n const remoteMute = participant?.controls?.[controlsAccessor]?.muted;\n if (remoteMute === true) {\n return true;\n }\n\n // check local mute\n const localStatus = participant?.status?.[statusAccessor];\n if (localStatus === _RECEIVE_ONLY_) {\n return true;\n }\n if (localStatus === _SEND_RECEIVE_) {\n return false;\n }\n\n return remoteMute;\n },\n\n /**\n * utility method for getting the recording member for later comparison\n * @param {Object} controls\n * @returns {String|null}\n */\n getRecordingMember: (controls: any) => {\n if (!controls) {\n return null;\n }\n if (controls.record && controls.record.recording && controls.record.meta) {\n return controls.record.meta.modifiedBy;\n }\n\n return null;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isRecording: (participant: Participant) => {\n if (!participant) {\n throw new ParameterError('Recording could not be processed, participant is undefined.');\n }\n if (participant.controls && participant.controls.localRecord) {\n return participant.controls.localRecord.recording;\n }\n\n return false;\n },\n\n isRemovable: (isSelf, isGuest, isInMeeting, type) => {\n if (isGuest || isSelf) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isInMeeting) {\n return true;\n }\n\n return false;\n },\n\n isMutable: (isSelf, isDevice, isInMeeting, isMuted, type) => {\n if (!isInMeeting) {\n return false;\n }\n if (isMuted) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isSelf || isDevice) {\n return true;\n }\n\n return false;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {String}\n */\n extractStatus: (participant: Participant) => {\n if (!(participant && participant.devices && participant.devices.length)) {\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _JOINED_) {\n return _IN_MEETING_;\n }\n if (participant.state === _IDLE_) {\n if (participant.devices && participant.devices.length > 0) {\n const foundDevice = participant.devices.find(\n (device) =>\n device.intent && (device.intent.type === _WAIT_ || device.intent.type === _OBSERVE_)\n );\n\n return foundDevice ? _IN_LOBBY_ : _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _LEFT_) {\n return _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {String}\n */\n extractId: (participant: Participant) => {\n if (participant) {\n return participant.id;\n }\n\n return null;\n },\n\n /**\n * extracts the media status from nested participant object\n * @param {Object} participant - The locus participant object.\n * @returns {Object}\n */\n extractMediaStatus: (participant: Participant): IMediaStatus => {\n if (!participant) {\n throw new ParameterError('Media status could not be extracted, participant is undefined.');\n }\n\n return {\n audio: participant.status?.audioStatus,\n video: participant.status?.videoStatus,\n };\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {String}\n */\n extractName: (participant: Participant) => {\n if (participant && participant.person) {\n return participant.person.name;\n }\n\n return null;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {String}\n */\n extractPairedWithParticipantUrl: (participant: Participant): ParticipantUrl | undefined => {\n let participantUrl;\n\n participant?.devices?.forEach((device) => {\n device?.intents?.forEach((intent) => {\n if (intent?.type === _OBSERVE_ && intent?.associatedWith) {\n participantUrl = intent.associatedWith;\n }\n });\n });\n\n return participantUrl;\n },\n};\nexport default MemberUtil;\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["_types","require","_constants","_parameter","_interopRequireDefault","MemberUtil","canReclaimHost","participant","ParameterError","canReclaimHostRole","getControlsRoles","_participant$controls","_participant$controls2","controls","role","roles","isBrb","_participant$controls3","_participant$controls4","brb","enabled","hasRole","controlRole","_MemberUtil$getContro","some","type","hasCohost","ServerRoles","Cohost","hasModerator","Moderator","hasPresenter","Presenter","extractControlRoles","cohost","moderator","presenter","isUser","_USER_","isModerator","isGuest","guest","isDevice","_RESOURCE_ROOM_","isModeratorAssignmentProhibited","moderatorAssignmentNotAllowed","isPresenterAssignmentProhibited","presenterAssignmentNotAllowed","isSame","id","person","isNotAdmitted","status","devices","intent","_WAIT_","_IN_LOBBY_","_IN_MEETING_","isAudioMuted","isMuted","AUDIO_STATUS","AUDIO","isVideoMuted","VIDEO_STATUS","VIDEO","isHandRaised","_participant$controls5","_participant$controls6","hand","raised","isBreakoutsSupported","doesNotSupportBreakouts","isSupportsSingleUserAutoEndMeeting","doesNotSupportSingleUserAutoEndMeeting","isInterpretationSupported","doesNotSupportSiInterpreter","isLiveAnnotationSupported","annotatorAssignmentNotAllowed","statusAccessor","controlsAccessor","_participant$controls7","_participant$controls8","_participant$status","remoteMute","muted","localStatus","_RECEIVE_ONLY_","_SEND_RECEIVE_","getRecordingMember","record","recording","meta","modifiedBy","isRecording","localRecord","isRemovable","isSelf","isInMeeting","_CALL_","isMutable","extractStatus","length","_NOT_IN_MEETING_","state","_JOINED_","_IDLE_","foundDevice","find","device","_OBSERVE_","_LEFT_","extractId","extractMediaStatus","_participant$status2","_participant$status3","audio","audioStatus","video","videoStatus","extractName","name","extractPairedWithParticipantUrl","_participant$devices","participantUrl","forEach","_device$intents","intents","associatedWith","_default","exports","default"],"sources":["util.ts"],"sourcesContent":["import {\n IExternalRoles,\n ServerRoles,\n ServerRoleShape,\n IMediaStatus,\n Participant,\n ParticipantUrl,\n} from './types';\nimport {\n _USER_,\n _RESOURCE_ROOM_,\n _OBSERVE_,\n _WAIT_,\n _LEFT_,\n _JOINED_,\n _IDLE_,\n _IN_LOBBY_,\n _NOT_IN_MEETING_,\n _IN_MEETING_,\n AUDIO_STATUS,\n VIDEO_STATUS,\n _SEND_RECEIVE_,\n _RECEIVE_ONLY_,\n _CALL_,\n VIDEO,\n AUDIO,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst MemberUtil = {\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n canReclaimHost: (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'canReclaimHostRole could not be processed, participant is undefined.'\n );\n }\n\n return participant.canReclaimHostRole || false;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {[ServerRoleShape]}\n */\n getControlsRoles: (participant: Participant): Array<ServerRoleShape> =>\n participant?.controls?.role?.roles,\n\n /**\n * Checks if the participant has the brb status enabled.\n *\n * @param {Participant} participant - The locus participant object.\n * @returns {boolean} - True if the participant has brb enabled, false otherwise.\n */\n isBrb: (participant: Participant): boolean => participant.controls?.brb?.enabled || false,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @param {ServerRoles} controlRole the search role\n * @returns {Boolean}\n */\n hasRole: (participant: Participant, controlRole: ServerRoles): boolean =>\n MemberUtil.getControlsRoles(participant)?.some(\n (role) => role.type === controlRole && role.hasRole\n ),\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n hasCohost: (participant: Participant): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Cohost) || false,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n hasModerator: (participant: Participant): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Moderator) || false,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n hasPresenter: (participant: Participant): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Presenter) || false,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {IExternalRoles}\n */\n extractControlRoles: (participant: Participant): IExternalRoles => {\n const roles = {\n cohost: MemberUtil.hasCohost(participant),\n moderator: MemberUtil.hasModerator(participant),\n presenter: MemberUtil.hasPresenter(participant),\n };\n\n return roles;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isUser: (participant: Participant) => participant && participant.type === _USER_,\n\n isModerator: (participant: Participant) => participant && participant.moderator,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isGuest: (participant: Participant) => participant && participant.guest,\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isDevice: (participant: Participant) => participant && participant.type === _RESOURCE_ROOM_,\n\n isModeratorAssignmentProhibited: (participant: Participant) =>\n participant && participant.moderatorAssignmentNotAllowed,\n\n isPresenterAssignmentProhibited: (participant: Participant) =>\n participant && participant.presenterAssignmentNotAllowed,\n\n /**\n * checks to see if the participant id is the same as the passed id\n * there are multiple ids that can be used\n * @param {Object} participant - The locus participant object.\n * @param {String} id\n * @returns {Boolean}\n */\n isSame: (participant: Participant, id: string) =>\n participant && (participant.id === id || (participant.person && participant.person.id === id)),\n\n /**\n * @param {Object} participant - The locus participant object.\n * @param {Boolean} isGuest\n * @param {String} status\n * @returns {Boolean}\n */\n isNotAdmitted: (participant: Participant, isGuest: boolean, status: string): boolean =>\n participant &&\n participant.guest &&\n ((participant.devices &&\n participant.devices[0] &&\n participant.devices[0].intent &&\n participant.devices[0].intent.type === _WAIT_ &&\n // @ts-ignore\n isGuest &&\n status === _IN_LOBBY_) ||\n // @ts-ignore\n !status === _IN_MEETING_),\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isAudioMuted: (participant: Participant) => {\n if (!participant) {\n throw new ParameterError('Audio could not be processed, participant is undefined.');\n }\n\n return MemberUtil.isMuted(participant, AUDIO_STATUS, AUDIO);\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isVideoMuted: (participant: Participant): boolean => {\n if (!participant) {\n throw new ParameterError('Video could not be processed, participant is undefined.');\n }\n\n return MemberUtil.isMuted(participant, VIDEO_STATUS, VIDEO);\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isHandRaised: (participant: Participant) => {\n if (!participant) {\n throw new ParameterError('Raise hand could not be processed, participant is undefined.');\n }\n\n return participant.controls?.hand?.raised || false;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isBreakoutsSupported: (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'Breakout support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.doesNotSupportBreakouts;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isSupportsSingleUserAutoEndMeeting: (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'Single user auto end meeting support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.doesNotSupportSingleUserAutoEndMeeting;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isInterpretationSupported: (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'Interpretation support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.doesNotSupportSiInterpreter;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isLiveAnnotationSupported: (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'LiveAnnotation support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.annotatorAssignmentNotAllowed;\n },\n\n /**\n * utility method for audio/video muted status\n * @param {any} participant\n * @param {String} statusAccessor\n * @param {String} controlsAccessor\n * @returns {Boolean | undefined}\n */\n isMuted: (participant: Participant, statusAccessor: string, controlsAccessor: string) => {\n // check remote mute\n const remoteMute = participant?.controls?.[controlsAccessor]?.muted;\n if (remoteMute === true) {\n return true;\n }\n\n // check local mute\n const localStatus = participant?.status?.[statusAccessor];\n if (localStatus === _RECEIVE_ONLY_) {\n return true;\n }\n if (localStatus === _SEND_RECEIVE_) {\n return false;\n }\n\n return remoteMute;\n },\n\n /**\n * utility method for getting the recording member for later comparison\n * @param {Object} controls\n * @returns {String|null}\n */\n getRecordingMember: (controls: any) => {\n if (!controls) {\n return null;\n }\n if (controls.record && controls.record.recording && controls.record.meta) {\n return controls.record.meta.modifiedBy;\n }\n\n return null;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {Boolean}\n */\n isRecording: (participant: Participant) => {\n if (!participant) {\n throw new ParameterError('Recording could not be processed, participant is undefined.');\n }\n if (participant.controls && participant.controls.localRecord) {\n return participant.controls.localRecord.recording;\n }\n\n return false;\n },\n\n isRemovable: (isSelf, isGuest, isInMeeting, type) => {\n if (isGuest || isSelf) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isInMeeting) {\n return true;\n }\n\n return false;\n },\n\n isMutable: (isSelf, isDevice, isInMeeting, isMuted, type) => {\n if (!isInMeeting) {\n return false;\n }\n if (isMuted) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isSelf || isDevice) {\n return true;\n }\n\n return false;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {String}\n */\n extractStatus: (participant: Participant) => {\n if (!(participant && participant.devices && participant.devices.length)) {\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _JOINED_) {\n return _IN_MEETING_;\n }\n if (participant.state === _IDLE_) {\n if (participant.devices && participant.devices.length > 0) {\n const foundDevice = participant.devices.find(\n (device) =>\n device.intent && (device.intent.type === _WAIT_ || device.intent.type === _OBSERVE_)\n );\n\n return foundDevice ? _IN_LOBBY_ : _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _LEFT_) {\n return _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {String}\n */\n extractId: (participant: Participant) => {\n if (participant) {\n return participant.id;\n }\n\n return null;\n },\n\n /**\n * extracts the media status from nested participant object\n * @param {Object} participant - The locus participant object.\n * @returns {Object}\n */\n extractMediaStatus: (participant: Participant): IMediaStatus => {\n if (!participant) {\n throw new ParameterError('Media status could not be extracted, participant is undefined.');\n }\n\n return {\n audio: participant.status?.audioStatus,\n video: participant.status?.videoStatus,\n };\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {String}\n */\n extractName: (participant: Participant) => {\n if (participant && participant.person) {\n return participant.person.name;\n }\n\n return null;\n },\n\n /**\n * @param {Object} participant - The locus participant object.\n * @returns {String}\n */\n extractPairedWithParticipantUrl: (participant: Participant): ParticipantUrl | undefined => {\n let participantUrl;\n\n participant?.devices?.forEach((device) => {\n device?.intents?.forEach((intent) => {\n if (intent?.type === _OBSERVE_ && intent?.associatedWith) {\n participantUrl = intent.associatedWith;\n }\n });\n });\n\n return participantUrl;\n },\n};\nexport default MemberUtil;\n"],"mappings":"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"}
|
@@ -280,6 +280,7 @@ export declare const EVENT_TRIGGERS: {
|
|
280
280
|
MEETING_CONTROLS_ANNOTATION_UPDATED: string;
|
281
281
|
MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED: string;
|
282
282
|
MEETING_CONTROLS_POLLING_QA_UPDATED: string;
|
283
|
+
MEETING_CONTROLS_AUTO_END_MEETING_WARNING_UPDATED: string;
|
283
284
|
MEETING_LOCUS_URL_UPDATE: string;
|
284
285
|
MEETING_STREAM_PUBLISH_STATE_CHANGED: string;
|
285
286
|
MEETING_TRANSCRIPTION_CONNECTED: string;
|
@@ -593,6 +594,7 @@ export declare const LOCUSINFO: {
|
|
593
594
|
SELF_ADMITTED_GUEST: string;
|
594
595
|
SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: string;
|
595
596
|
SELF_REMOTE_MUTE_STATUS_UPDATED: string;
|
597
|
+
CONTROLS_AUTO_END_MEETING_WARNING_CHANGED: string;
|
596
598
|
LOCAL_UNMUTE_REQUESTED: string;
|
597
599
|
LOCAL_UNMUTE_REQUIRED: string;
|
598
600
|
SELF_MODERATOR_CHANGED: string;
|
@@ -860,6 +862,7 @@ export declare const DISPLAY_HINTS: {
|
|
860
862
|
SHOW_POST_MEETING_DATA_CONSENT_PROMPT: string;
|
861
863
|
ENABLE_ANNOTATION_MEETING_OPTION: string;
|
862
864
|
DISABLE_ANNOTATION_MEETING_OPTION: string;
|
865
|
+
SHOW_AUTO_END_MEETING_WARNING: string;
|
863
866
|
ENABLE_RDC_MEETING_OPTION: string;
|
864
867
|
DISABLE_RDC_MEETING_OPTION: string;
|
865
868
|
ENABLE_ATTENDEE_START_POLLING_QA: string;
|
@@ -87,6 +87,7 @@ interface IInMeetingActions {
|
|
87
87
|
canDoVideo?: boolean;
|
88
88
|
canAnnotate?: boolean;
|
89
89
|
canUseVoip?: boolean;
|
90
|
+
showAutoEndMeetingWarning?: boolean;
|
90
91
|
supportHQV?: boolean;
|
91
92
|
supportHDV?: boolean;
|
92
93
|
canShareWhiteBoard?: boolean;
|
@@ -196,6 +197,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
196
197
|
canDoVideo: any;
|
197
198
|
canAnnotate: any;
|
198
199
|
canUseVoip: any;
|
200
|
+
showAutoEndMeetingWarning: any;
|
199
201
|
supportHQV: any;
|
200
202
|
enforceVirtualBackground: any;
|
201
203
|
supportHDV: any;
|
@@ -1908,6 +1908,20 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
1908
1908
|
* @memberof Meeting
|
1909
1909
|
*/
|
1910
1910
|
sendReaction(reactionType: ReactionServerType, skinToneType?: SkinToneType): any;
|
1911
|
+
/**
|
1912
|
+
* Extend the current meeting duration.
|
1913
|
+
*
|
1914
|
+
* @param {number} extensionMinutes - how many minutes to extend
|
1915
|
+
* @returns {Promise}
|
1916
|
+
* @public
|
1917
|
+
* @memberof Meeting
|
1918
|
+
*/
|
1919
|
+
extendMeeting({ meetingPolicyUrl, meetingInstanceId, participantId, extensionMinutes, }: {
|
1920
|
+
meetingPolicyUrl: any;
|
1921
|
+
meetingInstanceId: any;
|
1922
|
+
participantId: any;
|
1923
|
+
extensionMinutes?: number;
|
1924
|
+
}): any;
|
1911
1925
|
/**
|
1912
1926
|
* Method to enable or disable reactions inside the meeting.
|
1913
1927
|
*
|
@@ -284,6 +284,22 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
284
284
|
* @returns {Promise}
|
285
285
|
*/
|
286
286
|
sendReaction({ reactionChannelUrl, reaction, participantId }: SendReactionOptions): any;
|
287
|
+
/**
|
288
|
+
* Extend the current meeting duration.
|
289
|
+
*
|
290
|
+
* @param {Object} params - Parameters for extending the meeting.
|
291
|
+
* @param {string} params.meetingInstanceId - The unique ID of the meeting instance.
|
292
|
+
* @param {string} params.participantId - The ID of the participant requesting the extension.
|
293
|
+
* @param {number} params.extensionMinutes - The number of minutes to extend the meeting by.
|
294
|
+
* @param {string} params.meetingPolicyUrl - The base URL for meeting policy service (dynamic, from locus links)
|
295
|
+
* @returns {Promise<any>} A promise that resolves with the server response.
|
296
|
+
*/
|
297
|
+
extendMeeting({ meetingInstanceId, participantId, extensionMinutes, meetingPolicyUrl, }: {
|
298
|
+
meetingInstanceId: string;
|
299
|
+
participantId: string;
|
300
|
+
extensionMinutes: number;
|
301
|
+
meetingPolicyUrl: string;
|
302
|
+
}): any;
|
287
303
|
/**
|
288
304
|
* Make a network request to enable or disable reactions.
|
289
305
|
* @param {boolean} options.enable - determines if we need to enable or disable.
|
@@ -88,6 +88,7 @@ declare const MeetingUtil: {
|
|
88
88
|
isRealTimeTranslationEnabled: (displayHints: any) => any;
|
89
89
|
canSelectSpokenLanguages: (displayHints: any) => any;
|
90
90
|
waitingForOthersToJoin: (displayHints: any) => any;
|
91
|
+
showAutoEndMeetingWarning: (displayHints: any) => any;
|
91
92
|
canSendReactions: (originalValue: any, displayHints: any) => any;
|
92
93
|
canUserRenameSelfAndObserved: (displayHints: any) => any;
|
93
94
|
requiresPostMeetingDataConsentPrompt: (displayHints: any) => any;
|
@@ -96,6 +96,11 @@ declare const MemberUtil: {
|
|
96
96
|
* @returns {Boolean}
|
97
97
|
*/
|
98
98
|
isBreakoutsSupported: (participant: any) => boolean;
|
99
|
+
/**
|
100
|
+
* @param {Object} participant - The locus participant object.
|
101
|
+
* @returns {Boolean}
|
102
|
+
*/
|
103
|
+
isSupportsSingleUserAutoEndMeeting: (participant: any) => boolean;
|
99
104
|
/**
|
100
105
|
* @param {Object} participant - The locus participant object.
|
101
106
|
* @returns {Boolean}
|
package/dist/webinar/index.js
CHANGED
package/package.json
CHANGED
package/src/constants.ts
CHANGED
@@ -374,6 +374,8 @@ export const EVENT_TRIGGERS = {
|
|
374
374
|
MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED:
|
375
375
|
'meeting:controls:remote-desktop-control:updated',
|
376
376
|
MEETING_CONTROLS_POLLING_QA_UPDATED: 'meeting:controls:polling-qa:updated',
|
377
|
+
MEETING_CONTROLS_AUTO_END_MEETING_WARNING_UPDATED:
|
378
|
+
'meeting:controls:auto-end-meeting-warning:updated',
|
377
379
|
// Locus URL changed
|
378
380
|
MEETING_LOCUS_URL_UPDATE: 'meeting:locus:locusUrl:update',
|
379
381
|
MEETING_STREAM_PUBLISH_STATE_CHANGED: 'meeting:streamPublishStateChanged',
|
@@ -727,6 +729,7 @@ export const LOCUSINFO = {
|
|
727
729
|
SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',
|
728
730
|
SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: 'SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED',
|
729
731
|
SELF_REMOTE_MUTE_STATUS_UPDATED: 'SELF_REMOTE_MUTE_STATUS_UPDATED',
|
732
|
+
CONTROLS_AUTO_END_MEETING_WARNING_CHANGED: 'CONTROLS_AUTO_END_MEETING_WARNING_CHANGED',
|
730
733
|
LOCAL_UNMUTE_REQUESTED: 'LOCAL_UNMUTE_REQUESTED',
|
731
734
|
LOCAL_UNMUTE_REQUIRED: 'LOCAL_UNMUTE_REQUIRED',
|
732
735
|
SELF_MODERATOR_CHANGED: 'SELF_MODERATOR_CHANGED',
|
@@ -1052,6 +1055,9 @@ export const DISPLAY_HINTS = {
|
|
1052
1055
|
ENABLE_ANNOTATION_MEETING_OPTION: 'ENABLE_ANNOTATION_MEETING_OPTION',
|
1053
1056
|
DISABLE_ANNOTATION_MEETING_OPTION: 'DISABLE_ANNOTATION_MEETING_OPTION',
|
1054
1057
|
|
1058
|
+
// Auto End Meeting Warning
|
1059
|
+
SHOW_AUTO_END_MEETING_WARNING: 'SHOW_AUTO_END_MEETING_WARNING',
|
1060
|
+
|
1055
1061
|
// Remote Desktop Control
|
1056
1062
|
ENABLE_RDC_MEETING_OPTION: 'ENABLE_RDC_MEETING_OPTION',
|
1057
1063
|
DISABLE_RDC_MEETING_OPTION: 'DISABLE_RDC_MEETING_OPTION',
|
@@ -130,6 +130,15 @@ ControlsUtils.parse = (controls: any) => {
|
|
130
130
|
};
|
131
131
|
}
|
132
132
|
|
133
|
+
if (controls?.autoEndMeetingWarning) {
|
134
|
+
parsedControls.autoEndMeetingWarning = {
|
135
|
+
enabled: controls.autoEndMeetingWarning.enabled,
|
136
|
+
extensionDurationMinutes: controls.autoEndMeetingWarning.extensionDurationMinutes,
|
137
|
+
countdownDurationMinutes: controls.autoEndMeetingWarning.countdownDurationMinutes,
|
138
|
+
countdownStartedAt: controls.autoEndMeetingWarning.countdownStartedAt,
|
139
|
+
};
|
140
|
+
}
|
141
|
+
|
133
142
|
return parsedControls;
|
134
143
|
};
|
135
144
|
|
@@ -244,6 +253,15 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
|
|
244
253
|
|
245
254
|
hasPollingQAControlChanged:
|
246
255
|
current?.pollingQAControl?.enabled !== previous?.pollingQAControl?.enabled,
|
256
|
+
|
257
|
+
hasAutoEndMeetingChanged:
|
258
|
+
current?.autoEndMeetingWarning?.enabled !== previous?.autoEndMeetingWarning?.enabled ||
|
259
|
+
current?.autoEndMeetingWarning?.extensionDurationMinutes !==
|
260
|
+
previous?.autoEndMeetingWarning?.extensionDurationMinutes ||
|
261
|
+
current?.autoEndMeetingWarning?.countdownDurationMinutes !==
|
262
|
+
previous?.autoEndMeetingWarning?.countdownDurationMinutes ||
|
263
|
+
current?.autoEndMeetingWarning?.countdownStartedAt !==
|
264
|
+
previous?.autoEndMeetingWarning?.countdownStartedAt,
|
247
265
|
},
|
248
266
|
};
|
249
267
|
};
|
package/src/locus-info/index.ts
CHANGED
@@ -895,6 +895,7 @@ export default class LocusInfo extends EventsScope {
|
|
895
895
|
hasAnnotationControlChanged,
|
896
896
|
hasRemoteDesktopControlChanged,
|
897
897
|
hasPollingQAControlChanged,
|
898
|
+
hasAutoEndMeetingChanged,
|
898
899
|
},
|
899
900
|
current,
|
900
901
|
} = ControlsUtils.getControls(this.controls, controls);
|
@@ -1169,6 +1170,14 @@ export default class LocusInfo extends EventsScope {
|
|
1169
1170
|
);
|
1170
1171
|
}
|
1171
1172
|
|
1173
|
+
if (hasAutoEndMeetingChanged) {
|
1174
|
+
this.emitScoped(
|
1175
|
+
{file: 'locus-info', function: 'updateControls'},
|
1176
|
+
LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED,
|
1177
|
+
{state: current.autoEndMeetingWarning}
|
1178
|
+
);
|
1179
|
+
}
|
1180
|
+
|
1172
1181
|
this.controls = controls;
|
1173
1182
|
}
|
1174
1183
|
}
|
@@ -92,6 +92,7 @@ interface IInMeetingActions {
|
|
92
92
|
canDoVideo?: boolean;
|
93
93
|
canAnnotate?: boolean;
|
94
94
|
canUseVoip?: boolean;
|
95
|
+
showAutoEndMeetingWarning?: boolean;
|
95
96
|
supportHQV?: boolean;
|
96
97
|
supportHDV?: boolean;
|
97
98
|
canShareWhiteBoard?: boolean;
|
@@ -284,6 +285,8 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
284
285
|
|
285
286
|
canUseVoip = null;
|
286
287
|
|
288
|
+
showAutoEndMeetingWarning = null;
|
289
|
+
|
287
290
|
supportHQV = null;
|
288
291
|
|
289
292
|
enforceVirtualBackground = null;
|
@@ -405,6 +408,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
405
408
|
canShareFile: this.canShareFile,
|
406
409
|
canShareApplication: this.canShareApplication,
|
407
410
|
canShareCamera: this.canShareCamera,
|
411
|
+
showAutoEndMeetingWarning: this.showAutoEndMeetingWarning,
|
408
412
|
canShareDesktop: this.canShareDesktop,
|
409
413
|
canShareContent: this.canShareContent,
|
410
414
|
canTransferFile: this.canTransferFile,
|
package/src/meeting/index.ts
CHANGED
@@ -2976,6 +2976,18 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
2976
2976
|
);
|
2977
2977
|
});
|
2978
2978
|
|
2979
|
+
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED, ({state}) => {
|
2980
|
+
Trigger.trigger(
|
2981
|
+
this,
|
2982
|
+
{
|
2983
|
+
file: 'meeting/index',
|
2984
|
+
function: 'setupLocusControlsListener',
|
2985
|
+
},
|
2986
|
+
EVENT_TRIGGERS.MEETING_CONTROLS_AUTO_END_MEETING_WARNING_UPDATED,
|
2987
|
+
{state}
|
2988
|
+
);
|
2989
|
+
});
|
2990
|
+
|
2979
2991
|
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED, ({state}) => {
|
2980
2992
|
Trigger.trigger(
|
2981
2993
|
this,
|
@@ -4223,6 +4235,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
4223
4235
|
this.userDisplayHints,
|
4224
4236
|
this.selfUserPolicies
|
4225
4237
|
),
|
4238
|
+
showAutoEndMeetingWarning: MeetingUtil.showAutoEndMeetingWarning(this.userDisplayHints),
|
4226
4239
|
canRaiseHand: MeetingUtil.canUserRaiseHand(this.userDisplayHints),
|
4227
4240
|
canLowerAllHands: MeetingUtil.canUserLowerAllHands(this.userDisplayHints),
|
4228
4241
|
canLowerSomeoneElsesHand: MeetingUtil.canUserLowerSomeoneElsesHand(this.userDisplayHints),
|
@@ -9453,6 +9466,36 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
9453
9466
|
return Promise.reject(new Error('Error sending reaction, service url not found.'));
|
9454
9467
|
}
|
9455
9468
|
|
9469
|
+
/**
|
9470
|
+
* Extend the current meeting duration.
|
9471
|
+
*
|
9472
|
+
* @param {number} extensionMinutes - how many minutes to extend
|
9473
|
+
* @returns {Promise}
|
9474
|
+
* @public
|
9475
|
+
* @memberof Meeting
|
9476
|
+
*/
|
9477
|
+
public extendMeeting({
|
9478
|
+
meetingPolicyUrl,
|
9479
|
+
meetingInstanceId,
|
9480
|
+
participantId,
|
9481
|
+
extensionMinutes = 30,
|
9482
|
+
}) {
|
9483
|
+
if (!meetingInstanceId || !participantId) {
|
9484
|
+
return Promise.reject(new Error('Missing meetingInstanceId or participantId'));
|
9485
|
+
}
|
9486
|
+
|
9487
|
+
if (!meetingPolicyUrl) {
|
9488
|
+
return Promise.reject(new Error('Missing meetingPolicyUrl'));
|
9489
|
+
}
|
9490
|
+
|
9491
|
+
return this.meetingRequest.extendMeeting({
|
9492
|
+
meetingInstanceId,
|
9493
|
+
participantId,
|
9494
|
+
extensionMinutes,
|
9495
|
+
meetingPolicyUrl,
|
9496
|
+
});
|
9497
|
+
}
|
9498
|
+
|
9456
9499
|
/**
|
9457
9500
|
* Method to enable or disable reactions inside the meeting.
|
9458
9501
|
*
|
package/src/meeting/request.ts
CHANGED
@@ -886,6 +886,44 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
886
886
|
});
|
887
887
|
}
|
888
888
|
|
889
|
+
/**
|
890
|
+
* Extend the current meeting duration.
|
891
|
+
*
|
892
|
+
* @param {Object} params - Parameters for extending the meeting.
|
893
|
+
* @param {string} params.meetingInstanceId - The unique ID of the meeting instance.
|
894
|
+
* @param {string} params.participantId - The ID of the participant requesting the extension.
|
895
|
+
* @param {number} params.extensionMinutes - The number of minutes to extend the meeting by.
|
896
|
+
* @param {string} params.meetingPolicyUrl - The base URL for meeting policy service (dynamic, from locus links)
|
897
|
+
* @returns {Promise<any>} A promise that resolves with the server response.
|
898
|
+
*/
|
899
|
+
extendMeeting({
|
900
|
+
meetingInstanceId,
|
901
|
+
participantId,
|
902
|
+
extensionMinutes,
|
903
|
+
meetingPolicyUrl,
|
904
|
+
}: {
|
905
|
+
meetingInstanceId: string;
|
906
|
+
participantId: string;
|
907
|
+
extensionMinutes: number;
|
908
|
+
meetingPolicyUrl: string;
|
909
|
+
}) {
|
910
|
+
if (!meetingPolicyUrl) {
|
911
|
+
return Promise.reject(new Error('meetingPolicyUrl is required'));
|
912
|
+
}
|
913
|
+
const uri = `${meetingPolicyUrl}/continueMeeting`;
|
914
|
+
|
915
|
+
// @ts-ignore
|
916
|
+
return this.request({
|
917
|
+
method: HTTP_VERBS.POST,
|
918
|
+
uri,
|
919
|
+
body: {
|
920
|
+
meetingInstanceId,
|
921
|
+
requestParticipantId: participantId,
|
922
|
+
extensionMinutes,
|
923
|
+
},
|
924
|
+
});
|
925
|
+
}
|
926
|
+
|
889
927
|
/**
|
890
928
|
* Make a network request to enable or disable reactions.
|
891
929
|
* @param {boolean} options.enable - determines if we need to enable or disable.
|
package/src/meeting/util.ts
CHANGED
@@ -654,6 +654,9 @@ const MeetingUtil = {
|
|
654
654
|
|
655
655
|
waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),
|
656
656
|
|
657
|
+
showAutoEndMeetingWarning: (displayHints) =>
|
658
|
+
displayHints.includes(DISPLAY_HINTS.SHOW_AUTO_END_MEETING_WARNING),
|
659
|
+
|
657
660
|
canSendReactions: (originalValue, displayHints) => {
|
658
661
|
if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {
|
659
662
|
return true;
|
package/src/member/index.ts
CHANGED
@@ -42,6 +42,7 @@ export default class Member {
|
|
42
42
|
status: any;
|
43
43
|
supportsBreakouts: boolean;
|
44
44
|
supportsInterpretation: boolean;
|
45
|
+
supportsSingleUserAutoEndMeeting: boolean;
|
45
46
|
supportLiveAnnotation: boolean;
|
46
47
|
type: any;
|
47
48
|
namespace = MEETINGS;
|
@@ -130,6 +131,13 @@ export default class Member {
|
|
130
131
|
* @memberof Member
|
131
132
|
*/
|
132
133
|
this.supportsBreakouts = null;
|
134
|
+
/**
|
135
|
+
* @instance
|
136
|
+
* @type {Boolean}
|
137
|
+
* @public
|
138
|
+
* @memberof Member
|
139
|
+
*/
|
140
|
+
this.supportsSingleUserAutoEndMeeting = null;
|
133
141
|
/**
|
134
142
|
* @instance
|
135
143
|
* @type {Boolean}
|
@@ -339,6 +347,8 @@ export default class Member {
|
|
339
347
|
this.isVideoMuted = MemberUtil.isVideoMuted(participant);
|
340
348
|
this.isHandRaised = MemberUtil.isHandRaised(participant);
|
341
349
|
this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
|
350
|
+
this.supportsSingleUserAutoEndMeeting =
|
351
|
+
MemberUtil.isSupportsSingleUserAutoEndMeeting(participant);
|
342
352
|
this.supportsInterpretation = MemberUtil.isInterpretationSupported(participant);
|
343
353
|
this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
|
344
354
|
this.isGuest = MemberUtil.isGuest(participant);
|
package/src/member/util.ts
CHANGED
@@ -207,6 +207,20 @@ const MemberUtil = {
|
|
207
207
|
return !participant.doesNotSupportBreakouts;
|
208
208
|
},
|
209
209
|
|
210
|
+
/**
|
211
|
+
* @param {Object} participant - The locus participant object.
|
212
|
+
* @returns {Boolean}
|
213
|
+
*/
|
214
|
+
isSupportsSingleUserAutoEndMeeting: (participant) => {
|
215
|
+
if (!participant) {
|
216
|
+
throw new ParameterError(
|
217
|
+
'Single user auto end meeting support could not be processed, participant is undefined.'
|
218
|
+
);
|
219
|
+
}
|
220
|
+
|
221
|
+
return !participant.doesNotSupportSingleUserAutoEndMeeting;
|
222
|
+
},
|
223
|
+
|
210
224
|
/**
|
211
225
|
* @param {Object} participant - The locus participant object.
|
212
226
|
* @returns {Boolean}
|
@@ -86,6 +86,7 @@ describe('plugin-meetings', () => {
|
|
86
86
|
canDoVideo: null,
|
87
87
|
canAnnotate: null,
|
88
88
|
canUseVoip: null,
|
89
|
+
showAutoEndMeetingWarning: null,
|
89
90
|
supportHQV: null,
|
90
91
|
supportHDV: null,
|
91
92
|
canShareWhiteBoard: null,
|
@@ -197,6 +198,7 @@ describe('plugin-meetings', () => {
|
|
197
198
|
'canRealtimeCloseCaption',
|
198
199
|
'canRealtimeCloseCaptionManual',
|
199
200
|
'canChat',
|
201
|
+
'showAutoEndMeetingWarning',
|
200
202
|
'canDoVideo',
|
201
203
|
'canAnnotate',
|
202
204
|
'canUseVoip',
|
@@ -10471,6 +10471,24 @@ describe('plugin-meetings', () => {
|
|
10471
10471
|
);
|
10472
10472
|
});
|
10473
10473
|
|
10474
|
+
it('listens to CONTROLS_AUTO_END_MEETING_WARNING_CHANGED', async () => {
|
10475
|
+
const state = {example: 'value'};
|
10476
|
+
|
10477
|
+
await meeting.locusInfo.emitScoped(
|
10478
|
+
{function: 'test', file: 'test'},
|
10479
|
+
LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED,
|
10480
|
+
{state}
|
10481
|
+
);
|
10482
|
+
|
10483
|
+
assert.calledWith(
|
10484
|
+
TriggerProxy.trigger,
|
10485
|
+
meeting,
|
10486
|
+
{file: 'meeting/index', function: 'setupLocusControlsListener'},
|
10487
|
+
EVENT_TRIGGERS.MEETING_CONTROLS_AUTO_END_MEETING_WARNING_UPDATED,
|
10488
|
+
{state}
|
10489
|
+
);
|
10490
|
+
});
|
10491
|
+
|
10474
10492
|
it('listens to CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED', async () => {
|
10475
10493
|
const state = {example: 'value'};
|
10476
10494
|
|
@@ -11443,6 +11461,7 @@ describe('plugin-meetings', () => {
|
|
11443
11461
|
let canShareWhiteBoardSpy;
|
11444
11462
|
let canMoveToLobbySpy;
|
11445
11463
|
let isSpokenLanguageAutoDetectionEnabledSpy;
|
11464
|
+
let showAutoEndMeetingWarningSpy;
|
11446
11465
|
// Due to import tree issues, hasHints must be stubed within the scope of the `it`.
|
11447
11466
|
|
11448
11467
|
beforeEach(() => {
|
@@ -11474,6 +11493,7 @@ describe('plugin-meetings', () => {
|
|
11474
11493
|
canUserRenameOthersSpy = sinon.spy(MeetingUtil, 'canUserRenameOthers');
|
11475
11494
|
canShareWhiteBoardSpy = sinon.spy(MeetingUtil, 'canShareWhiteBoard');
|
11476
11495
|
canMoveToLobbySpy = sinon.spy(MeetingUtil, 'canMoveToLobby');
|
11496
|
+
showAutoEndMeetingWarningSpy = sinon.spy(MeetingUtil, 'showAutoEndMeetingWarning');
|
11477
11497
|
isSpokenLanguageAutoDetectionEnabledSpy = sinon.spy(MeetingUtil, 'isSpokenLanguageAutoDetectionEnabled');
|
11478
11498
|
|
11479
11499
|
});
|
@@ -11481,6 +11501,7 @@ describe('plugin-meetings', () => {
|
|
11481
11501
|
afterEach(() => {
|
11482
11502
|
inMeetingActionsSetSpy.restore();
|
11483
11503
|
waitingForOthersToJoinSpy.restore();
|
11504
|
+
showAutoEndMeetingWarningSpy.restore();
|
11484
11505
|
});
|
11485
11506
|
|
11486
11507
|
forEach(
|
@@ -12028,6 +12049,7 @@ describe('plugin-meetings', () => {
|
|
12028
12049
|
assert.calledWith(canUserRenameOthersSpy, userDisplayHints);
|
12029
12050
|
assert.calledWith(canShareWhiteBoardSpy, userDisplayHints, selfUserPolicies);
|
12030
12051
|
assert.calledWith(canMoveToLobbySpy, userDisplayHints);
|
12052
|
+
assert.calledWith(showAutoEndMeetingWarningSpy, userDisplayHints);
|
12031
12053
|
assert.calledWith(isSpokenLanguageAutoDetectionEnabledSpy, userDisplayHints);
|
12032
12054
|
|
12033
12055
|
assert.calledWith(ControlsOptionsUtil.hasHints, {
|
@@ -985,6 +985,7 @@ describe('plugin-meetings', () => {
|
|
985
985
|
{functionName: 'isRealTimeTranslationEnabled', displayHint: 'DISPLAY_REAL_TIME_TRANSLATION'},
|
986
986
|
{functionName: 'canSelectSpokenLanguages', displayHint: 'DISPLAY_NON_ENGLISH_ASR'},
|
987
987
|
{functionName: 'waitingForOthersToJoin', displayHint: 'WAITING_FOR_OTHERS'},
|
988
|
+
{functionName: 'showAutoEndMeetingWarning', displayHint: 'SHOW_AUTO_END_MEETING_WARNING'},
|
988
989
|
].forEach(({functionName, displayHint}) => {
|
989
990
|
describe(functionName, () => {
|
990
991
|
it('works as expected', () => {
|
@@ -417,6 +417,30 @@ describe('plugin-meetings', () => {
|
|
417
417
|
});
|
418
418
|
});
|
419
419
|
|
420
|
+
describe('MemberUtil.isSupportsSingleUserAutoEndMeeting', () => {
|
421
|
+
it('throws an error when there is no participant', () => {
|
422
|
+
assert.throws(() => {
|
423
|
+
MemberUtil.isSupportsSingleUserAutoEndMeeting();
|
424
|
+
}, 'Single user auto end meeting support could not be processed, participant is undefined.');
|
425
|
+
});
|
426
|
+
|
427
|
+
it('returns true when single user auto end meeting is supported', () => {
|
428
|
+
const participant = {
|
429
|
+
supportsSingleUserAutoEndMeeting: {},
|
430
|
+
};
|
431
|
+
assert.isTrue(MemberUtil.isSupportsSingleUserAutoEndMeeting(participant));
|
432
|
+
});
|
433
|
+
|
434
|
+
it('returns false when single user auto end meeting is not supported', () => {
|
435
|
+
const participant = {
|
436
|
+
doesNotSupportSingleUserAutoEndMeeting: {},
|
437
|
+
};
|
438
|
+
|
439
|
+
assert.isFalse(MemberUtil.isSupportsSingleUserAutoEndMeeting(participant));
|
440
|
+
});
|
441
|
+
});
|
442
|
+
|
443
|
+
|
420
444
|
describe('MemberUtil.isLiveAnnotationSupported', () => {
|
421
445
|
it('throws an error when there is no participant', () => {
|
422
446
|
assert.throws(() => {
|