@webex/plugin-meetings 3.7.0-next.4 → 3.7.0-next.5

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.
@@ -47,9 +47,11 @@ var MembersUtil = {
47
47
  */
48
48
  getAddMemberBody: function getAddMemberBody(options) {
49
49
  return {
50
- invitees: [{
50
+ invitees: [_objectSpread({
51
51
  address: options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber
52
- }],
52
+ }, options.invitee.roles ? {
53
+ roles: options.invitee.roles
54
+ } : {})],
53
55
  alertIfActive: options.alertIfActive
54
56
  };
55
57
  },
@@ -1 +1 @@
1
- {"version":3,"names":["_uuid","_interopRequireDefault","require","_constants","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MembersUtil","generateAddMemberOptions","invitee","locusUrl","alertIfActive","generateAdmitMemberOptions","memberIds","getAddMemberBody","options","invitees","address","emailAddress","email","phoneNumber","getAdmitMemberRequestBody","sessionLocusUrls","body","admit","participantIds","authorizingLocusUrl","getAdmitMemberRequestParams","format","baseUrl","mainLocusUrl","uri","concat","CONTROLS","method","HTTP_VERBS","PUT","getAddMemberRequestParams","requestParams","isInvalidInvitee","DIALER_REGEX","E164_FORMAT","test","VALID_EMAIL_ADDRESS","getRemoveMemberRequestParams","reason","PARTICIPANT","memberId","LEAVE","generateTransferHostMemberOptions","transfer","moderator","generateRemoveMemberOptions","removal","_FORCED_","generateMuteMemberOptions","status","isAudio","muted","generateRaiseHandMemberOptions","raised","generateRoleAssignmentMemberOptions","roles","generateLowerAllHandsMemberOptions","requestingParticipantId","undefined","generateEditDisplayNameMemberOptions","alias","getMuteMemberRequestParams","property","PATCH","getAddedRoleShape","role","roleShape","type","hasRole","hostKey","getRoleAssignmentMemberRequestParams","getRaiseHandMemberRequestParams","hand","getLowerAllHandsMemberRequestParams","editDisplayNameMemberRequestParams","aliasValue","ALIAS","POST","getTransferHostToMemberRequestParams","genderateSendDTMFOptions","url","tones","generateSendDTMFRequestParams","_ref","device","dtmf","correlationId","uuid","v4","direction","SEND_DTMF_ENDPOINT","cancelPhoneInviteOptions","generateCancelInviteRequestParams","actionType","_REMOVE_","_default","exports"],"sources":["util.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {\n HTTP_VERBS,\n CONTROLS,\n _FORCED_,\n LEAVE,\n PARTICIPANT,\n VALID_EMAIL_ADDRESS,\n DIALER_REGEX,\n SEND_DTMF_ENDPOINT,\n _REMOVE_,\n ALIAS,\n} from '../constants';\n\nimport {RoleAssignmentOptions, RoleAssignmentRequest, ServerRoleShape} from './types';\n\nconst MembersUtil = {\n /**\n * @param {Object} invitee with emailAddress, email or phoneNumber\n * @param {String} locusUrl\n * @param {Boolean} alertIfActive\n * @returns {Object} the format object\n */\n generateAddMemberOptions: (invitee: object, locusUrl: string, alertIfActive: boolean) => ({\n invitee,\n locusUrl,\n alertIfActive,\n }),\n\n /**\n * @param {Array} memberIds\n * @param {String} locusUrl\n * @returns {Object} the format object\n */\n generateAdmitMemberOptions: (memberIds: Array<any>, locusUrl: string) => ({\n locusUrl,\n memberIds,\n }),\n\n /**\n * @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}\n * @returns {Object} with {invitees: [{address}], alertIfActive}\n */\n getAddMemberBody: (options: any) => ({\n invitees: [\n {\n address:\n options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,\n },\n ],\n alertIfActive: options.alertIfActive,\n }),\n\n /**\n * @param {Object} options with {memberIds, authorizingLocusUrl}\n * @returns {Object} admit with {memberIds}\n */\n getAdmitMemberRequestBody: (options: any) => {\n const {memberIds, sessionLocusUrls} = options;\n const body: any = {admit: {participantIds: memberIds}};\n if (sessionLocusUrls) {\n const {authorizingLocusUrl} = sessionLocusUrls;\n\n return {authorizingLocusUrl, ...body};\n }\n\n return body;\n },\n\n /**\n * @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}\n * @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request\n * if a host/cohost is in a breakout session, the locus url should be the main session locus url\n */\n getAdmitMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAdmitMemberRequestBody(format);\n const {locusUrl, sessionLocusUrls} = format;\n const baseUrl = sessionLocusUrls?.mainLocusUrl || locusUrl;\n const uri = `${baseUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}\n * @returns {Object} the request parameters (method, uri, body) needed to make a addMember request\n */\n getAddMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAddMemberBody(format);\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: format.locusUrl,\n body,\n };\n\n return requestParams;\n },\n\n isInvalidInvitee: (invitee) => {\n if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {\n return true;\n }\n\n if (invitee.phoneNumber) {\n return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);\n }\n\n return !VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress);\n },\n\n getRemoveMemberRequestParams: (options) => {\n const body = {\n reason: options.reason,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${LEAVE}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n generateTransferHostMemberOptions: (transfer, moderator, locusUrl) => ({\n moderator,\n locusUrl,\n memberId: transfer,\n }),\n\n generateRemoveMemberOptions: (removal, locusUrl) => ({\n reason: _FORCED_,\n memberId: removal,\n locusUrl,\n }),\n\n generateMuteMemberOptions: (memberId, status, locusUrl, isAudio) => ({\n memberId,\n muted: status,\n locusUrl,\n isAudio,\n }),\n\n generateRaiseHandMemberOptions: (memberId, status, locusUrl) => ({\n memberId,\n raised: status,\n locusUrl,\n }),\n\n /**\n * @param {String} memberId\n * @param {[ServerRoleShape]} roles\n * @param {String} locusUrl\n * @returns {RoleAssignmentOptions}\n */\n generateRoleAssignmentMemberOptions: (\n memberId: string,\n roles: Array<ServerRoleShape>,\n locusUrl: string\n ): RoleAssignmentOptions => ({\n memberId,\n roles,\n locusUrl,\n }),\n\n generateLowerAllHandsMemberOptions: (requestingParticipantId, locusUrl, roles) => ({\n requestingParticipantId,\n locusUrl,\n ...(roles !== undefined && {roles}),\n }),\n\n /**\n * @param {String} memberId id of the participant who is receiving request\n * @param {String} requestingParticipantId id of the participant who is sending request (optional)\n * @param {String} alias alias name\n * @param {String} locusUrl url\n * @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}\n */\n generateEditDisplayNameMemberOptions: (memberId, requestingParticipantId, alias, locusUrl) => ({\n memberId,\n requestingParticipantId,\n alias,\n locusUrl,\n }),\n\n getMuteMemberRequestParams: (options) => {\n const property = options.isAudio === false ? 'video' : 'audio';\n const body = {\n [property]: {\n muted: options.muted,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {ServerRoleShape} role\n * @returns {ServerRoleShape} the role shape to be added to the body\n */\n getAddedRoleShape: (role: ServerRoleShape): ServerRoleShape => {\n const roleShape: ServerRoleShape = {type: role.type, hasRole: role.hasRole};\n\n if (role.hostKey) {\n roleShape.hostKey = role.hostKey;\n }\n\n return roleShape;\n },\n\n /**\n * @param {RoleAssignmentOptions} options\n * @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request\n */\n getRoleAssignmentMemberRequestParams: (options: RoleAssignmentOptions): RoleAssignmentRequest => {\n const body = {role: {roles: []}};\n options.roles.forEach((role) => {\n body.role.roles.push(MembersUtil.getAddedRoleShape(role));\n });\n\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getRaiseHandMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: options.raised,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getLowerAllHandsMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: false,\n ...(options.roles !== undefined && {roles: options.roles}),\n },\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}\n * @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request\n */\n editDisplayNameMemberRequestParams: (options) => {\n const body = {\n aliasValue: options.alias,\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${ALIAS}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n getTransferHostToMemberRequestParams: (options) => {\n const body = {\n role: {\n moderator: options.moderator,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n genderateSendDTMFOptions: (url, tones, memberId, locusUrl) => ({\n url,\n tones,\n memberId,\n locusUrl,\n }),\n\n generateSendDTMFRequestParams: ({url, tones, memberId, locusUrl}) => {\n const body = {\n device: {\n url,\n },\n memberId,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n direction: 'transmit',\n },\n };\n const uri = `${locusUrl}/${PARTICIPANT}/${memberId}/${SEND_DTMF_ENDPOINT}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n cancelPhoneInviteOptions: (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n }),\n\n generateCancelInviteRequestParams: (options) => {\n const body = {\n actionType: _REMOVE_,\n invitees: [\n {\n address: options.invitee.phoneNumber,\n },\n ],\n };\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: options.locusUrl,\n body,\n };\n\n return requestParams;\n },\n};\n\nexport default MembersUtil;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_uuid","_interopRequireDefault","require","_constants","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MembersUtil","generateAddMemberOptions","invitee","locusUrl","alertIfActive","generateAdmitMemberOptions","memberIds","getAddMemberBody","options","invitees","address","emailAddress","email","phoneNumber","roles","getAdmitMemberRequestBody","sessionLocusUrls","body","admit","participantIds","authorizingLocusUrl","getAdmitMemberRequestParams","format","baseUrl","mainLocusUrl","uri","concat","CONTROLS","method","HTTP_VERBS","PUT","getAddMemberRequestParams","requestParams","isInvalidInvitee","DIALER_REGEX","E164_FORMAT","test","VALID_EMAIL_ADDRESS","getRemoveMemberRequestParams","reason","PARTICIPANT","memberId","LEAVE","generateTransferHostMemberOptions","transfer","moderator","generateRemoveMemberOptions","removal","_FORCED_","generateMuteMemberOptions","status","isAudio","muted","generateRaiseHandMemberOptions","raised","generateRoleAssignmentMemberOptions","generateLowerAllHandsMemberOptions","requestingParticipantId","undefined","generateEditDisplayNameMemberOptions","alias","getMuteMemberRequestParams","property","PATCH","getAddedRoleShape","role","roleShape","type","hasRole","hostKey","getRoleAssignmentMemberRequestParams","getRaiseHandMemberRequestParams","hand","getLowerAllHandsMemberRequestParams","editDisplayNameMemberRequestParams","aliasValue","ALIAS","POST","getTransferHostToMemberRequestParams","genderateSendDTMFOptions","url","tones","generateSendDTMFRequestParams","_ref","device","dtmf","correlationId","uuid","v4","direction","SEND_DTMF_ENDPOINT","cancelPhoneInviteOptions","generateCancelInviteRequestParams","actionType","_REMOVE_","_default","exports"],"sources":["util.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {\n HTTP_VERBS,\n CONTROLS,\n _FORCED_,\n LEAVE,\n PARTICIPANT,\n VALID_EMAIL_ADDRESS,\n DIALER_REGEX,\n SEND_DTMF_ENDPOINT,\n _REMOVE_,\n ALIAS,\n} from '../constants';\n\nimport {RoleAssignmentOptions, RoleAssignmentRequest, ServerRoleShape} from './types';\n\nconst MembersUtil = {\n /**\n * @param {Object} invitee with emailAddress, email or phoneNumber\n * @param {String} locusUrl\n * @param {Boolean} alertIfActive\n * @returns {Object} the format object\n */\n generateAddMemberOptions: (invitee: object, locusUrl: string, alertIfActive: boolean) => ({\n invitee,\n locusUrl,\n alertIfActive,\n }),\n\n /**\n * @param {Array} memberIds\n * @param {String} locusUrl\n * @returns {Object} the format object\n */\n generateAdmitMemberOptions: (memberIds: Array<any>, locusUrl: string) => ({\n locusUrl,\n memberIds,\n }),\n\n /**\n * @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}\n * @returns {Object} with {invitees: [{address}], alertIfActive}\n */\n getAddMemberBody: (options: any) => ({\n invitees: [\n {\n address:\n options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,\n ...(options.invitee.roles ? {roles: options.invitee.roles} : {}),\n },\n ],\n alertIfActive: options.alertIfActive,\n }),\n\n /**\n * @param {Object} options with {memberIds, authorizingLocusUrl}\n * @returns {Object} admit with {memberIds}\n */\n getAdmitMemberRequestBody: (options: any) => {\n const {memberIds, sessionLocusUrls} = options;\n const body: any = {admit: {participantIds: memberIds}};\n if (sessionLocusUrls) {\n const {authorizingLocusUrl} = sessionLocusUrls;\n\n return {authorizingLocusUrl, ...body};\n }\n\n return body;\n },\n\n /**\n * @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}\n * @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request\n * if a host/cohost is in a breakout session, the locus url should be the main session locus url\n */\n getAdmitMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAdmitMemberRequestBody(format);\n const {locusUrl, sessionLocusUrls} = format;\n const baseUrl = sessionLocusUrls?.mainLocusUrl || locusUrl;\n const uri = `${baseUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}\n * @returns {Object} the request parameters (method, uri, body) needed to make a addMember request\n */\n getAddMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAddMemberBody(format);\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: format.locusUrl,\n body,\n };\n\n return requestParams;\n },\n\n isInvalidInvitee: (invitee) => {\n if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {\n return true;\n }\n\n if (invitee.phoneNumber) {\n return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);\n }\n\n return !VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress);\n },\n\n getRemoveMemberRequestParams: (options) => {\n const body = {\n reason: options.reason,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${LEAVE}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n generateTransferHostMemberOptions: (transfer, moderator, locusUrl) => ({\n moderator,\n locusUrl,\n memberId: transfer,\n }),\n\n generateRemoveMemberOptions: (removal, locusUrl) => ({\n reason: _FORCED_,\n memberId: removal,\n locusUrl,\n }),\n\n generateMuteMemberOptions: (memberId, status, locusUrl, isAudio) => ({\n memberId,\n muted: status,\n locusUrl,\n isAudio,\n }),\n\n generateRaiseHandMemberOptions: (memberId, status, locusUrl) => ({\n memberId,\n raised: status,\n locusUrl,\n }),\n\n /**\n * @param {String} memberId\n * @param {[ServerRoleShape]} roles\n * @param {String} locusUrl\n * @returns {RoleAssignmentOptions}\n */\n generateRoleAssignmentMemberOptions: (\n memberId: string,\n roles: Array<ServerRoleShape>,\n locusUrl: string\n ): RoleAssignmentOptions => ({\n memberId,\n roles,\n locusUrl,\n }),\n\n generateLowerAllHandsMemberOptions: (requestingParticipantId, locusUrl, roles) => ({\n requestingParticipantId,\n locusUrl,\n ...(roles !== undefined && {roles}),\n }),\n\n /**\n * @param {String} memberId id of the participant who is receiving request\n * @param {String} requestingParticipantId id of the participant who is sending request (optional)\n * @param {String} alias alias name\n * @param {String} locusUrl url\n * @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}\n */\n generateEditDisplayNameMemberOptions: (memberId, requestingParticipantId, alias, locusUrl) => ({\n memberId,\n requestingParticipantId,\n alias,\n locusUrl,\n }),\n\n getMuteMemberRequestParams: (options) => {\n const property = options.isAudio === false ? 'video' : 'audio';\n const body = {\n [property]: {\n muted: options.muted,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {ServerRoleShape} role\n * @returns {ServerRoleShape} the role shape to be added to the body\n */\n getAddedRoleShape: (role: ServerRoleShape): ServerRoleShape => {\n const roleShape: ServerRoleShape = {type: role.type, hasRole: role.hasRole};\n\n if (role.hostKey) {\n roleShape.hostKey = role.hostKey;\n }\n\n return roleShape;\n },\n\n /**\n * @param {RoleAssignmentOptions} options\n * @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request\n */\n getRoleAssignmentMemberRequestParams: (options: RoleAssignmentOptions): RoleAssignmentRequest => {\n const body = {role: {roles: []}};\n options.roles.forEach((role) => {\n body.role.roles.push(MembersUtil.getAddedRoleShape(role));\n });\n\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getRaiseHandMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: options.raised,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getLowerAllHandsMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: false,\n ...(options.roles !== undefined && {roles: options.roles}),\n },\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}\n * @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request\n */\n editDisplayNameMemberRequestParams: (options) => {\n const body = {\n aliasValue: options.alias,\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${ALIAS}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n getTransferHostToMemberRequestParams: (options) => {\n const body = {\n role: {\n moderator: options.moderator,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n genderateSendDTMFOptions: (url, tones, memberId, locusUrl) => ({\n url,\n tones,\n memberId,\n locusUrl,\n }),\n\n generateSendDTMFRequestParams: ({url, tones, memberId, locusUrl}) => {\n const body = {\n device: {\n url,\n },\n memberId,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n direction: 'transmit',\n },\n };\n const uri = `${locusUrl}/${PARTICIPANT}/${memberId}/${SEND_DTMF_ENDPOINT}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n cancelPhoneInviteOptions: (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n }),\n\n generateCancelInviteRequestParams: (options) => {\n const body = {\n actionType: _REMOVE_,\n invitees: [\n {\n address: options.invitee.phoneNumber,\n },\n ],\n };\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: options.locusUrl,\n body,\n };\n\n return requestParams;\n },\n};\n\nexport default MembersUtil;\n"],"mappings":"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"}
@@ -805,6 +805,10 @@ export declare const DISPLAY_HINTS: {
805
805
  STAGE_VIEW_INACTIVE: string;
806
806
  ENABLE_STAGE_VIEW: string;
807
807
  DISABLE_STAGE_VIEW: string;
808
+ PRACTICE_SESSION_ON: string;
809
+ PRACTICE_SESSION_OFF: string;
810
+ SHOW_PRACTICE_SESSION_START: string;
811
+ SHOW_PRACTICE_SESSION_STOP: string;
808
812
  };
809
813
  export declare const INTERSTITIAL_DISPLAY_HINTS: string[];
810
814
  export declare const SELF_ROLES: {
@@ -89,6 +89,10 @@ interface IInMeetingActions {
89
89
  canShowStageView?: boolean;
90
90
  canEnableStageView?: boolean;
91
91
  canDisableStageView?: boolean;
92
+ isPracticeSessionOn?: boolean;
93
+ isPracticeSessionOff?: boolean;
94
+ canStartPracticeSession?: boolean;
95
+ canStopPracticeSession?: boolean;
92
96
  }
93
97
  /**
94
98
  * @class InMeetingActions
@@ -178,6 +182,10 @@ export default class InMeetingActions implements IInMeetingActions {
178
182
  canShowStageView: any;
179
183
  canEnableStageView: any;
180
184
  canDisableStageView: any;
185
+ isPracticeSessionOn: any;
186
+ isPracticeSessionOff: any;
187
+ canStartPracticeSession: any;
188
+ canStopPracticeSession: any;
181
189
  /**
182
190
  * Returns all meeting action options
183
191
  * @returns {Object}
@@ -806,6 +806,7 @@ export default class Meeting extends StatelessWebexPlugin {
806
806
  emailAddress: string;
807
807
  email: string;
808
808
  phoneNumber: string;
809
+ roles: Array<string>;
809
810
  }, alertIfActive?: boolean): any;
810
811
  /**
811
812
  * Cancel an outgoing phone call invitation made during a meeting
@@ -26,6 +26,7 @@ declare const MembersUtil: {
26
26
  */
27
27
  getAddMemberBody: (options: any) => {
28
28
  invitees: {
29
+ roles?: any;
29
30
  address: any;
30
31
  }[];
31
32
  alertIfActive: any;
@@ -54,6 +55,7 @@ declare const MembersUtil: {
54
55
  uri: any;
55
56
  body: {
56
57
  invitees: {
58
+ roles?: any;
57
59
  address: any;
58
60
  }[];
59
61
  alertIfActive: any;
@@ -10,6 +10,7 @@ var _webexCore = require("@webex/webex-core");
10
10
  var _lodash = require("lodash");
11
11
  var _constants = require("../constants");
12
12
  var _collection = _interopRequireDefault(require("./collection"));
13
+ var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
13
14
  /*!
14
15
  * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
15
16
  */
@@ -31,7 +32,9 @@ var Webinar = _webexCore.WebexPlugin.extend({
31
32
  // appears the ability to manage webcast
32
33
  selfIsPanelist: 'boolean',
33
34
  // self is panelist
34
- selfIsAttendee: 'boolean' // self is attendee
35
+ selfIsAttendee: 'boolean',
36
+ // self is attendee
37
+ practiceSessionEnabled: 'boolean' // practice session enabled
35
38
  },
36
39
  /**
37
40
  * Update the current locus url of the webinar
@@ -65,17 +68,46 @@ var Webinar = _webexCore.WebexPlugin.extend({
65
68
  * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states
66
69
  */
67
70
  updateRoleChanged: function updateRoleChanged(payload) {
68
- var isPromoted = (0, _lodash.get)(payload, 'oldRoles', []).includes(_constants.SELF_ROLES.ATTENDEE) && (0, _lodash.get)(payload, 'newRoles', []).includes(_constants.SELF_ROLES.PANELIST);
69
- var isDemoted = (0, _lodash.get)(payload, 'oldRoles', []).includes(_constants.SELF_ROLES.PANELIST) && (0, _lodash.get)(payload, 'newRoles', []).includes(_constants.SELF_ROLES.ATTENDEE);
70
- this.set('selfIsPanelist', (0, _lodash.get)(payload, 'newRoles', []).includes(_constants.SELF_ROLES.PANELIST));
71
- this.set('selfIsAttendee', (0, _lodash.get)(payload, 'newRoles', []).includes(_constants.SELF_ROLES.ATTENDEE));
72
- this.updateCanManageWebcast((0, _lodash.get)(payload, 'newRoles', []).includes(_constants.SELF_ROLES.MODERATOR));
71
+ var oldRoles = (0, _lodash.get)(payload, 'oldRoles', []);
72
+ var newRoles = (0, _lodash.get)(payload, 'newRoles', []);
73
+ var isPromoted = oldRoles.includes(_constants.SELF_ROLES.ATTENDEE) && newRoles.includes(_constants.SELF_ROLES.PANELIST);
74
+ var isDemoted = oldRoles.includes(_constants.SELF_ROLES.PANELIST) && newRoles.includes(_constants.SELF_ROLES.ATTENDEE);
75
+ this.set('selfIsPanelist', newRoles.includes(_constants.SELF_ROLES.PANELIST));
76
+ this.set('selfIsAttendee', newRoles.includes(_constants.SELF_ROLES.ATTENDEE));
77
+ this.updateCanManageWebcast(newRoles.includes(_constants.SELF_ROLES.MODERATOR));
73
78
  return {
74
79
  isPromoted: isPromoted,
75
80
  isDemoted: isDemoted
76
81
  };
77
82
  },
78
- version: "3.7.0-next.4"
83
+ /**
84
+ * start or stop practice session for webinar
85
+ * @param {boolean} enabled
86
+ * @returns {Promise}
87
+ */
88
+ setPracticeSessionState: function setPracticeSessionState(enabled) {
89
+ return this.request({
90
+ method: _constants.HTTP_VERBS.PATCH,
91
+ uri: "".concat(this.locusUrl, "/controls"),
92
+ body: {
93
+ practiceSession: {
94
+ enabled: enabled
95
+ }
96
+ }
97
+ }).catch(function (error) {
98
+ _loggerProxy.default.logger.error('Meeting:webinar#setPracticeSessionState failed', error);
99
+ throw error;
100
+ });
101
+ },
102
+ /**
103
+ * update practice session status
104
+ * @param {object} payload
105
+ * @returns {void}
106
+ */
107
+ updatePracticeSessionStatus: function updatePracticeSessionStatus(payload) {
108
+ this.set('practiceSessionEnabled', payload.enabled);
109
+ },
110
+ version: "3.7.0-next.5"
79
111
  });
80
112
  var _default = exports.default = Webinar;
81
113
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_lodash","_constants","_collection","_interopRequireDefault","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","locusUrlUpdate","set","updateWebcastUrl","payload","get","updateCanManageWebcast","updateRoleChanged","isPromoted","includes","SELF_ROLES","ATTENDEE","PANELIST","isDemoted","MODERATOR","version","_default","exports","default"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport {get} from 'lodash';\nimport {MEETINGS, SELF_ROLES} from '../constants';\n\nimport WebinarCollection from './collection';\n\n/**\n * @class Webinar\n */\nconst Webinar = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n webinar: WebinarCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current webinar's locus url\n webcastInstanceUrl: 'string', // current webinar's webcast instance url\n canManageWebcast: 'boolean', // appears the ability to manage webcast\n selfIsPanelist: 'boolean', // self is panelist\n selfIsAttendee: 'boolean', // self is attendee\n },\n\n /**\n * Update the current locus url of the webinar\n * @param {string} locusUrl\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n\n /**\n * Update the current webcast instance url of the meeting\n * @param {object} payload\n * @returns {void}\n */\n updateWebcastUrl(payload) {\n this.set('webcastInstanceUrl', get(payload, 'resources.webcastInstance.url'));\n },\n\n /**\n * Update whether self has capability to manage start/stop webcast (only host can manage it)\n * @param {boolean} canManageWebcast\n * @returns {void}\n */\n updateCanManageWebcast(canManageWebcast) {\n this.set('canManageWebcast', canManageWebcast);\n },\n\n /**\n * Updates user roles and manages associated state transitions\n * @param {object} payload\n * @param {string[]} payload.oldRoles - Previous roles of the user\n * @param {string[]} payload.newRoles - New roles of the user\n * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states\n */\n updateRoleChanged(payload) {\n const isPromoted =\n get(payload, 'oldRoles', []).includes(SELF_ROLES.ATTENDEE) &&\n get(payload, 'newRoles', []).includes(SELF_ROLES.PANELIST);\n const isDemoted =\n get(payload, 'oldRoles', []).includes(SELF_ROLES.PANELIST) &&\n get(payload, 'newRoles', []).includes(SELF_ROLES.ATTENDEE);\n this.set('selfIsPanelist', get(payload, 'newRoles', []).includes(SELF_ROLES.PANELIST));\n this.set('selfIsAttendee', get(payload, 'newRoles', []).includes(SELF_ROLES.ATTENDEE));\n this.updateCanManageWebcast(get(payload, 'newRoles', []).includes(SELF_ROLES.MODERATOR));\n\n return {isPromoted, isDemoted};\n },\n});\n\nexport default Webinar;\n"],"mappings":";;;;;;;;AAGA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAPA;AACA;AACA;;AAOA;AACA;AACA;AACA,IAAMK,OAAO,GAAGC,sBAAW,CAACC,MAAM,CAAC;EACjCC,SAAS,EAAEC,mBAAQ;EACnBC,WAAW,EAAE;IACXC,OAAO,EAAEC;EACX,CAAC;EAEDC,KAAK,EAAE;IACLC,QAAQ,EAAE,QAAQ;IAAE;IACpBC,kBAAkB,EAAE,QAAQ;IAAE;IAC9BC,gBAAgB,EAAE,SAAS;IAAE;IAC7BC,cAAc,EAAE,SAAS;IAAE;IAC3BC,cAAc,EAAE,SAAS,CAAE;EAC7B,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,cAAc,WAAAA,eAACL,QAAQ,EAAE;IACvB,IAAI,CAACM,GAAG,CAAC,UAAU,EAAEN,QAAQ,CAAC;EAChC,CAAC;EAED;AACF;AACA;AACA;AACA;EACEO,gBAAgB,WAAAA,iBAACC,OAAO,EAAE;IACxB,IAAI,CAACF,GAAG,CAAC,oBAAoB,EAAE,IAAAG,WAAG,EAACD,OAAO,EAAE,+BAA+B,CAAC,CAAC;EAC/E,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,sBAAsB,WAAAA,uBAACR,gBAAgB,EAAE;IACvC,IAAI,CAACI,GAAG,CAAC,kBAAkB,EAAEJ,gBAAgB,CAAC;EAChD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACES,iBAAiB,WAAAA,kBAACH,OAAO,EAAE;IACzB,IAAMI,UAAU,GACd,IAAAH,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACC,QAAQ,CAAC,IAC1D,IAAAN,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACE,QAAQ,CAAC;IAC5D,IAAMC,SAAS,GACb,IAAAR,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACE,QAAQ,CAAC,IAC1D,IAAAP,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACC,QAAQ,CAAC;IAC5D,IAAI,CAACT,GAAG,CAAC,gBAAgB,EAAE,IAAAG,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACE,QAAQ,CAAC,CAAC;IACtF,IAAI,CAACV,GAAG,CAAC,gBAAgB,EAAE,IAAAG,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACC,QAAQ,CAAC,CAAC;IACtF,IAAI,CAACL,sBAAsB,CAAC,IAAAD,WAAG,EAACD,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAACK,QAAQ,CAACC,qBAAU,CAACI,SAAS,CAAC,CAAC;IAExF,OAAO;MAACN,UAAU,EAAVA,UAAU;MAAEK,SAAS,EAATA;IAAS,CAAC;EAChC,CAAC;EAAAE,OAAA;AACH,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEY/B,OAAO"}
1
+ {"version":3,"names":["_webexCore","require","_lodash","_constants","_collection","_interopRequireDefault","_loggerProxy","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","practiceSessionEnabled","locusUrlUpdate","set","updateWebcastUrl","payload","get","updateCanManageWebcast","updateRoleChanged","oldRoles","newRoles","isPromoted","includes","SELF_ROLES","ATTENDEE","PANELIST","isDemoted","MODERATOR","setPracticeSessionState","enabled","request","method","HTTP_VERBS","PATCH","uri","concat","body","practiceSession","catch","error","LoggerProxy","logger","updatePracticeSessionStatus","version","_default","exports","default"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport {get} from 'lodash';\nimport {HTTP_VERBS, MEETINGS, SELF_ROLES} from '../constants';\n\nimport WebinarCollection from './collection';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\n/**\n * @class Webinar\n */\nconst Webinar = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n webinar: WebinarCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current webinar's locus url\n webcastInstanceUrl: 'string', // current webinar's webcast instance url\n canManageWebcast: 'boolean', // appears the ability to manage webcast\n selfIsPanelist: 'boolean', // self is panelist\n selfIsAttendee: 'boolean', // self is attendee\n practiceSessionEnabled: 'boolean', // practice session enabled\n },\n\n /**\n * Update the current locus url of the webinar\n * @param {string} locusUrl\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n\n /**\n * Update the current webcast instance url of the meeting\n * @param {object} payload\n * @returns {void}\n */\n updateWebcastUrl(payload) {\n this.set('webcastInstanceUrl', get(payload, 'resources.webcastInstance.url'));\n },\n\n /**\n * Update whether self has capability to manage start/stop webcast (only host can manage it)\n * @param {boolean} canManageWebcast\n * @returns {void}\n */\n updateCanManageWebcast(canManageWebcast) {\n this.set('canManageWebcast', canManageWebcast);\n },\n\n /**\n * Updates user roles and manages associated state transitions\n * @param {object} payload\n * @param {string[]} payload.oldRoles - Previous roles of the user\n * @param {string[]} payload.newRoles - New roles of the user\n * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states\n */\n updateRoleChanged(payload) {\n const oldRoles = get(payload, 'oldRoles', []);\n const newRoles = get(payload, 'newRoles', []);\n\n const isPromoted =\n oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.PANELIST);\n const isDemoted =\n oldRoles.includes(SELF_ROLES.PANELIST) && newRoles.includes(SELF_ROLES.ATTENDEE);\n this.set('selfIsPanelist', newRoles.includes(SELF_ROLES.PANELIST));\n this.set('selfIsAttendee', newRoles.includes(SELF_ROLES.ATTENDEE));\n this.updateCanManageWebcast(newRoles.includes(SELF_ROLES.MODERATOR));\n\n return {isPromoted, isDemoted};\n },\n\n /**\n * start or stop practice session for webinar\n * @param {boolean} enabled\n * @returns {Promise}\n */\n setPracticeSessionState(enabled) {\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n practiceSession: {\n enabled,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#setPracticeSessionState failed', error);\n throw error;\n });\n },\n\n /**\n * update practice session status\n * @param {object} payload\n * @returns {void}\n */\n updatePracticeSessionStatus(payload) {\n this.set('practiceSessionEnabled', payload.enabled);\n },\n});\n\nexport default Webinar;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -43,7 +43,7 @@
43
43
  "@webex/eslint-config-legacy": "0.0.0",
44
44
  "@webex/jest-config-legacy": "0.0.0",
45
45
  "@webex/legacy-tools": "0.0.0",
46
- "@webex/plugin-meetings": "3.7.0-next.4",
46
+ "@webex/plugin-meetings": "3.7.0-next.5",
47
47
  "@webex/plugin-rooms": "3.7.0-next.1",
48
48
  "@webex/test-helper-chai": "3.7.0-next.1",
49
49
  "@webex/test-helper-mocha": "3.7.0-next.1",
@@ -70,7 +70,7 @@
70
70
  "@webex/internal-plugin-metrics": "3.7.0-next.1",
71
71
  "@webex/internal-plugin-support": "3.7.0-next.1",
72
72
  "@webex/internal-plugin-user": "3.7.0-next.1",
73
- "@webex/internal-plugin-voicea": "3.7.0-next.4",
73
+ "@webex/internal-plugin-voicea": "3.7.0-next.5",
74
74
  "@webex/media-helpers": "3.7.0-next.1",
75
75
  "@webex/plugin-people": "3.7.0-next.1",
76
76
  "@webex/plugin-rooms": "3.7.0-next.1",
@@ -91,5 +91,5 @@
91
91
  "//": [
92
92
  "TODO: upgrade jwt-decode when moving to node 18"
93
93
  ],
94
- "version": "3.7.0-next.4"
94
+ "version": "3.7.0-next.5"
95
95
  }
package/src/constants.ts CHANGED
@@ -988,6 +988,12 @@ export const DISPLAY_HINTS = {
988
988
  STAGE_VIEW_INACTIVE: 'STAGE_VIEW_INACTIVE',
989
989
  ENABLE_STAGE_VIEW: 'ENABLE_STAGE_VIEW',
990
990
  DISABLE_STAGE_VIEW: 'DISABLE_STAGE_VIEW',
991
+
992
+ // Practice Session
993
+ PRACTICE_SESSION_ON: 'PRACTICE_SESSION_ON',
994
+ PRACTICE_SESSION_OFF: 'PRACTICE_SESSION_OFF',
995
+ SHOW_PRACTICE_SESSION_START: 'SHOW_PRACTICE_SESSION_START',
996
+ SHOW_PRACTICE_SESSION_STOP: 'SHOW_PRACTICE_SESSION_STOP',
991
997
  };
992
998
 
993
999
  export const INTERSTITIAL_DISPLAY_HINTS = [DISPLAY_HINTS.VOIP_IS_ENABLED];
@@ -93,6 +93,10 @@ interface IInMeetingActions {
93
93
  canShowStageView?: boolean;
94
94
  canEnableStageView?: boolean;
95
95
  canDisableStageView?: boolean;
96
+ isPracticeSessionOn?: boolean;
97
+ isPracticeSessionOff?: boolean;
98
+ canStartPracticeSession?: boolean;
99
+ canStopPracticeSession?: boolean;
96
100
  }
97
101
 
98
102
  /**
@@ -266,6 +270,15 @@ export default class InMeetingActions implements IInMeetingActions {
266
270
  canEnableStageView = null;
267
271
 
268
272
  canDisableStageView = null;
273
+
274
+ isPracticeSessionOn = null;
275
+
276
+ isPracticeSessionOff = null;
277
+
278
+ canStartPracticeSession = null;
279
+
280
+ canStopPracticeSession = null;
281
+
269
282
  /**
270
283
  * Returns all meeting action options
271
284
  * @returns {Object}
@@ -354,6 +367,10 @@ export default class InMeetingActions implements IInMeetingActions {
354
367
  canShowStageView: this.canShowStageView,
355
368
  canEnableStageView: this.canEnableStageView,
356
369
  canDisableStageView: this.canDisableStageView,
370
+ isPracticeSessionOn: this.isPracticeSessionOn,
371
+ isPracticeSessionOff: this.isPracticeSessionOff,
372
+ canStartPracticeSession: this.canStartPracticeSession,
373
+ canStopPracticeSession: this.canStopPracticeSession,
357
374
  });
358
375
 
359
376
  /**
@@ -2660,6 +2660,7 @@ export default class Meeting extends StatelessWebexPlugin {
2660
2660
  });
2661
2661
 
2662
2662
  this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, ({state}) => {
2663
+ this.webinar.updatePracticeSessionStatus(state);
2663
2664
  Trigger.trigger(
2664
2665
  this,
2665
2666
  {file: 'meeting/index', function: 'setupLocusControlsListener'},
@@ -3516,6 +3517,7 @@ export default class Meeting extends StatelessWebexPlugin {
3516
3517
  emailAddress: string;
3517
3518
  email: string;
3518
3519
  phoneNumber: string;
3520
+ roles: Array<string>;
3519
3521
  },
3520
3522
  alertIfActive = true
3521
3523
  ) {
@@ -3915,6 +3917,22 @@ export default class Meeting extends StatelessWebexPlugin {
3915
3917
  requiredHints: [DISPLAY_HINTS.DISABLE_STAGE_VIEW],
3916
3918
  displayHints: this.userDisplayHints,
3917
3919
  }),
3920
+ isPracticeSessionOn: ControlsOptionsUtil.hasHints({
3921
+ requiredHints: [DISPLAY_HINTS.PRACTICE_SESSION_ON],
3922
+ displayHints: this.userDisplayHints,
3923
+ }),
3924
+ isPracticeSessionOff: ControlsOptionsUtil.hasHints({
3925
+ requiredHints: [DISPLAY_HINTS.PRACTICE_SESSION_OFF],
3926
+ displayHints: this.userDisplayHints,
3927
+ }),
3928
+ canStartPracticeSession: ControlsOptionsUtil.hasHints({
3929
+ requiredHints: [DISPLAY_HINTS.SHOW_PRACTICE_SESSION_START],
3930
+ displayHints: this.userDisplayHints,
3931
+ }),
3932
+ canStopPracticeSession: ControlsOptionsUtil.hasHints({
3933
+ requiredHints: [DISPLAY_HINTS.SHOW_PRACTICE_SESSION_STOP],
3934
+ displayHints: this.userDisplayHints,
3935
+ }),
3918
3936
  canShareFile:
3919
3937
  (ControlsOptionsUtil.hasHints({
3920
3938
  requiredHints: [DISPLAY_HINTS.SHARE_FILE],
@@ -46,6 +46,7 @@ const MembersUtil = {
46
46
  {
47
47
  address:
48
48
  options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,
49
+ ...(options.invitee.roles ? {roles: options.invitee.roles} : {}),
49
50
  },
50
51
  ],
51
52
  alertIfActive: options.alertIfActive,
@@ -3,9 +3,10 @@
3
3
  */
4
4
  import {WebexPlugin} from '@webex/webex-core';
5
5
  import {get} from 'lodash';
6
- import {MEETINGS, SELF_ROLES} from '../constants';
6
+ import {HTTP_VERBS, MEETINGS, SELF_ROLES} from '../constants';
7
7
 
8
8
  import WebinarCollection from './collection';
9
+ import LoggerProxy from '../common/logs/logger-proxy';
9
10
 
10
11
  /**
11
12
  * @class Webinar
@@ -22,6 +23,7 @@ const Webinar = WebexPlugin.extend({
22
23
  canManageWebcast: 'boolean', // appears the ability to manage webcast
23
24
  selfIsPanelist: 'boolean', // self is panelist
24
25
  selfIsAttendee: 'boolean', // self is attendee
26
+ practiceSessionEnabled: 'boolean', // practice session enabled
25
27
  },
26
28
 
27
29
  /**
@@ -59,18 +61,48 @@ const Webinar = WebexPlugin.extend({
59
61
  * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states
60
62
  */
61
63
  updateRoleChanged(payload) {
64
+ const oldRoles = get(payload, 'oldRoles', []);
65
+ const newRoles = get(payload, 'newRoles', []);
66
+
62
67
  const isPromoted =
63
- get(payload, 'oldRoles', []).includes(SELF_ROLES.ATTENDEE) &&
64
- get(payload, 'newRoles', []).includes(SELF_ROLES.PANELIST);
68
+ oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.PANELIST);
65
69
  const isDemoted =
66
- get(payload, 'oldRoles', []).includes(SELF_ROLES.PANELIST) &&
67
- get(payload, 'newRoles', []).includes(SELF_ROLES.ATTENDEE);
68
- this.set('selfIsPanelist', get(payload, 'newRoles', []).includes(SELF_ROLES.PANELIST));
69
- this.set('selfIsAttendee', get(payload, 'newRoles', []).includes(SELF_ROLES.ATTENDEE));
70
- this.updateCanManageWebcast(get(payload, 'newRoles', []).includes(SELF_ROLES.MODERATOR));
70
+ oldRoles.includes(SELF_ROLES.PANELIST) && newRoles.includes(SELF_ROLES.ATTENDEE);
71
+ this.set('selfIsPanelist', newRoles.includes(SELF_ROLES.PANELIST));
72
+ this.set('selfIsAttendee', newRoles.includes(SELF_ROLES.ATTENDEE));
73
+ this.updateCanManageWebcast(newRoles.includes(SELF_ROLES.MODERATOR));
71
74
 
72
75
  return {isPromoted, isDemoted};
73
76
  },
77
+
78
+ /**
79
+ * start or stop practice session for webinar
80
+ * @param {boolean} enabled
81
+ * @returns {Promise}
82
+ */
83
+ setPracticeSessionState(enabled) {
84
+ return this.request({
85
+ method: HTTP_VERBS.PATCH,
86
+ uri: `${this.locusUrl}/controls`,
87
+ body: {
88
+ practiceSession: {
89
+ enabled,
90
+ },
91
+ },
92
+ }).catch((error) => {
93
+ LoggerProxy.logger.error('Meeting:webinar#setPracticeSessionState failed', error);
94
+ throw error;
95
+ });
96
+ },
97
+
98
+ /**
99
+ * update practice session status
100
+ * @param {object} payload
101
+ * @returns {void}
102
+ */
103
+ updatePracticeSessionStatus(payload) {
104
+ this.set('practiceSessionEnabled', payload.enabled);
105
+ },
74
106
  });
