@webex/plugin-meetings 3.11.0-next.4 → 3.11.0-next.41
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/aiEnableRequest/index.js +184 -0
- package/dist/aiEnableRequest/index.js.map +1 -0
- package/dist/aiEnableRequest/utils.js +36 -0
- package/dist/aiEnableRequest/utils.js.map +1 -0
- package/dist/annotation/index.js +3 -3
- package/dist/annotation/index.js.map +1 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +26 -6
- package/dist/constants.js.map +1 -1
- package/dist/hashTree/constants.js +3 -1
- package/dist/hashTree/constants.js.map +1 -1
- package/dist/hashTree/hashTree.js +18 -0
- package/dist/hashTree/hashTree.js.map +1 -1
- package/dist/hashTree/hashTreeParser.js +709 -380
- package/dist/hashTree/hashTreeParser.js.map +1 -1
- package/dist/hashTree/types.js +4 -2
- package/dist/hashTree/types.js.map +1 -1
- package/dist/hashTree/utils.js +10 -0
- package/dist/hashTree/utils.js.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/interceptors/constant.js +12 -0
- package/dist/interceptors/constant.js.map +1 -0
- package/dist/interceptors/dataChannelAuthToken.js +233 -0
- package/dist/interceptors/dataChannelAuthToken.js.map +1 -0
- package/dist/interceptors/index.js +7 -0
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interpretation/index.js +2 -2
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +5 -3
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +125 -68
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/selfUtils.js +1 -0
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/locus-info/types.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.js +57 -1
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/properties.js +4 -2
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +7 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +209 -90
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +50 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +128 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +78 -36
- package/dist/meetings/index.js.map +1 -1
- package/dist/member/index.js +10 -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/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +1 -1
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +11 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/types/aiEnableRequest/index.d.ts +5 -0
- package/dist/types/aiEnableRequest/utils.d.ts +2 -0
- package/dist/types/config.d.ts +3 -0
- package/dist/types/constants.d.ts +21 -1
- package/dist/types/hashTree/constants.d.ts +1 -0
- package/dist/types/hashTree/hashTree.d.ts +7 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +99 -14
- package/dist/types/hashTree/types.d.ts +3 -0
- package/dist/types/hashTree/utils.d.ts +6 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/interceptors/constant.d.ts +5 -0
- package/dist/types/interceptors/dataChannelAuthToken.d.ts +35 -0
- package/dist/types/interceptors/index.d.ts +2 -1
- package/dist/types/locus-info/index.d.ts +9 -2
- package/dist/types/locus-info/types.d.ts +1 -0
- package/dist/types/media/MediaConnectionAwaiter.d.ts +10 -1
- package/dist/types/media/properties.d.ts +2 -1
- package/dist/types/meeting/in-meeting-actions.d.ts +6 -0
- package/dist/types/meeting/index.d.ts +24 -2
- package/dist/types/meeting/request.d.ts +16 -1
- package/dist/types/meeting/request.type.d.ts +5 -0
- package/dist/types/meeting/util.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +4 -2
- package/dist/types/member/index.d.ts +1 -0
- package/dist/types/member/util.d.ts +5 -0
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/types/reactions/reactions.type.d.ts +1 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/aiEnableRequest/README.md +84 -0
- package/src/aiEnableRequest/index.ts +170 -0
- package/src/aiEnableRequest/utils.ts +25 -0
- package/src/annotation/index.ts +7 -4
- package/src/config.ts +3 -0
- package/src/constants.ts +26 -1
- package/src/hashTree/constants.ts +1 -0
- package/src/hashTree/hashTree.ts +17 -0
- package/src/hashTree/hashTreeParser.ts +627 -249
- package/src/hashTree/types.ts +4 -0
- package/src/hashTree/utils.ts +9 -0
- package/src/index.ts +8 -1
- package/src/interceptors/constant.ts +6 -0
- package/src/interceptors/dataChannelAuthToken.ts +142 -0
- package/src/interceptors/index.ts +2 -1
- package/src/interpretation/index.ts +2 -2
- package/src/locus-info/controlsUtils.ts +11 -0
- package/src/locus-info/index.ts +146 -58
- package/src/locus-info/selfUtils.ts +1 -0
- package/src/locus-info/types.ts +1 -0
- package/src/media/MediaConnectionAwaiter.ts +41 -1
- package/src/media/properties.ts +3 -1
- package/src/meeting/in-meeting-actions.ts +12 -0
- package/src/meeting/index.ts +127 -17
- package/src/meeting/request.ts +42 -0
- package/src/meeting/request.type.ts +6 -0
- package/src/meeting/util.ts +156 -1
- package/src/meetings/index.ts +94 -9
- package/src/member/index.ts +10 -0
- package/src/member/util.ts +12 -0
- package/src/metrics/constants.ts +1 -0
- package/src/multistream/mediaRequestManager.ts +1 -1
- package/src/multistream/remoteMediaManager.ts +13 -0
- package/src/reactions/reactions.type.ts +1 -0
- package/test/unit/spec/aiEnableRequest/index.ts +981 -0
- package/test/unit/spec/aiEnableRequest/utils.ts +130 -0
- package/test/unit/spec/hashTree/hashTree.ts +66 -0
- package/test/unit/spec/hashTree/hashTreeParser.ts +1869 -189
- package/test/unit/spec/interceptors/dataChannelAuthToken.ts +141 -0
- package/test/unit/spec/locus-info/controlsUtils.js +29 -0
- package/test/unit/spec/locus-info/index.js +201 -45
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +41 -1
- package/test/unit/spec/media/properties.ts +12 -3
- package/test/unit/spec/meeting/in-meeting-actions.ts +8 -2
- package/test/unit/spec/meeting/index.js +441 -75
- package/test/unit/spec/meeting/request.js +64 -0
- package/test/unit/spec/meeting/utils.js +433 -22
- package/test/unit/spec/meetings/index.js +550 -10
- package/test/unit/spec/member/index.js +28 -4
- package/test/unit/spec/member/util.js +65 -27
- package/test/unit/spec/multistream/remoteMediaManager.ts +30 -0
package/dist/meeting/request.js
CHANGED
|
@@ -1078,6 +1078,56 @@ var MeetingRequest = exports.default = /*#__PURE__*/function (_StatelessWebexPlu
|
|
|
1078
1078
|
return _cancelSipCallOut.apply(this, arguments);
|
|
1079
1079
|
}
|
|
1080
1080
|
return cancelSipCallOut;
|
|
1081
|
+
}()
|
|
1082
|
+
/**
|
|
1083
|
+
* Sends a request to retrieve the datachannel authorization token for a participant.
|
|
1084
|
+
*
|
|
1085
|
+
* For regular meeting data channel:
|
|
1086
|
+
* GET /locus/api/v1/loci/{uuid:lid}/participant/{uuid:pid}/datachannel/token
|
|
1087
|
+
*
|
|
1088
|
+
* For practice session data channel:
|
|
1089
|
+
* GET /locus/api/v1/loci/{uuid:lid}/participant/{uuid:pid}/practiceSession/datachannel/token
|
|
1090
|
+
*
|
|
1091
|
+
* @param {string} locusUrl - The locus url.
|
|
1092
|
+
* @param {string} requestingParticipantId - The participant UUID.
|
|
1093
|
+
* @param {boolean} [isPracticeSession=false] - Whether to get the practice session token.
|
|
1094
|
+
* @returns {Promise<{datachannelToken: string}>}
|
|
1095
|
+
*/
|
|
1096
|
+
)
|
|
1097
|
+
}, {
|
|
1098
|
+
key: "fetchDatachannelToken",
|
|
1099
|
+
value: (function () {
|
|
1100
|
+
var _fetchDatachannelToken = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5(_ref15) {
|
|
1101
|
+
var locusUrl, requestingParticipantId, _ref15$isPracticeSess, isPracticeSession, practicePrefix, uri;
|
|
1102
|
+
return _regenerator.default.wrap(function (_context5) {
|
|
1103
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
1104
|
+
case 0:
|
|
1105
|
+
locusUrl = _ref15.locusUrl, requestingParticipantId = _ref15.requestingParticipantId, _ref15$isPracticeSess = _ref15.isPracticeSession, isPracticeSession = _ref15$isPracticeSess === void 0 ? false : _ref15$isPracticeSess;
|
|
1106
|
+
if (!(!locusUrl || !requestingParticipantId)) {
|
|
1107
|
+
_context5.next = 1;
|
|
1108
|
+
break;
|
|
1109
|
+
}
|
|
1110
|
+
return _context5.abrupt("return", _promise.default.reject(new Error('locusUrl and participantId are required')));
|
|
1111
|
+
case 1:
|
|
1112
|
+
practicePrefix = isPracticeSession ? '/practiceSession' : '';
|
|
1113
|
+
uri = "".concat(locusUrl, "/").concat(_constants.PARTICIPANT, "/").concat(requestingParticipantId).concat(practicePrefix, "/datachannel/token"); // @ts-ignore
|
|
1114
|
+
return _context5.abrupt("return", this.locusDeltaRequest({
|
|
1115
|
+
method: _constants.HTTP_VERBS.GET,
|
|
1116
|
+
uri: uri
|
|
1117
|
+
}).catch(function (err) {
|
|
1118
|
+
_loggerProxy.default.logger.error("Meeting:request#fetchDatachannelToken --> Error retrieving ".concat(isPracticeSession ? 'practice session ' : '', "datachannel token, error ").concat(err));
|
|
1119
|
+
throw err;
|
|
1120
|
+
}));
|
|
1121
|
+
case 2:
|
|
1122
|
+
case "end":
|
|
1123
|
+
return _context5.stop();
|
|
1124
|
+
}
|
|
1125
|
+
}, _callee5, this);
|
|
1126
|
+
}));
|
|
1127
|
+
function fetchDatachannelToken(_x7) {
|
|
1128
|
+
return _fetchDatachannelToken.apply(this, arguments);
|
|
1129
|
+
}
|
|
1130
|
+
return fetchDatachannelToken;
|
|
1081
1131
|
}())
|
|
1082
1132
|
}]);
|
|
1083
1133
|
}(_webexCore.StatelessWebexPlugin);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","_interopRequireDefault","require","_lodash","_webexCore","_common","_internalPluginMetrics","_loggerProxy","_constants","_util","_excluded","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","MeetingRequest","exports","_StatelessWebexPlugin","attrs","options","_this","_classCallCheck2","meeting","otherAttrs","_objectWithoutProperties2","_asyncToGenerator2","_regenerator","mark","_callee","joinCookieRaw","joinCookie","_t","wrap","_context","prev","next","webex","boundedStorage","get","REACHABILITY","namespace","localStorageJoinCookie","catch","sent","JSON","parse","abrupt","LoggerProxy","logger","error","concat","stop","locusDeltaRequest","MeetingUtil","generateLocusDeltaRequest","buildLocusDeltaRequestOptions","generateBuildLocusDeltaRequestOptions","changeVideoLayoutDebounced","debounce","changeVideoLayout","leading","trailing","_inherits2","_createClass2","key","value","_joinMeeting","_callee2","asResourceOccupant","inviteeAddress","meetingNumber","permissionToken","deviceUrl","locusUrl","locusClusterUrl","resourceId","correlationId","ensureConversation","moderator","pin","moveToResource","roapMessage","reachability","breakoutsSupported","locale","_options$deviceCapabi","deviceCapabilities","liveAnnotationSupported","clientMediaPreferences","alias","url","body","clusterUrl","_t2","_context2","info","device","deviceType","config","meetings","usingResource","moveMediaToResource","respOnlySdp","allowMultiDevice","supportsNativeLobby","BREAKOUTS","BREAKOUTS_SUPPORTED","ANNOTATION","ANNOTATION_ON_SHARE_SUPPORTED","internal","installationId","geoHintInfo","countryCode","regionCode","localIp","CallDiagnosticUtils","anonymizeIPAddress","clientAddress","undefined","PARTICIPANT","services","waitForCatalog","LOCI","CALL","invitee","address","ALTERNATE_REDIRECT_TRUE","callPreferences","requestedMedia","_SLIDES_","localMedias","localSdp","_stringify","request","method","HTTP_VERBS","POST","uri","joinMeeting","_x","refreshCaptcha","_ref2","captchaRefreshUrl","captchaId","err","dialIn","_ref3","dialInUrl","clientUrl","PROVISIONAL","provisionalType","PROVISIONAL_TYPE_DIAL_IN","dialOut","_ref4","dialOutUrl","phoneNumber","PROVISIONAL_TYPE_DIAL_OUT","dialoutAddress","getLocusDTO","GET","_promise","reject","disconnectPhoneAudio","_ref5","phoneUrl","selfId","LEAVE","PUT","prepareLeaveMeetingRequestOptions","_ref6","leaveMeeting","_ref7","buildLeaveMeetingRequestOptions","acknowledgeMeeting","ALERT","lockMeeting","CONTROLS","lock","locked","PATCH","declineMeeting","DECLINE","reason","changeMeetingFloor","floorReq","disposition","FLOOR_ACTION","GRANTED","beneficiary","personUrl","devices","requester","floor","resourceUrl","shareInstanceId","resourceToken","annotationInfo","annotation","sendDTMF","_ref8","tones","SEND_DTMF_ENDPOINT","dtmf","uuid","v4","_ref9","layoutType","main","content","width","height","Error","renderInfoMain","renderInfoContent","layoutParams","renderInfo","layout","type","endMeetingForAll","_ref0","END","keepAlive","_ref1","keepAliveUrl","sendReaction","_ref10","reactionChannelUrl","reaction","participantId","sender","extendMeeting","_ref11","meetingInstanceId","extensionMinutes","meetingPolicyUrl","requestParticipantId","toggleReactions","_ref12","enable","requestingParticipantId","reactions","enabled","getLocusStatusByUrl","setBrb","_ref13","brb","setPostMeetingDataConsent","_ref14","postMeetingDataConsent","consent","synchronizeStage","videoLayout","notifyHost","siteFullUrl","locusId","meetingUuid","displayName","size","headers","_sipCallOut","_callee3","meetingId","response","_t3","_context3","service","resource","Accept","sipCallOut","_x2","_x3","_x4","_x5","_cancelSipCallOut","_callee4","_t4","_context4","cancelSipCallOut","_x6","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {debounce} from 'lodash';\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n// @ts-ignore\nimport {deviceType} from '@webex/common';\nimport {CallDiagnosticUtils} from '@webex/internal-plugin-metrics';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n ALERT,\n ALTERNATE_REDIRECT_TRUE,\n BREAKOUTS,\n CALL,\n CONTROLS,\n DECLINE,\n END,\n FLOOR_ACTION,\n HTTP_VERBS,\n LEAVE,\n LOCI,\n PARTICIPANT,\n PROVISIONAL_TYPE_DIAL_IN,\n PROVISIONAL_TYPE_DIAL_OUT,\n REACHABILITY,\n SEND_DTMF_ENDPOINT,\n _SLIDES_,\n ANNOTATION,\n} from '../constants';\nimport {\n SendReactionOptions,\n BrbOptions,\n ToggleReactionsOptions,\n PostMeetingDataConsentOptions,\n SynchronizeVideoLayout,\n} from './request.type';\nimport MeetingUtil from './util';\nimport {AnnotationInfo} from '../annotation/annotation.types';\nimport {ClientMediaPreferences} from '../reachability/reachability.types';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n changeVideoLayoutDebounced: any;\n meetingRef: WeakRef<any>;\n locusDeltaRequest: (options: object) => Promise<any>;\n buildLocusDeltaRequestOptions: (options: object) => Promise<any>;\n\n /**\n * Constructor\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n const {meeting, ...otherAttrs} = attrs;\n\n super(otherAttrs, options);\n\n this.locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);\n this.buildLocusDeltaRequestOptions = MeetingUtil.generateBuildLocusDeltaRequestOptions(meeting);\n\n this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {\n leading: true,\n trailing: true,\n });\n }\n\n /**\n * Returns joinCookie from boundedStorage if present.\n * @returns {Object} joinCookie\n */\n private getJoinCookie = async () => {\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n const joinCookie = JSON.parse(joinCookieRaw);\n if (joinCookie) {\n return joinCookie;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return null;\n };\n\n /**\n * Make a network request to join a meeting\n * @param {Object} options\n * @param {String} options.sipUri\n * @param {String} options.deviceUrl\n * @param {String} options.locusUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @param {boolean} options.ensureConversation\n * @param {boolean} options.moderator\n * @param {boolean} options.pin\n * @param {boolean} options.moveToResource\n * @param {Object} options.roapMessage\n * @param {boolean} options.breakoutsSupported\n * @param {String} options.locale,\n * @param {Array} options.deviceCapabilities\n * @param {boolean} options.liveAnnotationSupported\n * @param {String} options.alias\n * @returns {Promise}\n */\n async joinMeeting(options: {\n sipUri: string;\n deviceUrl: string;\n locusUrl: string;\n locusClusterUrl: string;\n resourceId: string;\n correlationId: string;\n ensureConversation: boolean;\n moderator: boolean;\n pin: boolean;\n moveToResource: boolean;\n roapMessage: any;\n asResourceOccupant: any;\n inviteeAddress: any;\n meetingNumber: any;\n permissionToken: any;\n preferTranscoding: any;\n reachability: any;\n breakoutsSupported: boolean;\n locale?: string;\n deviceCapabilities?: Array<string>;\n liveAnnotationSupported: boolean;\n alias?: string;\n clientMediaPreferences: ClientMediaPreferences;\n }) {\n const {\n asResourceOccupant,\n inviteeAddress,\n meetingNumber,\n permissionToken,\n deviceUrl,\n locusUrl,\n locusClusterUrl,\n resourceId,\n correlationId,\n ensureConversation,\n moderator,\n pin,\n moveToResource,\n roapMessage,\n reachability,\n breakoutsSupported,\n locale,\n deviceCapabilities = [],\n liveAnnotationSupported,\n clientMediaPreferences,\n alias,\n } = options;\n\n LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);\n\n let url = '';\n\n const body: any = {\n asResourceOccupant,\n device: {\n url: deviceUrl,\n // @ts-ignore - config comes from registerPlugin\n deviceType: this.config.meetings.deviceType,\n },\n usingResource: resourceId || null,\n moveMediaToResource: (resourceId && moveToResource) || false,\n correlationId,\n respOnlySdp: true,\n allowMultiDevice: true,\n ensureConversation: ensureConversation || false,\n supportsNativeLobby: 1,\n clientMediaPreferences,\n };\n\n if (alias) {\n body.alias = alias;\n }\n\n if (breakoutsSupported) {\n deviceCapabilities.push(BREAKOUTS.BREAKOUTS_SUPPORTED);\n }\n if (liveAnnotationSupported) {\n deviceCapabilities.push(ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);\n }\n\n // append installationId to device config if it exists\n // @ts-ignore\n if (this.webex.internal.device.config.installationId) {\n // @ts-ignore\n body.device.installationId = this.webex.internal.device.config.installationId;\n }\n\n if (locale) {\n body.locale = locale;\n }\n\n // add deviceCapabilities prop\n if (deviceCapabilities.length) {\n body.deviceCapabilities = deviceCapabilities;\n }\n // @ts-ignore\n if (this.webex.meetings.geoHintInfo) {\n // @ts-ignore\n body.device.countryCode = this.webex.meetings.geoHintInfo.countryCode;\n // @ts-ignore\n body.device.regionCode = this.webex.meetings.geoHintInfo.regionCode;\n body.device.localIp =\n // @ts-ignore\n CallDiagnosticUtils.anonymizeIPAddress(this.webex.meetings.geoHintInfo.clientAddress) ||\n undefined;\n }\n\n if (moderator !== undefined) {\n body.moderator = moderator;\n }\n\n if (permissionToken) {\n body.permissionToken = permissionToken;\n }\n\n if (pin !== undefined) {\n body.pin = pin;\n }\n\n if (locusUrl) {\n url = `${locusUrl}/${PARTICIPANT}`;\n } else if (inviteeAddress || meetingNumber) {\n try {\n let clusterUrl;\n\n if (locusClusterUrl) {\n clusterUrl = `https://${locusClusterUrl}/locus/api/v1`;\n } else {\n // @ts-ignore\n await this.webex.internal.services.waitForCatalog('postauth');\n // @ts-ignore\n clusterUrl = this.webex.internal.services.get('locus');\n }\n\n url = `${clusterUrl}/${LOCI}/${CALL}`;\n body.invitee = {\n address: inviteeAddress || `wbxmn:${meetingNumber}`,\n };\n } catch (e) {\n LoggerProxy.logger.error(\n `Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`\n );\n throw e;\n }\n }\n\n // TODO: -- this will be resolved in SDK request\n url = url.concat(`?${ALTERNATE_REDIRECT_TRUE}`);\n\n if (resourceId === inviteeAddress) {\n body.callPreferences = {\n requestedMedia: [_SLIDES_],\n };\n }\n\n if (roapMessage || reachability) {\n body.localMedias = [\n {\n localSdp: JSON.stringify({\n roapMessage,\n reachability,\n }),\n },\n ];\n }\n\n /// @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: url,\n body,\n });\n }\n\n /**\n * Send a request to refresh the captcha\n * @param {Object} options\n * @param {String} options.captchaRefreshUrl\n * @param {String} options.captchaId\n * @returns {Promise}\n * @private\n */\n private refreshCaptcha({\n captchaRefreshUrl,\n captchaId,\n }: {\n captchaRefreshUrl: string;\n captchaId: string;\n }) {\n const body = {\n captchaId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: captchaRefreshUrl,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(`Meeting:request#refreshCaptcha --> Error: ${err}`);\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial in device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialInUrl identifier for the to-be provisioned device\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialIn({\n locusUrl,\n dialInUrl,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialInUrl: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialIn --> Provisioning a dial in device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_IN,\n url: dialInUrl,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial out device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialOutUrl identifier for the to-be provisioned device\n * @param {String} options.phoneNumber phone number to dial out to\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialOut({\n locusUrl,\n dialOutUrl,\n phoneNumber,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialOutUrl: string;\n phoneNumber: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialOut --> Provisioning a dial out device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_OUT,\n url: dialOutUrl,\n dialoutAddress: phoneNumber,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Sends a requests to get the latest locus DTO, it might be a full Locus or a delta, depending on the url provided\n * @param {Object} options\n * @param {String} options.locusUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n getLocusDTO(options: {url: string}) {\n const {url} = options;\n\n if (url) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: url,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#getLocusDTO --> Error getting latest locus, error ${err}`\n );\n\n throw err;\n });\n }\n\n return Promise.reject();\n }\n\n /**\n * Make a network request to make a provisioned phone leave the meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.phoneUrl\n * @param {String} options.correlationId\n * @param {String} options.selfId\n * @returns {Promise}\n * @private\n */\n private disconnectPhoneAudio({\n locusUrl,\n phoneUrl,\n correlationId,\n selfId,\n }: {\n locusUrl: string;\n phoneUrl: string;\n correlationId: string;\n selfId: string;\n }) {\n LoggerProxy.logger.info(\n `Meeting:request#disconnectPhoneAudio --> request phone ${phoneUrl} to leave`,\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n url: phoneUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#disconnectPhoneAudio --> Error when requesting phone ${phoneUrl} to leave, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Prepares request options to to leave a meeting\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @param {String} options.selfId\n * @param {Url} options.deviceUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @returns {Object} request options\n */\n prepareLeaveMeetingRequestOptions({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n }\n\n /**\n * Make a network request to leave a meeting\n * @param {Object} options\n * @returns {Promise}\n */\n leaveMeeting({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n LoggerProxy.logger.info('Meeting:request#leaveMeeting --> Leaving a meeting', correlationId);\n\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Builds request options to leave a meeting\n * @param {Object} options\n * @returns {Object} request options\n */\n buildLeaveMeetingRequestOptions(options: any) {\n return this.buildLocusDeltaRequestOptions(this.prepareLeaveMeetingRequestOptions(options));\n }\n\n /**\n * Make a network request to acknowledge a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.correlationId\n * @returns {Promise}\n */\n acknowledgeMeeting(options: {locusUrl: string; deviceUrl: string; correlationId: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${ALERT}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n correlationId: options.correlationId,\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Makes a network request to lock the meeting\n * @param {Object} options\n * @param {Boolean} options.lock Whether it is locked or not\n * @returns {Promise}\n */\n lockMeeting(options) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n lock: {\n locked: options.lock,\n },\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n });\n }\n\n /**\n * Make a network request to decline a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.reason\n * @returns {Promise}\n */\n declineMeeting(options: {locusUrl: string; deviceUrl: string; reason: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${DECLINE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ...(options.reason && {reason: options.reason}),\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * change the content floor grant\n * @param {Object} options options for floor grant\n * @param {String} options.disposition floor action (granted/released)\n * @param {String} options.personUrl personUrl who is requesting floor\n * @param {String} options.deviceUrl Url of a device\n * @param {String} options.resourceId Populated if you are paired to a device\n * @param {String} options.uri floor grant uri\n * @param {String} options.shareInstanceId id for current share\n * @returns {Promise}\n */\n changeMeetingFloor(\n options:\n | {\n disposition: string;\n personUrl: string;\n deviceUrl: string;\n resourceId: string;\n uri: string;\n annotationInfo: AnnotationInfo;\n shareInstanceId: string;\n }\n | any\n ) {\n let floorReq: any = {disposition: options.disposition};\n\n /* istanbul ignore else */\n if (options.disposition === FLOOR_ACTION.GRANTED) {\n floorReq = {\n beneficiary: {\n url: options.personUrl,\n devices: [\n {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ],\n },\n disposition: options.disposition,\n requester: {\n url: options.personUrl,\n },\n };\n }\n\n const body: any = {\n floor: floorReq,\n resourceUrl: options.resourceUrl,\n };\n\n if (options?.shareInstanceId) {\n body.floor.shareInstanceId = options.shareInstanceId;\n }\n\n if (options?.resourceToken) {\n body.resourceToken = options?.resourceToken;\n }\n if (options?.annotationInfo) {\n body.annotation = options?.annotationInfo;\n }\n\n // @ts-ignore\n return this.request({\n uri: options.uri,\n method: HTTP_VERBS.PUT,\n body,\n });\n }\n\n /**\n * Sends a request to the DTMF endpoint to send tones\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.tones a string of one or more DTMF tones to send\n * @returns {Promise}\n */\n sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri: `${locusUrl}/${SEND_DTMF_ENDPOINT}`,\n body: {\n deviceUrl,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n },\n },\n });\n }\n\n /**\n * Sends a request to the controls endpoint to set the video layout\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.layoutType a layout type that should be available in meeting constants {@link #layout_types}\n * @param {Object} options.main preferred dimensions for the remote main video stream\n * @param {Number} options.main.width preferred width of main video stream\n * @param {Number} options.main.height preferred height of main video stream\n * @param {Object} options.content preferred dimensions for the remote content share stream\n * @param {Number} options.content.width preferred width of content share stream\n * @param {Number} options.content.height preferred height of content share stream\n * @returns {Promise}\n */\n changeVideoLayout({\n locusUrl,\n deviceUrl,\n layoutType,\n main,\n content,\n }: {\n locusUrl: string;\n deviceUrl: string;\n layoutType: string;\n main: {\n width: number;\n height: number;\n };\n content: {\n width: number;\n height: number;\n };\n }) {\n // send main/content renderInfo only if both width and height are specified\n if (main && (!main.width || !main.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for main: ${JSON.stringify(\n main\n )}`\n )\n );\n }\n\n if (content && (!content.width || !content.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for content: ${JSON.stringify(\n content\n )}`\n )\n );\n }\n\n const renderInfoMain = main ? {width: main.width, height: main.height} : undefined;\n const renderInfoContent = content ? {width: content.width, height: content.height} : undefined;\n\n const layoutParams =\n renderInfoMain || renderInfoContent\n ? {\n renderInfo: {\n main: renderInfoMain,\n content: renderInfoContent,\n },\n }\n : undefined;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri: `${locusUrl}/${CONTROLS}`,\n body: {\n layout: {\n deviceUrl,\n type: layoutType,\n layoutParams,\n },\n },\n });\n }\n\n /**\n * Make a network request to end meeting for all\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @returns {Promise}\n */\n endMeetingForAll({locusUrl}: {locusUrl: string}) {\n const uri = `${locusUrl}/${END}`;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n });\n }\n\n /**\n * Send a locus keepAlive (used in lobby)\n * @param {Object} options\n * @param {Url} options.keepAliveUrl\n * @returns {Promise}\n */\n keepAlive({keepAliveUrl}: {keepAliveUrl: string}) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: keepAliveUrl,\n });\n }\n\n /**\n * Make a network request to send a reaction.\n * @param {Object} options\n * @param {Url} options.reactionChannelUrl\n * @param {Reaction} options.reaction\n * @param {string} options.senderID\n * @returns {Promise}\n */\n sendReaction({reactionChannelUrl, reaction, participantId}: SendReactionOptions) {\n const uri = reactionChannelUrl;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body: {\n sender: {participantId},\n reaction,\n },\n });\n }\n\n /**\n * Extend the current meeting duration.\n *\n * @param {Object} params - Parameters for extending the meeting.\n * @param {string} params.meetingInstanceId - The unique ID of the meeting instance.\n * @param {string} params.participantId - The ID of the participant requesting the extension.\n * @param {number} params.extensionMinutes - The number of minutes to extend the meeting by.\n * @param {string} params.meetingPolicyUrl - The base URL for meeting policy service (dynamic, from locus links)\n * @returns {Promise<any>} A promise that resolves with the server response.\n */\n extendMeeting({\n meetingInstanceId,\n participantId,\n extensionMinutes,\n meetingPolicyUrl,\n }: {\n meetingInstanceId: string;\n participantId: string;\n extensionMinutes: number;\n meetingPolicyUrl: string;\n }) {\n if (!meetingPolicyUrl) {\n return Promise.reject(new Error('meetingPolicyUrl is required'));\n }\n const uri = `${meetingPolicyUrl}/continueMeeting`;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body: {\n meetingInstanceId,\n requestParticipantId: participantId,\n extensionMinutes,\n },\n });\n }\n\n /**\n * Make a network request to enable or disable reactions.\n * @param {boolean} options.enable - determines if we need to enable or disable.\n * @param {locusUrl} options.locusUrl\n * @returns {Promise}\n */\n toggleReactions({enable, locusUrl, requestingParticipantId}: ToggleReactionsOptions) {\n const uri = `${locusUrl}/${CONTROLS}`;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body: {\n reactions: {\n enabled: enable,\n },\n requestingParticipantId,\n },\n });\n }\n\n getLocusStatusByUrl(locusUrl: string) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: locusUrl,\n });\n }\n\n /**\n * Sends a request to set be right back status.\n *\n * @param {Object} options - The options for brb request.\n * @param {boolean} options.enabled - Whether brb status is enabled.\n * @param {string} options.locusUrl - The URL of the locus.\n * @param {string} options.deviceUrl - The URL of the device.\n * @param {string} options.selfId - The ID of the participant.\n * @returns {Promise}\n */\n setBrb({enabled, locusUrl, deviceUrl, selfId}: BrbOptions) {\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${CONTROLS}`;\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PATCH,\n uri,\n body: {\n brb: {\n enabled,\n deviceUrl,\n },\n },\n });\n }\n\n /**\n * Sends a request to set post meeting data consent.\n *\n * @param {Object} options - The options for post meeting data consent request.\n * @param {boolean} options.consent - Whether accepted or declined.\n * @param {string} options.locusUrl - The URL of the locus.\n * @param {string} options.deviceUrl - The URL of the device.\n * @param {string} options.selfId - The ID of the participant.\n * @returns {Promise}\n */\n setPostMeetingDataConsent({\n postMeetingDataConsent,\n locusUrl,\n deviceUrl,\n selfId,\n }: PostMeetingDataConsentOptions) {\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${CONTROLS}`;\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PATCH,\n uri,\n body: {\n consent: {\n postMeetingDataConsent,\n deviceUrl,\n },\n },\n });\n }\n\n /**\n * Synchronize the stage for a meeting\n *\n * @param {LocusUrl} locusUrl The locus URL\n * @param {SetStageVideoLayout} videoLayout The video layout to synchronize\n * @returns {Promise} The locus request\n */\n synchronizeStage(locusUrl: string, videoLayout: SynchronizeVideoLayout) {\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PATCH,\n uri: `${locusUrl}/${CONTROLS}`,\n body: {videoLayout},\n });\n }\n\n /**\n * Sends a request to notify the host of a meeting.\n * @param {string} siteFullUrl - The site URL.\n * @param {string} locusId - The locus ID.\n * @param {string} meetingUuid - The meeting UUID.\n * @param {Array<string>} displayName - The display names to notify the host about.\n * @returns {Promise}\n */\n notifyHost(siteFullUrl: string, locusId: string, meetingUuid: string, displayName: string[]) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `https://${siteFullUrl}/wbxappapi/v1/meetings/${meetingUuid}/notifyhost`,\n body: {\n displayName,\n size: displayName?.length,\n },\n headers: {\n locusId,\n },\n });\n }\n\n /**\n * Call out to a SIP participant\n *\n * @param {any} meetingId - The meeting ID.\n * @param {any} meetingNumber - The meeting number.\n * @param {string} address - The SIP address to call out.\n * @param {string} displayName - The display name for the participant.\n * @returns {Promise} The API response\n */\n public async sipCallOut(meetingId, meetingNumber, address, displayName) {\n const body: any = {\n meetingId,\n meetingNumber,\n address,\n displayName,\n };\n try {\n // @ts-ignore\n const response = await this.request({\n method: HTTP_VERBS.POST,\n service: 'hydra',\n resource: 'meetingParticipants/callout',\n body,\n headers: {\n Accept: 'application/json',\n },\n });\n\n LoggerProxy.logger.info('Meetings:request#sipCallOut --> SIP call-out successful', response);\n\n return response.body;\n } catch (err) {\n LoggerProxy.logger.error(\n `Meetings:request#sipCallOut --> Error calling out SIP participant, error ${JSON.stringify(\n err\n )}`\n );\n throw err;\n }\n }\n\n /**\n * Cancel an ongoing SIP call-out\n *\n * @param {string} participantId - The ID of the participant whose SIP call-out should be cancelled.\n * @returns {Promise} The API response\n */\n public async cancelSipCallOut(participantId) {\n const body = {\n participantId,\n };\n\n try {\n // @ts-ignore\n const response = await this.request({\n method: HTTP_VERBS.POST,\n service: 'hydra',\n resource: 'meetingParticipants/cancelCallout',\n body,\n headers: {\n Accept: 'application/json',\n },\n });\n\n LoggerProxy.logger.info(\n 'Meetings:request#cancelSipCallOut --> SIP call-out cancelled successfully',\n response\n );\n\n return response.body;\n } catch (err) {\n LoggerProxy.logger.error(\n `Meetings:request#cancelSipCallOut --> Error cancelling SIP participant call-out, error ${JSON.stringify(\n err\n )}`\n );\n throw err;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_uuid","_interopRequireDefault","require","_lodash","_webexCore","_common","_internalPluginMetrics","_loggerProxy","_constants","_util","_excluded","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","MeetingRequest","exports","_StatelessWebexPlugin","attrs","options","_this","_classCallCheck2","meeting","otherAttrs","_objectWithoutProperties2","_asyncToGenerator2","_regenerator","mark","_callee","joinCookieRaw","joinCookie","_t","wrap","_context","prev","next","webex","boundedStorage","get","REACHABILITY","namespace","localStorageJoinCookie","catch","sent","JSON","parse","abrupt","LoggerProxy","logger","error","concat","stop","locusDeltaRequest","MeetingUtil","generateLocusDeltaRequest","buildLocusDeltaRequestOptions","generateBuildLocusDeltaRequestOptions","changeVideoLayoutDebounced","debounce","changeVideoLayout","leading","trailing","_inherits2","_createClass2","key","value","_joinMeeting","_callee2","asResourceOccupant","inviteeAddress","meetingNumber","permissionToken","deviceUrl","locusUrl","locusClusterUrl","resourceId","correlationId","ensureConversation","moderator","pin","moveToResource","roapMessage","reachability","breakoutsSupported","locale","_options$deviceCapabi","deviceCapabilities","liveAnnotationSupported","clientMediaPreferences","alias","url","body","clusterUrl","_t2","_context2","info","device","deviceType","config","meetings","usingResource","moveMediaToResource","respOnlySdp","allowMultiDevice","supportsNativeLobby","BREAKOUTS","BREAKOUTS_SUPPORTED","ANNOTATION","ANNOTATION_ON_SHARE_SUPPORTED","internal","installationId","geoHintInfo","countryCode","regionCode","localIp","CallDiagnosticUtils","anonymizeIPAddress","clientAddress","undefined","PARTICIPANT","services","waitForCatalog","LOCI","CALL","invitee","address","ALTERNATE_REDIRECT_TRUE","callPreferences","requestedMedia","_SLIDES_","localMedias","localSdp","_stringify","request","method","HTTP_VERBS","POST","uri","joinMeeting","_x","refreshCaptcha","_ref2","captchaRefreshUrl","captchaId","err","dialIn","_ref3","dialInUrl","clientUrl","PROVISIONAL","provisionalType","PROVISIONAL_TYPE_DIAL_IN","dialOut","_ref4","dialOutUrl","phoneNumber","PROVISIONAL_TYPE_DIAL_OUT","dialoutAddress","getLocusDTO","GET","_promise","reject","disconnectPhoneAudio","_ref5","phoneUrl","selfId","LEAVE","PUT","prepareLeaveMeetingRequestOptions","_ref6","leaveMeeting","_ref7","buildLeaveMeetingRequestOptions","acknowledgeMeeting","ALERT","lockMeeting","CONTROLS","lock","locked","PATCH","declineMeeting","DECLINE","reason","changeMeetingFloor","floorReq","disposition","FLOOR_ACTION","GRANTED","beneficiary","personUrl","devices","requester","floor","resourceUrl","shareInstanceId","resourceToken","annotationInfo","annotation","sendDTMF","_ref8","tones","SEND_DTMF_ENDPOINT","dtmf","uuid","v4","_ref9","layoutType","main","content","width","height","Error","renderInfoMain","renderInfoContent","layoutParams","renderInfo","layout","type","endMeetingForAll","_ref0","END","keepAlive","_ref1","keepAliveUrl","sendReaction","_ref10","reactionChannelUrl","reaction","participantId","sender","extendMeeting","_ref11","meetingInstanceId","extensionMinutes","meetingPolicyUrl","requestParticipantId","toggleReactions","_ref12","enable","requestingParticipantId","reactions","enabled","getLocusStatusByUrl","setBrb","_ref13","brb","setPostMeetingDataConsent","_ref14","postMeetingDataConsent","consent","synchronizeStage","videoLayout","notifyHost","siteFullUrl","locusId","meetingUuid","displayName","size","headers","_sipCallOut","_callee3","meetingId","response","_t3","_context3","service","resource","Accept","sipCallOut","_x2","_x3","_x4","_x5","_cancelSipCallOut","_callee4","_t4","_context4","cancelSipCallOut","_x6","_fetchDatachannelToken","_callee5","_ref15","_ref15$isPracticeSess","isPracticeSession","practicePrefix","_context5","fetchDatachannelToken","_x7","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {debounce} from 'lodash';\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n// @ts-ignore\nimport {deviceType} from '@webex/common';\nimport {CallDiagnosticUtils} from '@webex/internal-plugin-metrics';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n ALERT,\n ALTERNATE_REDIRECT_TRUE,\n BREAKOUTS,\n CALL,\n CONTROLS,\n DECLINE,\n END,\n FLOOR_ACTION,\n HTTP_VERBS,\n LEAVE,\n LOCI,\n PARTICIPANT,\n PROVISIONAL_TYPE_DIAL_IN,\n PROVISIONAL_TYPE_DIAL_OUT,\n REACHABILITY,\n SEND_DTMF_ENDPOINT,\n _SLIDES_,\n ANNOTATION,\n} from '../constants';\nimport {\n SendReactionOptions,\n BrbOptions,\n ToggleReactionsOptions,\n PostMeetingDataConsentOptions,\n SynchronizeVideoLayout,\n fetchDataChannelTokenOptions,\n} from './request.type';\nimport MeetingUtil from './util';\nimport {AnnotationInfo} from '../annotation/annotation.types';\nimport {ClientMediaPreferences} from '../reachability/reachability.types';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n changeVideoLayoutDebounced: any;\n meetingRef: WeakRef<any>;\n locusDeltaRequest: (options: object) => Promise<any>;\n buildLocusDeltaRequestOptions: (options: object) => Promise<any>;\n\n /**\n * Constructor\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n const {meeting, ...otherAttrs} = attrs;\n\n super(otherAttrs, options);\n\n this.locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);\n this.buildLocusDeltaRequestOptions = MeetingUtil.generateBuildLocusDeltaRequestOptions(meeting);\n\n this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {\n leading: true,\n trailing: true,\n });\n }\n\n /**\n * Returns joinCookie from boundedStorage if present.\n * @returns {Object} joinCookie\n */\n private getJoinCookie = async () => {\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n const joinCookie = JSON.parse(joinCookieRaw);\n if (joinCookie) {\n return joinCookie;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return null;\n };\n\n /**\n * Make a network request to join a meeting\n * @param {Object} options\n * @param {String} options.sipUri\n * @param {String} options.deviceUrl\n * @param {String} options.locusUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @param {boolean} options.ensureConversation\n * @param {boolean} options.moderator\n * @param {boolean} options.pin\n * @param {boolean} options.moveToResource\n * @param {Object} options.roapMessage\n * @param {boolean} options.breakoutsSupported\n * @param {String} options.locale,\n * @param {Array} options.deviceCapabilities\n * @param {boolean} options.liveAnnotationSupported\n * @param {String} options.alias\n * @returns {Promise}\n */\n async joinMeeting(options: {\n sipUri: string;\n deviceUrl: string;\n locusUrl: string;\n locusClusterUrl: string;\n resourceId: string;\n correlationId: string;\n ensureConversation: boolean;\n moderator: boolean;\n pin: boolean;\n moveToResource: boolean;\n roapMessage: any;\n asResourceOccupant: any;\n inviteeAddress: any;\n meetingNumber: any;\n permissionToken: any;\n preferTranscoding: any;\n reachability: any;\n breakoutsSupported: boolean;\n locale?: string;\n deviceCapabilities?: Array<string>;\n liveAnnotationSupported: boolean;\n alias?: string;\n clientMediaPreferences: ClientMediaPreferences;\n }) {\n const {\n asResourceOccupant,\n inviteeAddress,\n meetingNumber,\n permissionToken,\n deviceUrl,\n locusUrl,\n locusClusterUrl,\n resourceId,\n correlationId,\n ensureConversation,\n moderator,\n pin,\n moveToResource,\n roapMessage,\n reachability,\n breakoutsSupported,\n locale,\n deviceCapabilities = [],\n liveAnnotationSupported,\n clientMediaPreferences,\n alias,\n } = options;\n\n LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);\n\n let url = '';\n\n const body: any = {\n asResourceOccupant,\n device: {\n url: deviceUrl,\n // @ts-ignore - config comes from registerPlugin\n deviceType: this.config.meetings.deviceType,\n },\n usingResource: resourceId || null,\n moveMediaToResource: (resourceId && moveToResource) || false,\n correlationId,\n respOnlySdp: true,\n allowMultiDevice: true,\n ensureConversation: ensureConversation || false,\n supportsNativeLobby: 1,\n clientMediaPreferences,\n };\n\n if (alias) {\n body.alias = alias;\n }\n\n if (breakoutsSupported) {\n deviceCapabilities.push(BREAKOUTS.BREAKOUTS_SUPPORTED);\n }\n if (liveAnnotationSupported) {\n deviceCapabilities.push(ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);\n }\n\n // append installationId to device config if it exists\n // @ts-ignore\n if (this.webex.internal.device.config.installationId) {\n // @ts-ignore\n body.device.installationId = this.webex.internal.device.config.installationId;\n }\n\n if (locale) {\n body.locale = locale;\n }\n\n // add deviceCapabilities prop\n if (deviceCapabilities.length) {\n body.deviceCapabilities = deviceCapabilities;\n }\n // @ts-ignore\n if (this.webex.meetings.geoHintInfo) {\n // @ts-ignore\n body.device.countryCode = this.webex.meetings.geoHintInfo.countryCode;\n // @ts-ignore\n body.device.regionCode = this.webex.meetings.geoHintInfo.regionCode;\n body.device.localIp =\n // @ts-ignore\n CallDiagnosticUtils.anonymizeIPAddress(this.webex.meetings.geoHintInfo.clientAddress) ||\n undefined;\n }\n\n if (moderator !== undefined) {\n body.moderator = moderator;\n }\n\n if (permissionToken) {\n body.permissionToken = permissionToken;\n }\n\n if (pin !== undefined) {\n body.pin = pin;\n }\n\n if (locusUrl) {\n url = `${locusUrl}/${PARTICIPANT}`;\n } else if (inviteeAddress || meetingNumber) {\n try {\n let clusterUrl;\n\n if (locusClusterUrl) {\n clusterUrl = `https://${locusClusterUrl}/locus/api/v1`;\n } else {\n // @ts-ignore\n await this.webex.internal.services.waitForCatalog('postauth');\n // @ts-ignore\n clusterUrl = this.webex.internal.services.get('locus');\n }\n\n url = `${clusterUrl}/${LOCI}/${CALL}`;\n body.invitee = {\n address: inviteeAddress || `wbxmn:${meetingNumber}`,\n };\n } catch (e) {\n LoggerProxy.logger.error(\n `Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`\n );\n throw e;\n }\n }\n\n // TODO: -- this will be resolved in SDK request\n url = url.concat(`?${ALTERNATE_REDIRECT_TRUE}`);\n\n if (resourceId === inviteeAddress) {\n body.callPreferences = {\n requestedMedia: [_SLIDES_],\n };\n }\n\n if (roapMessage || reachability) {\n body.localMedias = [\n {\n localSdp: JSON.stringify({\n roapMessage,\n reachability,\n }),\n },\n ];\n }\n\n /// @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: url,\n body,\n });\n }\n\n /**\n * Send a request to refresh the captcha\n * @param {Object} options\n * @param {String} options.captchaRefreshUrl\n * @param {String} options.captchaId\n * @returns {Promise}\n * @private\n */\n private refreshCaptcha({\n captchaRefreshUrl,\n captchaId,\n }: {\n captchaRefreshUrl: string;\n captchaId: string;\n }) {\n const body = {\n captchaId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: captchaRefreshUrl,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(`Meeting:request#refreshCaptcha --> Error: ${err}`);\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial in device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialInUrl identifier for the to-be provisioned device\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialIn({\n locusUrl,\n dialInUrl,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialInUrl: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialIn --> Provisioning a dial in device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_IN,\n url: dialInUrl,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial out device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialOutUrl identifier for the to-be provisioned device\n * @param {String} options.phoneNumber phone number to dial out to\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialOut({\n locusUrl,\n dialOutUrl,\n phoneNumber,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialOutUrl: string;\n phoneNumber: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialOut --> Provisioning a dial out device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_OUT,\n url: dialOutUrl,\n dialoutAddress: phoneNumber,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Sends a requests to get the latest locus DTO, it might be a full Locus or a delta, depending on the url provided\n * @param {Object} options\n * @param {String} options.locusUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n getLocusDTO(options: {url: string}) {\n const {url} = options;\n\n if (url) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: url,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#getLocusDTO --> Error getting latest locus, error ${err}`\n );\n\n throw err;\n });\n }\n\n return Promise.reject();\n }\n\n /**\n * Make a network request to make a provisioned phone leave the meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.phoneUrl\n * @param {String} options.correlationId\n * @param {String} options.selfId\n * @returns {Promise}\n * @private\n */\n private disconnectPhoneAudio({\n locusUrl,\n phoneUrl,\n correlationId,\n selfId,\n }: {\n locusUrl: string;\n phoneUrl: string;\n correlationId: string;\n selfId: string;\n }) {\n LoggerProxy.logger.info(\n `Meeting:request#disconnectPhoneAudio --> request phone ${phoneUrl} to leave`,\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n url: phoneUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#disconnectPhoneAudio --> Error when requesting phone ${phoneUrl} to leave, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Prepares request options to to leave a meeting\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @param {String} options.selfId\n * @param {Url} options.deviceUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @returns {Object} request options\n */\n prepareLeaveMeetingRequestOptions({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n }\n\n /**\n * Make a network request to leave a meeting\n * @param {Object} options\n * @returns {Promise}\n */\n leaveMeeting({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n LoggerProxy.logger.info('Meeting:request#leaveMeeting --> Leaving a meeting', correlationId);\n\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Builds request options to leave a meeting\n * @param {Object} options\n * @returns {Object} request options\n */\n buildLeaveMeetingRequestOptions(options: any) {\n return this.buildLocusDeltaRequestOptions(this.prepareLeaveMeetingRequestOptions(options));\n }\n\n /**\n * Make a network request to acknowledge a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.correlationId\n * @returns {Promise}\n */\n acknowledgeMeeting(options: {locusUrl: string; deviceUrl: string; correlationId: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${ALERT}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n correlationId: options.correlationId,\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Makes a network request to lock the meeting\n * @param {Object} options\n * @param {Boolean} options.lock Whether it is locked or not\n * @returns {Promise}\n */\n lockMeeting(options) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n lock: {\n locked: options.lock,\n },\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n });\n }\n\n /**\n * Make a network request to decline a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.reason\n * @returns {Promise}\n */\n declineMeeting(options: {locusUrl: string; deviceUrl: string; reason: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${DECLINE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ...(options.reason && {reason: options.reason}),\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * change the content floor grant\n * @param {Object} options options for floor grant\n * @param {String} options.disposition floor action (granted/released)\n * @param {String} options.personUrl personUrl who is requesting floor\n * @param {String} options.deviceUrl Url of a device\n * @param {String} options.resourceId Populated if you are paired to a device\n * @param {String} options.uri floor grant uri\n * @param {String} options.shareInstanceId id for current share\n * @returns {Promise}\n */\n changeMeetingFloor(\n options:\n | {\n disposition: string;\n personUrl: string;\n deviceUrl: string;\n resourceId: string;\n uri: string;\n annotationInfo: AnnotationInfo;\n shareInstanceId: string;\n }\n | any\n ) {\n let floorReq: any = {disposition: options.disposition};\n\n /* istanbul ignore else */\n if (options.disposition === FLOOR_ACTION.GRANTED) {\n floorReq = {\n beneficiary: {\n url: options.personUrl,\n devices: [\n {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ],\n },\n disposition: options.disposition,\n requester: {\n url: options.personUrl,\n },\n };\n }\n\n const body: any = {\n floor: floorReq,\n resourceUrl: options.resourceUrl,\n };\n\n if (options?.shareInstanceId) {\n body.floor.shareInstanceId = options.shareInstanceId;\n }\n\n if (options?.resourceToken) {\n body.resourceToken = options?.resourceToken;\n }\n if (options?.annotationInfo) {\n body.annotation = options?.annotationInfo;\n }\n\n // @ts-ignore\n return this.request({\n uri: options.uri,\n method: HTTP_VERBS.PUT,\n body,\n });\n }\n\n /**\n * Sends a request to the DTMF endpoint to send tones\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.tones a string of one or more DTMF tones to send\n * @returns {Promise}\n */\n sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri: `${locusUrl}/${SEND_DTMF_ENDPOINT}`,\n body: {\n deviceUrl,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n },\n },\n });\n }\n\n /**\n * Sends a request to the controls endpoint to set the video layout\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.layoutType a layout type that should be available in meeting constants {@link #layout_types}\n * @param {Object} options.main preferred dimensions for the remote main video stream\n * @param {Number} options.main.width preferred width of main video stream\n * @param {Number} options.main.height preferred height of main video stream\n * @param {Object} options.content preferred dimensions for the remote content share stream\n * @param {Number} options.content.width preferred width of content share stream\n * @param {Number} options.content.height preferred height of content share stream\n * @returns {Promise}\n */\n changeVideoLayout({\n locusUrl,\n deviceUrl,\n layoutType,\n main,\n content,\n }: {\n locusUrl: string;\n deviceUrl: string;\n layoutType: string;\n main: {\n width: number;\n height: number;\n };\n content: {\n width: number;\n height: number;\n };\n }) {\n // send main/content renderInfo only if both width and height are specified\n if (main && (!main.width || !main.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for main: ${JSON.stringify(\n main\n )}`\n )\n );\n }\n\n if (content && (!content.width || !content.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for content: ${JSON.stringify(\n content\n )}`\n )\n );\n }\n\n const renderInfoMain = main ? {width: main.width, height: main.height} : undefined;\n const renderInfoContent = content ? {width: content.width, height: content.height} : undefined;\n\n const layoutParams =\n renderInfoMain || renderInfoContent\n ? {\n renderInfo: {\n main: renderInfoMain,\n content: renderInfoContent,\n },\n }\n : undefined;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri: `${locusUrl}/${CONTROLS}`,\n body: {\n layout: {\n deviceUrl,\n type: layoutType,\n layoutParams,\n },\n },\n });\n }\n\n /**\n * Make a network request to end meeting for all\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @returns {Promise}\n */\n endMeetingForAll({locusUrl}: {locusUrl: string}) {\n const uri = `${locusUrl}/${END}`;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n });\n }\n\n /**\n * Send a locus keepAlive (used in lobby)\n * @param {Object} options\n * @param {Url} options.keepAliveUrl\n * @returns {Promise}\n */\n keepAlive({keepAliveUrl}: {keepAliveUrl: string}) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: keepAliveUrl,\n });\n }\n\n /**\n * Make a network request to send a reaction.\n * @param {Object} options\n * @param {Url} options.reactionChannelUrl\n * @param {Reaction} options.reaction\n * @param {string} options.senderID\n * @returns {Promise}\n */\n sendReaction({reactionChannelUrl, reaction, participantId}: SendReactionOptions) {\n const uri = reactionChannelUrl;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body: {\n sender: {participantId},\n reaction,\n },\n });\n }\n\n /**\n * Extend the current meeting duration.\n *\n * @param {Object} params - Parameters for extending the meeting.\n * @param {string} params.meetingInstanceId - The unique ID of the meeting instance.\n * @param {string} params.participantId - The ID of the participant requesting the extension.\n * @param {number} params.extensionMinutes - The number of minutes to extend the meeting by.\n * @param {string} params.meetingPolicyUrl - The base URL for meeting policy service (dynamic, from locus links)\n * @returns {Promise<any>} A promise that resolves with the server response.\n */\n extendMeeting({\n meetingInstanceId,\n participantId,\n extensionMinutes,\n meetingPolicyUrl,\n }: {\n meetingInstanceId: string;\n participantId: string;\n extensionMinutes: number;\n meetingPolicyUrl: string;\n }) {\n if (!meetingPolicyUrl) {\n return Promise.reject(new Error('meetingPolicyUrl is required'));\n }\n const uri = `${meetingPolicyUrl}/continueMeeting`;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body: {\n meetingInstanceId,\n requestParticipantId: participantId,\n extensionMinutes,\n },\n });\n }\n\n /**\n * Make a network request to enable or disable reactions.\n * @param {boolean} options.enable - determines if we need to enable or disable.\n * @param {locusUrl} options.locusUrl\n * @returns {Promise}\n */\n toggleReactions({enable, locusUrl, requestingParticipantId}: ToggleReactionsOptions) {\n const uri = `${locusUrl}/${CONTROLS}`;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body: {\n reactions: {\n enabled: enable,\n },\n requestingParticipantId,\n },\n });\n }\n\n getLocusStatusByUrl(locusUrl: string) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: locusUrl,\n });\n }\n\n /**\n * Sends a request to set be right back status.\n *\n * @param {Object} options - The options for brb request.\n * @param {boolean} options.enabled - Whether brb status is enabled.\n * @param {string} options.locusUrl - The URL of the locus.\n * @param {string} options.deviceUrl - The URL of the device.\n * @param {string} options.selfId - The ID of the participant.\n * @returns {Promise}\n */\n setBrb({enabled, locusUrl, deviceUrl, selfId}: BrbOptions) {\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${CONTROLS}`;\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PATCH,\n uri,\n body: {\n brb: {\n enabled,\n deviceUrl,\n },\n },\n });\n }\n\n /**\n * Sends a request to set post meeting data consent.\n *\n * @param {Object} options - The options for post meeting data consent request.\n * @param {boolean} options.consent - Whether accepted or declined.\n * @param {string} options.locusUrl - The URL of the locus.\n * @param {string} options.deviceUrl - The URL of the device.\n * @param {string} options.selfId - The ID of the participant.\n * @returns {Promise}\n */\n setPostMeetingDataConsent({\n postMeetingDataConsent,\n locusUrl,\n deviceUrl,\n selfId,\n }: PostMeetingDataConsentOptions) {\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${CONTROLS}`;\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PATCH,\n uri,\n body: {\n consent: {\n postMeetingDataConsent,\n deviceUrl,\n },\n },\n });\n }\n\n /**\n * Synchronize the stage for a meeting\n *\n * @param {LocusUrl} locusUrl The locus URL\n * @param {SetStageVideoLayout} videoLayout The video layout to synchronize\n * @returns {Promise} The locus request\n */\n synchronizeStage(locusUrl: string, videoLayout: SynchronizeVideoLayout) {\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PATCH,\n uri: `${locusUrl}/${CONTROLS}`,\n body: {videoLayout},\n });\n }\n\n /**\n * Sends a request to notify the host of a meeting.\n * @param {string} siteFullUrl - The site URL.\n * @param {string} locusId - The locus ID.\n * @param {string} meetingUuid - The meeting UUID.\n * @param {Array<string>} displayName - The display names to notify the host about.\n * @returns {Promise}\n */\n notifyHost(siteFullUrl: string, locusId: string, meetingUuid: string, displayName: string[]) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `https://${siteFullUrl}/wbxappapi/v1/meetings/${meetingUuid}/notifyhost`,\n body: {\n displayName,\n size: displayName?.length,\n },\n headers: {\n locusId,\n },\n });\n }\n\n /**\n * Call out to a SIP participant\n *\n * @param {any} meetingId - The meeting ID.\n * @param {any} meetingNumber - The meeting number.\n * @param {string} address - The SIP address to call out.\n * @param {string} displayName - The display name for the participant.\n * @returns {Promise} The API response\n */\n public async sipCallOut(meetingId, meetingNumber, address, displayName) {\n const body: any = {\n meetingId,\n meetingNumber,\n address,\n displayName,\n };\n try {\n // @ts-ignore\n const response = await this.request({\n method: HTTP_VERBS.POST,\n service: 'hydra',\n resource: 'meetingParticipants/callout',\n body,\n headers: {\n Accept: 'application/json',\n },\n });\n\n LoggerProxy.logger.info('Meetings:request#sipCallOut --> SIP call-out successful', response);\n\n return response.body;\n } catch (err) {\n LoggerProxy.logger.error(\n `Meetings:request#sipCallOut --> Error calling out SIP participant, error ${JSON.stringify(\n err\n )}`\n );\n throw err;\n }\n }\n\n /**\n * Cancel an ongoing SIP call-out\n *\n * @param {string} participantId - The ID of the participant whose SIP call-out should be cancelled.\n * @returns {Promise} The API response\n */\n public async cancelSipCallOut(participantId) {\n const body = {\n participantId,\n };\n\n try {\n // @ts-ignore\n const response = await this.request({\n method: HTTP_VERBS.POST,\n service: 'hydra',\n resource: 'meetingParticipants/cancelCallout',\n body,\n headers: {\n Accept: 'application/json',\n },\n });\n\n LoggerProxy.logger.info(\n 'Meetings:request#cancelSipCallOut --> SIP call-out cancelled successfully',\n response\n );\n\n return response.body;\n } catch (err) {\n LoggerProxy.logger.error(\n `Meetings:request#cancelSipCallOut --> Error cancelling SIP participant call-out, error ${JSON.stringify(\n err\n )}`\n );\n throw err;\n }\n }\n\n /**\n * Sends a request to retrieve the datachannel authorization token for a participant.\n *\n * For regular meeting data channel:\n * GET /locus/api/v1/loci/{uuid:lid}/participant/{uuid:pid}/datachannel/token\n *\n * For practice session data channel:\n * GET /locus/api/v1/loci/{uuid:lid}/participant/{uuid:pid}/practiceSession/datachannel/token\n *\n * @param {string} locusUrl - The locus url.\n * @param {string} requestingParticipantId - The participant UUID.\n * @param {boolean} [isPracticeSession=false] - Whether to get the practice session token.\n * @returns {Promise<{datachannelToken: string}>}\n */\n public async fetchDatachannelToken({\n locusUrl,\n requestingParticipantId,\n isPracticeSession = false,\n }: fetchDataChannelTokenOptions) {\n if (!locusUrl || !requestingParticipantId) {\n return Promise.reject(new Error('locusUrl and participantId are required'));\n }\n const practicePrefix = isPracticeSession ? '/practiceSession' : '';\n\n const uri = `${locusUrl}/${PARTICIPANT}/${requestingParticipantId}${practicePrefix}/datachannel/token`;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.GET,\n uri,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#fetchDatachannelToken --> Error retrieving ${\n isPracticeSession ? 'practice session ' : ''\n }datachannel token, error ${err}`\n );\n\n throw err;\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["request.type.ts"],"sourcesContent":["import {Reaction} from '../reactions/reactions.type';\n\nexport type SendReactionOptions = {\n reactionChannelUrl: string;\n reaction: Reaction;\n participantId: string;\n};\n\nexport type ToggleReactionsOptions = {\n enable: boolean;\n locusUrl: string;\n requestingParticipantId: string;\n};\n\nexport type BrbOptions = {\n enabled: boolean;\n locusUrl: string;\n deviceUrl: string;\n selfId: string;\n};\n\nexport type PostMeetingDataConsentOptions = {\n postMeetingDataConsent: boolean;\n locusUrl: string;\n deviceUrl: string;\n selfId: string;\n};\n\nexport type StageCustomLogoPositions =\n | 'LowerLeft'\n | 'LowerMiddle'\n | 'LowerRight'\n | 'UpperLeft'\n | 'UpperMiddle'\n | 'UpperRight';\n\nexport type StageNameLabelType = 'Primary' | 'PrimaryInverted' | 'Secondary' | 'SecondaryInverted';\n\nexport type StageCustomBackground = {\n url: string;\n [others: string]: unknown;\n};\n\nexport type StageCustomLogo = {\n url: string;\n position: StageCustomLogoPositions;\n [others: string]: unknown;\n};\n\nexport type StageCustomNameLabel = {\n accentColor: string;\n background: {color: string};\n border: {color: string};\n content: {displayName: {color: string}; subtitle: {color: string}};\n decoration: {color: string};\n fadeOut?: {delay: number};\n type: StageNameLabelType;\n [others: string]: unknown;\n};\n\nexport type SetStageOptions = {\n activeSpeakerProportion?: number;\n customBackground?: StageCustomBackground;\n customLogo?: StageCustomLogo;\n customNameLabel?: StageCustomNameLabel;\n importantParticipants?: {mainCsi: number; participantId: string}[];\n lockAttendeeViewOnStage?: boolean;\n showActiveSpeaker?: boolean;\n};\n\nexport type SetStageVideoLayout = {\n overrideDefault: true;\n lockAttendeeViewOnStageOnly: boolean;\n stageParameters: {\n importantParticipants?: {participantId: string; mainCsi: number; order: number}[];\n showActiveSpeaker: {show: boolean; order: number};\n activeSpeakerProportion: number;\n stageManagerType: number;\n };\n customLayouts?: {\n background?: StageCustomBackground;\n logo?: StageCustomLogo;\n };\n nameLabelStyle?: StageCustomNameLabel;\n};\n\nexport type UnsetStageVideoLayout = {\n overrideDefault: false;\n};\n\nexport type SynchronizeVideoLayout = SetStageVideoLayout | UnsetStageVideoLayout;\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["request.type.ts"],"sourcesContent":["import {Reaction} from '../reactions/reactions.type';\n\nexport type SendReactionOptions = {\n reactionChannelUrl: string;\n reaction: Reaction;\n participantId: string;\n};\n\nexport type ToggleReactionsOptions = {\n enable: boolean;\n locusUrl: string;\n requestingParticipantId: string;\n};\n\nexport type BrbOptions = {\n enabled: boolean;\n locusUrl: string;\n deviceUrl: string;\n selfId: string;\n};\n\nexport type PostMeetingDataConsentOptions = {\n postMeetingDataConsent: boolean;\n locusUrl: string;\n deviceUrl: string;\n selfId: string;\n};\n\nexport type StageCustomLogoPositions =\n | 'LowerLeft'\n | 'LowerMiddle'\n | 'LowerRight'\n | 'UpperLeft'\n | 'UpperMiddle'\n | 'UpperRight';\n\nexport type StageNameLabelType = 'Primary' | 'PrimaryInverted' | 'Secondary' | 'SecondaryInverted';\n\nexport type StageCustomBackground = {\n url: string;\n [others: string]: unknown;\n};\n\nexport type StageCustomLogo = {\n url: string;\n position: StageCustomLogoPositions;\n [others: string]: unknown;\n};\n\nexport type StageCustomNameLabel = {\n accentColor: string;\n background: {color: string};\n border: {color: string};\n content: {displayName: {color: string}; subtitle: {color: string}};\n decoration: {color: string};\n fadeOut?: {delay: number};\n type: StageNameLabelType;\n [others: string]: unknown;\n};\n\nexport type SetStageOptions = {\n activeSpeakerProportion?: number;\n customBackground?: StageCustomBackground;\n customLogo?: StageCustomLogo;\n customNameLabel?: StageCustomNameLabel;\n importantParticipants?: {mainCsi: number; participantId: string}[];\n lockAttendeeViewOnStage?: boolean;\n showActiveSpeaker?: boolean;\n};\n\nexport type SetStageVideoLayout = {\n overrideDefault: true;\n lockAttendeeViewOnStageOnly: boolean;\n stageParameters: {\n importantParticipants?: {participantId: string; mainCsi: number; order: number}[];\n showActiveSpeaker: {show: boolean; order: number};\n activeSpeakerProportion: number;\n stageManagerType: number;\n };\n customLayouts?: {\n background?: StageCustomBackground;\n logo?: StageCustomLogo;\n };\n nameLabelStyle?: StageCustomNameLabel;\n};\n\nexport type UnsetStageVideoLayout = {\n overrideDefault: false;\n};\n\nexport type fetchDataChannelTokenOptions = {\n locusUrl: string;\n requestingParticipantId: string;\n isPracticeSession: boolean;\n};\n\nexport type SynchronizeVideoLayout = SetStageVideoLayout | UnsetStageVideoLayout;\n"],"mappings":"","ignoreList":[]}
|
package/dist/meeting/util.js
CHANGED
|
@@ -21,6 +21,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
|
|
|
21
21
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
22
22
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
23
23
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
24
|
+
var _url = _interopRequireDefault(require("url"));
|
|
24
25
|
var _lodash = require("lodash");
|
|
25
26
|
var _webexErrors = require("../common/errors/webex-errors");
|
|
26
27
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
@@ -33,6 +34,7 @@ var _permission = _interopRequireDefault(require("../common/errors/permission"))
|
|
|
33
34
|
var _passwordError = _interopRequireDefault(require("../common/errors/password-error"));
|
|
34
35
|
var _captchaError = _interopRequireDefault(require("../common/errors/captcha-error"));
|
|
35
36
|
var _triggerProxy = _interopRequireDefault(require("../common/events/trigger-proxy"));
|
|
37
|
+
var _types = require("../member/types");
|
|
36
38
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof _Symbol && r[_Symbol$iterator] || r["@@iterator"]; if (!t) { if (_Array$isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
37
39
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? _Array$from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
38
40
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
@@ -45,6 +47,7 @@ var MeetingUtil = {
|
|
|
45
47
|
// First todo: add check for existance
|
|
46
48
|
parsed.locus = response.body.locus;
|
|
47
49
|
parsed.dataSets = response.body.dataSets;
|
|
50
|
+
parsed.metadata = response.body.metaData;
|
|
48
51
|
parsed.mediaConnections = response.body.mediaConnections;
|
|
49
52
|
parsed.locusUrl = parsed.locus.url;
|
|
50
53
|
parsed.locusId = parsed.locus.url.split('/').pop();
|
|
@@ -58,6 +61,106 @@ var MeetingUtil = {
|
|
|
58
61
|
});
|
|
59
62
|
return parsed;
|
|
60
63
|
},
|
|
64
|
+
/**
|
|
65
|
+
* Sanitizes a WebSocket URL by extracting only protocol, host, and pathname
|
|
66
|
+
* Returns concatenated protocol + host + pathname for safe logging
|
|
67
|
+
* Note: This is used for logging only; URL matching uses partial matching via _urlsPartiallyMatch
|
|
68
|
+
* @param {string} urlString - The URL to sanitize
|
|
69
|
+
* @returns {string} Sanitized URL or empty string if parsing fails
|
|
70
|
+
*/
|
|
71
|
+
sanitizeWebSocketUrl: function sanitizeWebSocketUrl(urlString) {
|
|
72
|
+
if (!urlString || typeof urlString !== 'string') {
|
|
73
|
+
return '';
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
var parsedUrl = _url.default.parse(urlString);
|
|
77
|
+
var protocol = parsedUrl.protocol || '';
|
|
78
|
+
var host = parsedUrl.host || '';
|
|
79
|
+
|
|
80
|
+
// If we don't have at least protocol and host, it's not a valid URL
|
|
81
|
+
if (!protocol || !host) {
|
|
82
|
+
return '';
|
|
83
|
+
}
|
|
84
|
+
var pathname = parsedUrl.pathname || '';
|
|
85
|
+
|
|
86
|
+
// Strip trailing slash if pathname is just '/'
|
|
87
|
+
var normalizedPathname = pathname === '/' ? '' : pathname;
|
|
88
|
+
return "".concat(protocol, "//").concat(host).concat(normalizedPathname);
|
|
89
|
+
} catch (error) {
|
|
90
|
+
_loggerProxy.default.logger.warn("Meeting:util#sanitizeWebSocketUrl --> unable to parse URL: ".concat(error));
|
|
91
|
+
return '';
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
/**
|
|
95
|
+
* Checks if two URLs partially match using an endsWith approach
|
|
96
|
+
* Combines host and pathname, then checks if one ends with the other
|
|
97
|
+
* This handles cases where one URL goes through a proxy (e.g., /webproxy/) while the other is direct
|
|
98
|
+
* @param {string} url1 - First URL to compare
|
|
99
|
+
* @param {string} url2 - Second URL to compare
|
|
100
|
+
* @returns {boolean} True if one URL path ends with the other (partial match), false otherwise
|
|
101
|
+
*/
|
|
102
|
+
_urlsPartiallyMatch: function _urlsPartiallyMatch(url1, url2) {
|
|
103
|
+
if (!url1 || !url2) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
var parsedUrl1 = _url.default.parse(url1);
|
|
108
|
+
var parsedUrl2 = _url.default.parse(url2);
|
|
109
|
+
var host1 = parsedUrl1.host || '';
|
|
110
|
+
var host2 = parsedUrl2.host || '';
|
|
111
|
+
var pathname1 = parsedUrl1.pathname || '';
|
|
112
|
+
var pathname2 = parsedUrl2.pathname || '';
|
|
113
|
+
|
|
114
|
+
// If either failed to parse, they don't match
|
|
115
|
+
if (!host1 || !host2 || !pathname1 || !pathname2) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Combine host and pathname for comparison
|
|
120
|
+
var combined1 = host1 + pathname1;
|
|
121
|
+
var combined2 = host2 + pathname2;
|
|
122
|
+
|
|
123
|
+
// Check if one combined path ends with the other (handles proxy URLs)
|
|
124
|
+
return combined1.endsWith(combined2) || combined2.endsWith(combined1);
|
|
125
|
+
} catch (e) {
|
|
126
|
+
_loggerProxy.default.logger.warn('Meeting:util#_urlsPartiallyMatch --> error comparing URLs', e);
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
/**
|
|
131
|
+
* Gets socket URL information for metrics, including whether the socket URLs match
|
|
132
|
+
* Uses partial matching to handle proxy URLs (e.g., URLs with /webproxy/ prefix)
|
|
133
|
+
* @param {Object} webex - The webex instance
|
|
134
|
+
* @returns {Object} Object with hasMismatchedSocket, mercurySocketUrl, and deviceSocketUrl properties
|
|
135
|
+
*/
|
|
136
|
+
getSocketUrlInfo: function getSocketUrlInfo(webex) {
|
|
137
|
+
try {
|
|
138
|
+
var _webex$internal, _webex$internal$mercu, _webex$internal$mercu2, _webex$internal2, _webex$internal2$devi;
|
|
139
|
+
var mercuryUrl = webex === null || webex === void 0 ? void 0 : (_webex$internal = webex.internal) === null || _webex$internal === void 0 ? void 0 : (_webex$internal$mercu = _webex$internal.mercury) === null || _webex$internal$mercu === void 0 ? void 0 : (_webex$internal$mercu2 = _webex$internal$mercu.socket) === null || _webex$internal$mercu2 === void 0 ? void 0 : _webex$internal$mercu2.url;
|
|
140
|
+
var deviceUrl = webex === null || webex === void 0 ? void 0 : (_webex$internal2 = webex.internal) === null || _webex$internal2 === void 0 ? void 0 : (_webex$internal2$devi = _webex$internal2.device) === null || _webex$internal2$devi === void 0 ? void 0 : _webex$internal2$devi.webSocketUrl;
|
|
141
|
+
var sanitizedMercuryUrl = MeetingUtil.sanitizeWebSocketUrl(mercuryUrl);
|
|
142
|
+
var sanitizedDeviceUrl = MeetingUtil.sanitizeWebSocketUrl(deviceUrl);
|
|
143
|
+
|
|
144
|
+
// Only report a mismatch if both URLs are present and they don't match
|
|
145
|
+
// If either URL is missing, we can't determine if there's a mismatch, so return false
|
|
146
|
+
var hasMismatchedSocket = false;
|
|
147
|
+
if (sanitizedMercuryUrl && sanitizedDeviceUrl) {
|
|
148
|
+
hasMismatchedSocket = !MeetingUtil._urlsPartiallyMatch(mercuryUrl, deviceUrl);
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
hasMismatchedSocket: hasMismatchedSocket,
|
|
152
|
+
mercurySocketUrl: sanitizedMercuryUrl,
|
|
153
|
+
deviceSocketUrl: sanitizedDeviceUrl
|
|
154
|
+
};
|
|
155
|
+
} catch (error) {
|
|
156
|
+
_loggerProxy.default.logger.warn("Meeting:util#getSocketUrlInfo --> error getting socket URL info: ".concat(error));
|
|
157
|
+
return {
|
|
158
|
+
hasMismatchedSocket: false,
|
|
159
|
+
mercurySocketUrl: '',
|
|
160
|
+
deviceSocketUrl: ''
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
},
|
|
61
164
|
remoteUpdateAudioVideo: function remoteUpdateAudioVideo(meeting, audioMuted, videoMuted) {
|
|
62
165
|
if (!meeting) {
|
|
63
166
|
return _promise.default.reject(new _parameter.default('You need a meeting object.'));
|
|
@@ -208,13 +311,15 @@ var MeetingUtil = {
|
|
|
208
311
|
var parsed = MeetingUtil.parseLocusJoin(res);
|
|
209
312
|
meeting.setLocus(parsed);
|
|
210
313
|
meeting.isoLocalClientMeetingJoinTime = res === null || res === void 0 ? void 0 : (_res$headers = res.headers) === null || _res$headers === void 0 ? void 0 : _res$headers.date; // read from header if exist, else fall back to system clock : https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-555657
|
|
314
|
+
var socketUrlInfo = MeetingUtil.getSocketUrlInfo(webex);
|
|
211
315
|
webex.internal.newMetrics.submitClientEvent({
|
|
212
316
|
name: 'client.locus.join.response',
|
|
213
317
|
payload: {
|
|
214
318
|
trigger: 'loci-update',
|
|
215
319
|
identifiers: {
|
|
216
320
|
trackingId: res.headers.trackingid
|
|
217
|
-
}
|
|
321
|
+
},
|
|
322
|
+
eventData: _objectSpread({}, socketUrlInfo)
|
|
218
323
|
},
|
|
219
324
|
options: {
|
|
220
325
|
meetingId: meeting.id,
|
|
@@ -224,12 +329,14 @@ var MeetingUtil = {
|
|
|
224
329
|
return parsed;
|
|
225
330
|
}).catch(function (err) {
|
|
226
331
|
var _meeting$meetingInfo2;
|
|
332
|
+
var socketUrlInfo = MeetingUtil.getSocketUrlInfo(webex);
|
|
227
333
|
webex.internal.newMetrics.submitClientEvent({
|
|
228
334
|
name: 'client.locus.join.response',
|
|
229
335
|
payload: {
|
|
230
336
|
identifiers: {
|
|
231
337
|
meetingLookupUrl: (_meeting$meetingInfo2 = meeting.meetingInfo) === null || _meeting$meetingInfo2 === void 0 ? void 0 : _meeting$meetingInfo2.meetingLookupUrl
|
|
232
|
-
}
|
|
338
|
+
},
|
|
339
|
+
eventData: _objectSpread({}, socketUrlInfo)
|
|
233
340
|
},
|
|
234
341
|
options: {
|
|
235
342
|
meetingId: meeting.id,
|
|
@@ -515,6 +622,9 @@ var MeetingUtil = {
|
|
|
515
622
|
bothLeaveAndEndMeetingAvailable: function bothLeaveAndEndMeetingAvailable(displayHints) {
|
|
516
623
|
return displayHints.includes(_constants.DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) || displayHints.includes(_constants.DISPLAY_HINTS.LEAVE_END_MEETING);
|
|
517
624
|
},
|
|
625
|
+
requireHostEndMeetingBeforeLeave: function requireHostEndMeetingBeforeLeave(displayHints) {
|
|
626
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.REQUIRE_HOST_END_MEETING_BEFORE_LEAVE) || !displayHints.includes(_constants.DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) && displayHints.includes(_constants.DISPLAY_HINTS.END_MEETING);
|
|
627
|
+
},
|
|
518
628
|
canManageBreakout: function canManageBreakout(displayHints) {
|
|
519
629
|
return displayHints.includes(_constants.DISPLAY_HINTS.BREAKOUT_MANAGEMENT);
|
|
520
630
|
},
|
|
@@ -736,6 +846,22 @@ var MeetingUtil = {
|
|
|
736
846
|
};
|
|
737
847
|
return locusDeltaRequest;
|
|
738
848
|
},
|
|
849
|
+
canAttendeeRequestAiAssistantEnabled: function canAttendeeRequestAiAssistantEnabled() {
|
|
850
|
+
var displayHints = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
851
|
+
var roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
852
|
+
var isHostOrCoHost = roles.includes(_types.ServerRoles.Cohost) || roles.includes(_types.ServerRoles.Moderator);
|
|
853
|
+
if (isHostOrCoHost) {
|
|
854
|
+
return false;
|
|
855
|
+
}
|
|
856
|
+
if (displayHints.includes(_constants.DISPLAY_HINTS.ATTENDEE_REQUEST_AI_ASSISTANT_ENABLED)) {
|
|
857
|
+
return true;
|
|
858
|
+
}
|
|
859
|
+
return false;
|
|
860
|
+
},
|
|
861
|
+
attendeeRequestAiAssistantDeclinedAll: function attendeeRequestAiAssistantDeclinedAll() {
|
|
862
|
+
var displayHints = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
863
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.ATTENDEE_REQUEST_AI_ASSISTANT_DECLINED_ALL);
|
|
864
|
+
},
|
|
739
865
|
selfSupportsFeature: function selfSupportsFeature(feature, userPolicies) {
|
|
740
866
|
if (!userPolicies) {
|
|
741
867
|
return true;
|