75
107
 
76
108
  export default Webinar;
@@ -88,6 +88,11 @@ describe('plugin-meetings', () => {
88
88
  canShowStageView: null,
89
89
  canEnableStageView: null,
90
90
  canDisableStageView: null,
91
+ isPracticeSessionOn : null,
92
+ isPracticeSessionOff : null,
93
+ canStartPracticeSession: null,
94
+ canStopPracticeSession: null,
95
+
91
96
  ...expected,
92
97
  };
93
98
 
@@ -181,7 +186,12 @@ describe('plugin-meetings', () => {
181
186
  'canShowStageView',
182
187
  'canEnableStageView',
183
188
  'canDisableStageView',
184
- ].forEach((key) => {
189
+ 'isPracticeSessionOn',
190
+ 'isPracticeSessionOff',
191
+ 'canStartPracticeSession',
192
+ 'canStopPracticeSession',
193
+
194
+ ].forEach((key) => {
185
195
  it(`get and set for ${key} work as expected`, () => {
186
196
  const inMeetingActions = new InMeetingActions();
187
197
 
@@ -9044,6 +9044,8 @@ describe('plugin-meetings', () => {
9044
9044
  });
9045
9045
 
9046
9046
  it('listens to MEETING_CONTROLS_PRACTICE_SESSION_STATUS_UPDATED', async () => {
9047
+ meeting.webinar.updatePracticeSessionStatus = sinon.stub();
9048
+
9047
9049
  const state = {example: 'value'};
9048
9050
 
9049
9051
  await meeting.locusInfo.emitScoped(
@@ -9052,6 +9054,7 @@ describe('plugin-meetings', () => {
9052
9054
  {state}
9053
9055
  );
9054
9056
 
9057
+ assert.calledOnceWithExactly( meeting.webinar.updatePracticeSessionStatus, state);
9055
9058
  assert.calledWith(
9056
9059
  TriggerProxy.trigger,
9057
9060
  meeting,
@@ -262,5 +262,100 @@ describe('plugin-meetings', () => {
262
262
  testParams(false);
263
263
  });
264
264
  });
265
+
266
+ describe('#getAddMemberBody', () => {
267
+ it('returns the correct body with email address and roles', () => {
268
+ const options = {
269
+ invitee: {
270
+ emailAddress: 'test@example.com',
271
+ roles: ['role1', 'role2'],
272
+ },
273
+ alertIfActive: true,
274
+ };
275
+
276
+ assert.deepEqual(MembersUtil.getAddMemberBody(options), {
277
+ invitees: [
278
+ {
279
+ address: 'test@example.com',
280
+ roles: ['role1', 'role2'],
281
+ },
282
+ ],
283
+ alertIfActive: true,
284
+ });
285
+ });
286
+
287
+ it('returns the correct body with phone number and no roles', () => {
288
+ const options = {
289
+ invitee: {
290
+ phoneNumber: '1234567890',
291
+ },
292
+ alertIfActive: false,
293
+ };
294
+
295
+ assert.deepEqual(MembersUtil.getAddMemberBody(options), {
296
+ invitees: [
297
+ {
298
+ address: '1234567890',
299
+ },
300
+ ],
301
+ alertIfActive: false,
302
+ });
303
+ });
304
+
305
+ it('returns the correct body with fallback to email', () => {
306
+ const options = {
307
+ invitee: {
308
+ email: 'fallback@example.com',
309
+ },
310
+ alertIfActive: true,
311
+ };
312
+
313
+ assert.deepEqual(MembersUtil.getAddMemberBody(options), {
314
+ invitees: [
315
+ {
316
+ address: 'fallback@example.com',
317
+ },
318
+ ],
319
+ alertIfActive: true,
320
+ });
321
+ });
322
+
323
+ it('handles missing `alertIfActive` gracefully', () => {
324
+ const options = {
325
+ invitee: {
326
+ emailAddress: 'test@example.com',
327
+ roles: ['role1'],
328
+ },
329
+ };
330
+
331
+ assert.deepEqual(MembersUtil.getAddMemberBody(options), {
332
+ invitees: [
333
+ {
334
+ address: 'test@example.com',
335
+ roles: ['role1'],
336
+ },
337
+ ],
338
+ alertIfActive: undefined,
339
+ });
340
+ });
341
+
342
+ it('ignores roles if not provided', () => {
343
+ const options = {
344
+ invitee: {
345
+ emailAddress: 'test@example.com',
346
+ },
347
+ alertIfActive: false,
348
+ };
349
+
350
+ assert.deepEqual(MembersUtil.getAddMemberBody(options), {
351
+ invitees: [
352
+ {
353
+ address: 'test@example.com',
354
+ },
355
+ ],
356
+ alertIfActive: false,
357
+ });
358
+ });
359
+ });
265
360
  });
266
361
  });