@webex/plugin-meetings 3.0.0-beta.57 → 3.0.0-beta.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +6 -0
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +1 -0
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +3 -0
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +3 -0
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/member/index.js +23 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +15 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +61 -2
- package/dist/member/util.js.map +1 -1
- package/dist/members/index.js +21 -0
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +19 -0
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +38 -0
- package/dist/members/util.js.map +1 -1
- package/dist/reconnection-manager/index.js +2 -2
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +6 -0
- package/dist/types/member/index.d.ts +10 -0
- package/dist/types/member/types.d.ts +21 -0
- package/dist/types/members/index.d.ts +10 -0
- package/dist/types/members/request.d.ts +8 -0
- package/dist/types/members/types.d.ts +24 -0
- package/package.json +18 -18
- package/src/constants.ts +2 -0
- package/src/meeting/in-meeting-actions.ts +12 -0
- package/src/meeting/index.ts +3 -0
- package/src/meeting/util.ts +3 -0
- package/src/meetings/index.ts +31 -23
- package/src/meetings/request.ts +2 -0
- package/src/member/index.ts +22 -0
- package/src/member/types.ts +24 -0
- package/src/member/util.ts +53 -0
- package/src/members/index.ts +27 -0
- package/src/members/request.ts +20 -0
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +39 -1
- package/src/reconnection-manager/index.ts +2 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +6 -0
- package/test/unit/spec/meeting/utils.js +1 -0
- package/test/unit/spec/member/index.js +24 -0
- package/test/unit/spec/member/util.js +336 -33
- package/test/unit/spec/members/index.js +77 -0
- package/test/unit/spec/members/request.js +21 -0
- package/test/unit/spec/members/utils.js +28 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MembersRequest","MEETINGS","options","invitee","emailAddress","email","phoneNumber","locusUrl","ParameterError","requestParams","MembersUtil","getAddMemberRequestParams","request","memberIds","getAdmitMemberRequestParams","memberId","getRemoveMemberRequestParams","getMuteMemberRequestParams","getRaiseHandMemberRequestParams","requestingParticipantId","getLowerAllHandsMemberRequestParams","moderator","getTransferHostToMemberRequestParams","url","tones","generateSendDTMFRequestParams","generateCancelInviteRequestParams","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {MEETINGS} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport MembersUtil from './util';\n\n/**\n * @class MembersRequest\n */\nexport default class MembersRequest extends StatelessWebexPlugin {\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} options with format of {invitee: string, locusUrl: string}\n * @returns {Promise}\n * @throws {Error} if the options are not valid and complete, must have invitee with emailAddress OR email AND locusUrl\n * @memberof MembersRequest\n */\n addMembers(options: any) {\n if (\n !(\n !options ||\n !options.invitee ||\n !options.invitee.emailAddress ||\n !options.invitee.email ||\n !options.invitee.phoneNumber ||\n !options.locusUrl\n )\n ) {\n throw new ParameterError(\n 'invitee must be passed and the associated locus url for this meeting object must be defined.'\n );\n }\n const requestParams = MembersUtil.getAddMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n /**\n *\n * @param {Object} options\n * @returns {Promise}\n * @throws {Error} if the options are not valid and complete, must have memberIds AND locusUrl\n * @memberof MembersRequest\n */\n admitMember(options: any) {\n if (!options || !options.locusUrl || !options.memberIds) {\n throw new ParameterError(\n 'memberIds must be an array passed and the associated locus url for this meeting object must be defined.'\n );\n }\n const requestParams = MembersUtil.getAdmitMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n removeMember(options) {\n if (!options || !options.locusUrl || !options.memberId) {\n throw new ParameterError(\n 'memberId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getRemoveMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n muteMember(options) {\n if (!options || !options.locusUrl || !options.memberId) {\n throw new ParameterError(\n 'memberId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getMuteMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n raiseOrLowerHandMember(options) {\n if (!options || !options.locusUrl || !options.memberId) {\n throw new ParameterError(\n 'memberId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getRaiseHandMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n lowerAllHandsMember(options) {\n if (!options || !options.locusUrl || !options.requestingParticipantId) {\n throw new ParameterError(\n 'requestingParticipantId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getLowerAllHandsMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n transferHostToMember(options) {\n if (!options || !options.locusUrl || !options.memberId || !options.moderator) {\n throw new ParameterError(\n 'memberId must be defined, the associated locus url, and the moderator for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getTransferHostToMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\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.url device url SIP user\n * @param {String} options.tones a string of one or more DTMF tones to send\n * @param {String} options.memberId ID of PSTN user\n * @returns {Promise}\n */\n sendDialPadKey(options: {locusUrl: string; url: string; tones: string; memberId: string}) {\n // @ts-ignore\n if (\n !options ||\n !options.locusUrl ||\n !options.memberId ||\n !options.url ||\n // @ts-ignore\n (!options.tones && options.tones !== 0)\n ) {\n throw new ParameterError(\n 'memberId must be defined, the associated locus url, the device url and DTMF tones for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.generateSendDTMFRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n /**\n * @param {Object} options with format of {invitee: string, locusUrl: string}\n * @returns {Promise}\n * @throws {Error} if the options are not valid and complete, must have invitee with emailAddress OR email AND locusUrl\n * @memberof MembersRequest\n */\n cancelPhoneInvite(options: any) {\n if (!(options?.invitee?.phoneNumber || options?.locusUrl)) {\n throw new ParameterError(\n 'invitee must be passed and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.generateCancelInviteRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["MembersRequest","MEETINGS","options","invitee","emailAddress","email","phoneNumber","locusUrl","ParameterError","requestParams","MembersUtil","getAddMemberRequestParams","request","memberIds","getAdmitMemberRequestParams","memberId","getRemoveMemberRequestParams","getMuteMemberRequestParams","getRoleAssignmentMemberRequestParams","getRaiseHandMemberRequestParams","requestingParticipantId","getLowerAllHandsMemberRequestParams","moderator","getTransferHostToMemberRequestParams","url","tones","generateSendDTMFRequestParams","generateCancelInviteRequestParams","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {MEETINGS} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport MembersUtil from './util';\n\n/**\n * @class MembersRequest\n */\nexport default class MembersRequest extends StatelessWebexPlugin {\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} options with format of {invitee: string, locusUrl: string}\n * @returns {Promise}\n * @throws {Error} if the options are not valid and complete, must have invitee with emailAddress OR email AND locusUrl\n * @memberof MembersRequest\n */\n addMembers(options: any) {\n if (\n !(\n !options ||\n !options.invitee ||\n !options.invitee.emailAddress ||\n !options.invitee.email ||\n !options.invitee.phoneNumber ||\n !options.locusUrl\n )\n ) {\n throw new ParameterError(\n 'invitee must be passed and the associated locus url for this meeting object must be defined.'\n );\n }\n const requestParams = MembersUtil.getAddMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n /**\n *\n * @param {Object} options\n * @returns {Promise}\n * @throws {Error} if the options are not valid and complete, must have memberIds AND locusUrl\n * @memberof MembersRequest\n */\n admitMember(options: any) {\n if (!options || !options.locusUrl || !options.memberIds) {\n throw new ParameterError(\n 'memberIds must be an array passed and the associated locus url for this meeting object must be defined.'\n );\n }\n const requestParams = MembersUtil.getAdmitMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n removeMember(options) {\n if (!options || !options.locusUrl || !options.memberId) {\n throw new ParameterError(\n 'memberId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getRemoveMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n muteMember(options) {\n if (!options || !options.locusUrl || !options.memberId) {\n throw new ParameterError(\n 'memberId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getMuteMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\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.memberId ID of PSTN user\n * @returns {Promise}\n */\n assignRolesMember(options: any) {\n if (!options || !options.locusUrl || !options.memberId) {\n throw new ParameterError(\n 'memberId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getRoleAssignmentMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n raiseOrLowerHandMember(options) {\n if (!options || !options.locusUrl || !options.memberId) {\n throw new ParameterError(\n 'memberId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getRaiseHandMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n lowerAllHandsMember(options) {\n if (!options || !options.locusUrl || !options.requestingParticipantId) {\n throw new ParameterError(\n 'requestingParticipantId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getLowerAllHandsMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n transferHostToMember(options) {\n if (!options || !options.locusUrl || !options.memberId || !options.moderator) {\n throw new ParameterError(\n 'memberId must be defined, the associated locus url, and the moderator for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getTransferHostToMemberRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\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.url device url SIP user\n * @param {String} options.tones a string of one or more DTMF tones to send\n * @param {String} options.memberId ID of PSTN user\n * @returns {Promise}\n */\n sendDialPadKey(options: {locusUrl: string; url: string; tones: string; memberId: string}) {\n // @ts-ignore\n if (\n !options ||\n !options.locusUrl ||\n !options.memberId ||\n !options.url ||\n // @ts-ignore\n (!options.tones && options.tones !== 0)\n ) {\n throw new ParameterError(\n 'memberId must be defined, the associated locus url, the device url and DTMF tones for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.generateSendDTMFRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n\n /**\n * @param {Object} options with format of {invitee: string, locusUrl: string}\n * @returns {Promise}\n * @throws {Error} if the options are not valid and complete, must have invitee with emailAddress OR email AND locusUrl\n * @memberof MembersRequest\n */\n cancelPhoneInvite(options: any) {\n if (!(options?.invitee?.phoneNumber || options?.locusUrl)) {\n throw new ParameterError(\n 'invitee must be passed and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.generateCancelInviteRequestParams(options);\n\n // @ts-ignore\n return this.request(requestParams);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.ServerRoles = void 0;
|
|
8
|
+
var ServerRoles;
|
|
9
|
+
exports.ServerRoles = ServerRoles;
|
|
10
|
+
(function (ServerRoles) {
|
|
11
|
+
ServerRoles["Cohost"] = "COHOST";
|
|
12
|
+
ServerRoles["Moderator"] = "MODERATOR";
|
|
13
|
+
ServerRoles["Presenter"] = "PRESENTER";
|
|
14
|
+
})(ServerRoles || (exports.ServerRoles = ServerRoles = {}));
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ServerRoles"],"sources":["types.ts"],"sourcesContent":["export enum ServerRoles {\n Cohost = 'COHOST',\n Moderator = 'MODERATOR',\n Presenter = 'PRESENTER',\n}\n\nexport type ServerRoleShape = {\n type: ServerRoles;\n hasRole: boolean;\n};\n\nexport type RoleAssignmentOptions = {\n roles: Array<ServerRoleShape>;\n locusUrl: string;\n memberId: string;\n};\n\nexport type RoleAssignmentBody = {\n role: {\n roles: Array<ServerRoleShape>;\n };\n};\n\nexport type RoleAssignmentRequest = {\n method: string;\n uri: string;\n body: RoleAssignmentBody;\n};\n"],"mappings":";;;;;;;IAAYA,WAAW;AAAA;AAAA,WAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;AAAA,GAAXA,WAAW,2BAAXA,WAAW"}
|
package/dist/members/util.js
CHANGED
|
@@ -158,6 +158,20 @@ MembersUtil.generateRaiseHandMemberOptions = function (memberId, status, locusUr
|
|
|
158
158
|
locusUrl: locusUrl
|
|
159
159
|
};
|
|
160
160
|
};
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* @param {String} memberId
|
|
164
|
+
* @param {[ServerRoleShape]} roles
|
|
165
|
+
* @param {String} locusUrl
|
|
166
|
+
* @returns {RoleAssignmentOptions}
|
|
167
|
+
*/
|
|
168
|
+
MembersUtil.generateRoleAssignmentMemberOptions = function (memberId, roles, locusUrl) {
|
|
169
|
+
return {
|
|
170
|
+
memberId: memberId,
|
|
171
|
+
roles: roles,
|
|
172
|
+
locusUrl: locusUrl
|
|
173
|
+
};
|
|
174
|
+
};
|
|
161
175
|
MembersUtil.generateLowerAllHandsMemberOptions = function (requestingParticipantId, locusUrl) {
|
|
162
176
|
return {
|
|
163
177
|
requestingParticipantId: requestingParticipantId,
|
|
@@ -176,6 +190,30 @@ MembersUtil.getMuteMemberRequestParams = function (options) {
|
|
|
176
190
|
body: body
|
|
177
191
|
};
|
|
178
192
|
};
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* @param {RoleAssignmentOptions} options
|
|
196
|
+
* @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request
|
|
197
|
+
*/
|
|
198
|
+
MembersUtil.getRoleAssignmentMemberRequestParams = function (options) {
|
|
199
|
+
var body = {
|
|
200
|
+
role: {
|
|
201
|
+
roles: []
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
options.roles.forEach(function (role) {
|
|
205
|
+
body.role.roles.push({
|
|
206
|
+
type: role.type,
|
|
207
|
+
hasRole: role.hasRole
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
var uri = "".concat(options.locusUrl, "/").concat(_constants.PARTICIPANT, "/").concat(options.memberId, "/").concat(_constants.CONTROLS);
|
|
211
|
+
return {
|
|
212
|
+
method: _constants.HTTP_VERBS.PATCH,
|
|
213
|
+
uri: uri,
|
|
214
|
+
body: body
|
|
215
|
+
};
|
|
216
|
+
};
|
|
179
217
|
MembersUtil.getRaiseHandMemberRequestParams = function (options) {
|
|
180
218
|
var body = {
|
|
181
219
|
hand: {
|
package/dist/members/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["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","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","generateLowerAllHandsMemberOptions","requestingParticipantId","getMuteMemberRequestParams","property","PATCH","getRaiseHandMemberRequestParams","hand","getLowerAllHandsMemberRequestParams","getTransferHostToMemberRequestParams","role","genderateSendDTMFOptions","url","tones","generateSendDTMFRequestParams","device","dtmf","correlationId","uuid","v4","direction","SEND_DTMF_ENDPOINT","POST","cancelPhoneInviteOptions","generateCancelInviteRequestParams","actionType","_REMOVE_"],"sources":["util.ts"],"sourcesContent":["import uuid from 'uuid';\n\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} from '../constants';\n\nconst MembersUtil: any = {};\n\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 */\nMembersUtil.generateAddMemberOptions = (\n invitee: object,\n locusUrl: string,\n alertIfActive: boolean\n) => ({\n invitee,\n locusUrl,\n alertIfActive,\n});\n\n/**\n * @param {Array} memberIds\n * @param {String} locusUrl\n * @returns {Object} the format object\n */\nMembersUtil.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 */\nMembersUtil.getAddMemberBody = (options: any) => ({\n invitees: [\n {\n address: 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 */\nMembersUtil.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 */\nMembersUtil.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 */\nMembersUtil.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\nMembersUtil.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\nMembersUtil.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\nMembersUtil.generateTransferHostMemberOptions = (transfer, moderator, locusUrl) => ({\n moderator,\n locusUrl,\n memberId: transfer,\n});\n\nMembersUtil.generateRemoveMemberOptions = (removal, locusUrl) => ({\n reason: _FORCED_,\n memberId: removal,\n locusUrl,\n});\n\nMembersUtil.generateMuteMemberOptions = (memberId, status, locusUrl, isAudio) => ({\n memberId,\n muted: status,\n locusUrl,\n isAudio,\n});\n\nMembersUtil.generateRaiseHandMemberOptions = (memberId, status, locusUrl) => ({\n memberId,\n raised: status,\n locusUrl,\n});\n\nMembersUtil.generateLowerAllHandsMemberOptions = (requestingParticipantId, locusUrl) => ({\n requestingParticipantId,\n locusUrl,\n});\n\nMembersUtil.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\nMembersUtil.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\nMembersUtil.getLowerAllHandsMemberRequestParams = (options) => {\n const body = {\n hand: {\n raised: false,\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\nMembersUtil.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\nMembersUtil.genderateSendDTMFOptions = (url, tones, memberId, locusUrl) => ({\n url,\n tones,\n memberId,\n locusUrl,\n});\n\nMembersUtil.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\nMembersUtil.cancelPhoneInviteOptions = (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n});\n\nMembersUtil.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\nexport default MembersUtil;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["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","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","getMuteMemberRequestParams","property","PATCH","getRoleAssignmentMemberRequestParams","role","forEach","push","type","hasRole","getRaiseHandMemberRequestParams","hand","getLowerAllHandsMemberRequestParams","getTransferHostToMemberRequestParams","genderateSendDTMFOptions","url","tones","generateSendDTMFRequestParams","device","dtmf","correlationId","uuid","v4","direction","SEND_DTMF_ENDPOINT","POST","cancelPhoneInviteOptions","generateCancelInviteRequestParams","actionType","_REMOVE_"],"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} from '../constants';\n\nimport {RoleAssignmentOptions, RoleAssignmentRequest, ServerRoleShape} from './types';\n\nconst MembersUtil: any = {};\n\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 */\nMembersUtil.generateAddMemberOptions = (\n invitee: object,\n locusUrl: string,\n alertIfActive: boolean\n) => ({\n invitee,\n locusUrl,\n alertIfActive,\n});\n\n/**\n * @param {Array} memberIds\n * @param {String} locusUrl\n * @returns {Object} the format object\n */\nMembersUtil.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 */\nMembersUtil.getAddMemberBody = (options: any) => ({\n invitees: [\n {\n address: 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 */\nMembersUtil.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 */\nMembersUtil.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 */\nMembersUtil.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\nMembersUtil.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\nMembersUtil.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\nMembersUtil.generateTransferHostMemberOptions = (transfer, moderator, locusUrl) => ({\n moderator,\n locusUrl,\n memberId: transfer,\n});\n\nMembersUtil.generateRemoveMemberOptions = (removal, locusUrl) => ({\n reason: _FORCED_,\n memberId: removal,\n locusUrl,\n});\n\nMembersUtil.generateMuteMemberOptions = (memberId, status, locusUrl, isAudio) => ({\n memberId,\n muted: status,\n locusUrl,\n isAudio,\n});\n\nMembersUtil.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 */\nMembersUtil.generateRoleAssignmentMemberOptions = (\n memberId: string,\n roles: Array<ServerRoleShape>,\n locusUrl: string\n): RoleAssignmentOptions => ({\n memberId,\n roles,\n locusUrl,\n});\n\nMembersUtil.generateLowerAllHandsMemberOptions = (requestingParticipantId, locusUrl) => ({\n requestingParticipantId,\n locusUrl,\n});\n\nMembersUtil.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 {RoleAssignmentOptions} options\n * @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request\n */\nMembersUtil.getRoleAssignmentMemberRequestParams = (\n options: RoleAssignmentOptions\n): RoleAssignmentRequest => {\n const body = {role: {roles: []}};\n options.roles.forEach((role) => {\n body.role.roles.push({type: role.type, hasRole: role.hasRole});\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\nMembersUtil.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\nMembersUtil.getLowerAllHandsMemberRequestParams = (options) => {\n const body = {\n hand: {\n raised: false,\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\nMembersUtil.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\nMembersUtil.genderateSendDTMFOptions = (url, tones, memberId, locusUrl) => ({\n url,\n tones,\n memberId,\n locusUrl,\n});\n\nMembersUtil.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\nMembersUtil.cancelPhoneInviteOptions = (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n});\n\nMembersUtil.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\nexport default MembersUtil;\n"],"mappings":"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"}
|
|
@@ -466,8 +466,8 @@ var ReconnectionManager = /*#__PURE__*/function () {
|
|
|
466
466
|
_context2.next = 30;
|
|
467
467
|
break;
|
|
468
468
|
}
|
|
469
|
-
_loggerProxy.default.logger.info('ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely
|
|
470
|
-
throw new Error('Unable to rejoin a meeting already ended or inactive
|
|
469
|
+
_loggerProxy.default.logger.info('ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.');
|
|
470
|
+
throw new Error('Unable to rejoin a meeting already ended or inactive.');
|
|
471
471
|
case 30:
|
|
472
472
|
_loggerProxy.default.logger.info("ReconnectionManager:index#executeReconnection --> Current state of meeting is ".concat(this.meeting.state));
|
|
473
473
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NeedsRetryError","Error","NeedsRejoinError","wasSharing","error","ReconnectionManager","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","tryCount","DEFAULT_TRY_COUNT","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","clearTimeout","LoggerProxy","logger","log","resetReconnectionTimer","reject","setTimeout","reason","setLocalShareTrack","isSharing","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","NO_SHARE","mediaProperties","mediaDirection","sendShare","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","IN_PROGRESS","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","networkDisconnect","networkRetry","id","validate","Metrics","postEvent","event","eventType","MEDIA_RECONNECTING","executeReconnection","then","MEDIA_RECOVERED","data","recoveredBy","RECOVERED_BY_NEW","catch","reconnectError","reconnect","message","reconnectMetric","CALL_ABORTED","errors","category","errorObjects","expected","errorCode","fatal","name","mediaEngine","shownToUser","rejoinMeeting","stopLocalShareTrack","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","internal","device","url","FAILURE","meetings","syncMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","media","join","rejoin","MEETING_REJOIN","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","roap","doTurnDiscovery","turnServerResult","iceServers","turnServerInfo","push","urls","username","credential","password","webrtcMediaConnection","isMultistream","mediaRequestManagers","forEach","mediaRequestManager","commit","mercury","connected","disconnect","connect"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectInProgress from '../common/errors/reconnection-in-progress';\nimport {eventType, reconnection, errorObjects} from '../metrics/config';\nimport Media from '../media';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n wasSharing: any;\n\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n */\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n tryCount: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: Meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,\n };\n\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Number}\n * @private\n * @memberof ReconnectionManager\n */\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n // @ts-ignore\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.resetReconnectionTimer();\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise<undefined>}\n * @public\n * @memberof ReconnectionManager\n */\n public waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\n\n this.iceState.disconnected = true;\n\n return new Promise<void>((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n this.meeting = null;\n }\n\n /**\n * Stop the local share track.\n *\n * @param {string} reason a {@link SHARE_STOPPED_REASON}\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private stopLocalShareTrack(reason: string) {\n this.meeting.setLocalShareTrack(null);\n this.meeting.isSharing = false;\n if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;\n }\n this.meeting.mediaProperties.mediaDirection.sendShare = false;\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'stopLocalShareTrack',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason,\n }\n );\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectionError}\n * @private\n * @memberof ReconnectionManager\n */\n private validate() {\n if (this.meeting.config.reconnection.enabled) {\n if (\n this.status === RECONNECTION.STATE.DEFAULT_STATUS ||\n this.status === RECONNECTION.STATE.COMPLETE\n ) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#validate --> Reconnection already in progress.'\n );\n\n throw new ReconnectInProgress('Reconnection already in progress.');\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection is not enabled.');\n\n throw new ReconnectionError('Reconnection is not enabled.');\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect({\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {}) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n } catch (error) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection unable to begin.',\n error\n );\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n Metrics.postEvent({\n event: eventType.MEDIA_RECONNECTING,\n meeting: this.meeting,\n });\n }\n\n return this.executeReconnection({networkDisconnect})\n .then(() => {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect success metric.'\n );\n Metrics.postEvent({\n event: eventType.MEDIA_RECOVERED,\n meeting: this.meeting,\n data: {recoveredBy: reconnection.RECOVERED_BY_NEW},\n });\n })\n .catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n return this.reconnect({networkDisconnect: true, networkRetry: true});\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'\n );\n\n const reconnectMetric = {\n event: eventType.CALL_ABORTED,\n meeting: this.meeting,\n data: {\n errors: [\n {\n category: errorObjects.category.expected,\n errorCode: 2008,\n fatal: true,\n name: errorObjects.name.mediaEngine,\n shownToUser: false,\n },\n ],\n },\n };\n\n Metrics.postEvent(reconnectMetric);\n if (reconnectError instanceof NeedsRejoinError) {\n // send call aborded event with catogery as expected as we are trying to rejoin\n\n if (this.autoRejoinEnabled) {\n return this.rejoinMeeting(reconnectError.wasSharing);\n }\n }\n\n throw reconnectError;\n });\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n if (wasSharing) {\n this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);\n }\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',\n this.webex.internal.device.url\n );\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw error;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings();\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\n throw new NeedsRetryError(syncError);\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely '\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive .');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw new NeedsRejoinError({wasSharing});\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#executeReconnection --> Media reestablished'\n );\n this.status = RECONNECTION.STATE.COMPLETE;\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Media reestablishment failed'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw error;\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing = false) {\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEETING_REJOIN);\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media'\n );\n\n // do the TURN server discovery again since the TURN server might change\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true);\n\n const iceServers = [];\n\n if (turnServerResult.turnServerInfo) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.url,\n username: turnServerResult.turnServerInfo.username || '',\n credential: turnServerResult.turnServerInfo.password || '',\n });\n }\n\n await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);\n\n // resend media requests\n if (this.meeting.isMultistream) {\n Object.values(this.meeting.mediaRequestManagers).forEach((mediaRequestManager) =>\n // @ts-ignore - Fix type\n mediaRequestManager.commit()\n );\n }\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n private async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'\n );\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'\n );\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.'\n );\n } catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',\n disconnectError\n );\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'\n );\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'\n );\n } catch (connectError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',\n connectError\n );\n\n throw connectError;\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["NeedsRetryError","Error","NeedsRejoinError","wasSharing","error","ReconnectionManager","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","tryCount","DEFAULT_TRY_COUNT","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","clearTimeout","LoggerProxy","logger","log","resetReconnectionTimer","reject","setTimeout","reason","setLocalShareTrack","isSharing","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","NO_SHARE","mediaProperties","mediaDirection","sendShare","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","IN_PROGRESS","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","networkDisconnect","networkRetry","id","validate","Metrics","postEvent","event","eventType","MEDIA_RECONNECTING","executeReconnection","then","MEDIA_RECOVERED","data","recoveredBy","RECOVERED_BY_NEW","catch","reconnectError","reconnect","message","reconnectMetric","CALL_ABORTED","errors","category","errorObjects","expected","errorCode","fatal","name","mediaEngine","shownToUser","rejoinMeeting","stopLocalShareTrack","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","internal","device","url","FAILURE","meetings","syncMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","media","join","rejoin","MEETING_REJOIN","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","roap","doTurnDiscovery","turnServerResult","iceServers","turnServerInfo","push","urls","username","credential","password","webrtcMediaConnection","isMultistream","mediaRequestManagers","forEach","mediaRequestManager","commit","mercury","connected","disconnect","connect"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectInProgress from '../common/errors/reconnection-in-progress';\nimport {eventType, reconnection, errorObjects} from '../metrics/config';\nimport Media from '../media';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n wasSharing: any;\n\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n */\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n tryCount: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: Meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,\n };\n\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Number}\n * @private\n * @memberof ReconnectionManager\n */\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n // @ts-ignore\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.resetReconnectionTimer();\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise<undefined>}\n * @public\n * @memberof ReconnectionManager\n */\n public waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\n\n this.iceState.disconnected = true;\n\n return new Promise<void>((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n this.meeting = null;\n }\n\n /**\n * Stop the local share track.\n *\n * @param {string} reason a {@link SHARE_STOPPED_REASON}\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private stopLocalShareTrack(reason: string) {\n this.meeting.setLocalShareTrack(null);\n this.meeting.isSharing = false;\n if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;\n }\n this.meeting.mediaProperties.mediaDirection.sendShare = false;\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'stopLocalShareTrack',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason,\n }\n );\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectionError}\n * @private\n * @memberof ReconnectionManager\n */\n private validate() {\n if (this.meeting.config.reconnection.enabled) {\n if (\n this.status === RECONNECTION.STATE.DEFAULT_STATUS ||\n this.status === RECONNECTION.STATE.COMPLETE\n ) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#validate --> Reconnection already in progress.'\n );\n\n throw new ReconnectInProgress('Reconnection already in progress.');\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection is not enabled.');\n\n throw new ReconnectionError('Reconnection is not enabled.');\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect({\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {}) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n } catch (error) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection unable to begin.',\n error\n );\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n Metrics.postEvent({\n event: eventType.MEDIA_RECONNECTING,\n meeting: this.meeting,\n });\n }\n\n return this.executeReconnection({networkDisconnect})\n .then(() => {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect success metric.'\n );\n Metrics.postEvent({\n event: eventType.MEDIA_RECOVERED,\n meeting: this.meeting,\n data: {recoveredBy: reconnection.RECOVERED_BY_NEW},\n });\n })\n .catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n return this.reconnect({networkDisconnect: true, networkRetry: true});\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'\n );\n\n const reconnectMetric = {\n event: eventType.CALL_ABORTED,\n meeting: this.meeting,\n data: {\n errors: [\n {\n category: errorObjects.category.expected,\n errorCode: 2008,\n fatal: true,\n name: errorObjects.name.mediaEngine,\n shownToUser: false,\n },\n ],\n },\n };\n\n Metrics.postEvent(reconnectMetric);\n if (reconnectError instanceof NeedsRejoinError) {\n // send call aborded event with catogery as expected as we are trying to rejoin\n\n if (this.autoRejoinEnabled) {\n return this.rejoinMeeting(reconnectError.wasSharing);\n }\n }\n\n throw reconnectError;\n });\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n if (wasSharing) {\n this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);\n }\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',\n this.webex.internal.device.url\n );\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw error;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings();\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\n throw new NeedsRetryError(syncError);\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive.');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw new NeedsRejoinError({wasSharing});\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#executeReconnection --> Media reestablished'\n );\n this.status = RECONNECTION.STATE.COMPLETE;\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Media reestablishment failed'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw error;\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing = false) {\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEETING_REJOIN);\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media'\n );\n\n // do the TURN server discovery again since the TURN server might change\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true);\n\n const iceServers = [];\n\n if (turnServerResult.turnServerInfo) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.url,\n username: turnServerResult.turnServerInfo.username || '',\n credential: turnServerResult.turnServerInfo.password || '',\n });\n }\n\n await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);\n\n // resend media requests\n if (this.meeting.isMultistream) {\n Object.values(this.meeting.mediaRequestManagers).forEach((mediaRequestManager) =>\n // @ts-ignore - Fix type\n mediaRequestManager.commit()\n );\n }\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n private async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'\n );\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'\n );\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.'\n );\n } catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',\n disconnectError\n );\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'\n );\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'\n );\n } catch (connectError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',\n connectError\n );\n\n throw connectError;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -619,6 +619,7 @@ export declare const DISPLAY_HINTS: {
|
|
|
619
619
|
DISPLAY_NON_ENGLISH_ASR: string;
|
|
620
620
|
TRANSCRIPTION_CONTROL_START: string;
|
|
621
621
|
TRANSCRIPTION_CONTROL_STOP: string;
|
|
622
|
+
SAVE_TRANSCRIPTS_ENABLED: string;
|
|
622
623
|
WEBEX_ASSISTANT_STATUS_ACTIVE: string;
|
|
623
624
|
WAITING_FOR_OTHERS: string;
|
|
624
625
|
ENABLE_REACTIONS: string;
|
|
@@ -631,6 +632,7 @@ export declare const DISPLAY_HINTS: {
|
|
|
631
632
|
DISABLE_HARD_MUTE: string;
|
|
632
633
|
MUTE_ALL: string;
|
|
633
634
|
UNMUTE_ALL: string;
|
|
635
|
+
PRESENTER_CONTROL: string;
|
|
634
636
|
BREAKOUT_MANAGEMENT: string;
|
|
635
637
|
UCF_SUPPRESS_BREAKOUTS_SUPPORT: string;
|
|
636
638
|
DISABLE_ASK_FOR_HELP: string;
|
|
@@ -17,6 +17,8 @@ interface IInMeetingActions {
|
|
|
17
17
|
canSetMuted?: boolean;
|
|
18
18
|
canUnsetMuted?: boolean;
|
|
19
19
|
canAssignHost?: boolean;
|
|
20
|
+
canSetPresenter?: boolean;
|
|
21
|
+
canUnsetPresenter?: boolean;
|
|
20
22
|
canStartRecording?: boolean;
|
|
21
23
|
canPauseRecording?: boolean;
|
|
22
24
|
canResumeRecording?: boolean;
|
|
@@ -29,6 +31,7 @@ interface IInMeetingActions {
|
|
|
29
31
|
canStartTranscribing?: boolean;
|
|
30
32
|
canStopTranscribing?: boolean;
|
|
31
33
|
isClosedCaptionActive?: boolean;
|
|
34
|
+
isSaveTranscriptsEnabled?: boolean;
|
|
32
35
|
isWebexAssistantActive?: boolean;
|
|
33
36
|
canViewCaptionPanel?: boolean;
|
|
34
37
|
isRealTimeTranslationEnabled?: boolean;
|
|
@@ -56,6 +59,8 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
56
59
|
canResumeRecording: any;
|
|
57
60
|
canStopRecording: any;
|
|
58
61
|
canSetMuteOnEntry: any;
|
|
62
|
+
canSetPresenter: any;
|
|
63
|
+
canUnsetPresenter: any;
|
|
59
64
|
canUnsetMuteOnEntry: any;
|
|
60
65
|
canSetDisallowUnmute: any;
|
|
61
66
|
canUnsetDisallowUnmute: any;
|
|
@@ -69,6 +74,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
69
74
|
canStartTranscribing: any;
|
|
70
75
|
canStopTranscribing: any;
|
|
71
76
|
isClosedCaptionActive: any;
|
|
77
|
+
isSaveTranscriptsEnabled: any;
|
|
72
78
|
isWebexAssistantActive: any;
|
|
73
79
|
canViewCaptionPanel: any;
|
|
74
80
|
isRealTimeTranslationEnabled: any;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IExternalRoles } from './types';
|
|
1
2
|
/**
|
|
2
3
|
* @class Member
|
|
3
4
|
*/
|
|
@@ -21,6 +22,7 @@ export default class Member {
|
|
|
21
22
|
isSelf: any;
|
|
22
23
|
isUser: any;
|
|
23
24
|
isVideoMuted: any;
|
|
25
|
+
roles: IExternalRoles;
|
|
24
26
|
name: any;
|
|
25
27
|
participant: any;
|
|
26
28
|
status: any;
|
|
@@ -135,6 +137,14 @@ export default class Member {
|
|
|
135
137
|
* @memberof Member
|
|
136
138
|
*/
|
|
137
139
|
private processIsHost;
|
|
140
|
+
/**
|
|
141
|
+
* process the roles that have been applied to this member
|
|
142
|
+
* @param {Object} participant
|
|
143
|
+
* @returns {undefined}
|
|
144
|
+
* @private
|
|
145
|
+
* @memberof Member
|
|
146
|
+
*/
|
|
147
|
+
private processRoles;
|
|
138
148
|
/**
|
|
139
149
|
* set the type for the member, could be MEETING or CALL
|
|
140
150
|
* @param {String} type
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface IExternalRoles {
|
|
2
|
+
cohost: boolean;
|
|
3
|
+
moderator: boolean;
|
|
4
|
+
presenter: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare enum ServerRoles {
|
|
7
|
+
Cohost = "COHOST",
|
|
8
|
+
Moderator = "MODERATOR",
|
|
9
|
+
Presenter = "PRESENTER"
|
|
10
|
+
}
|
|
11
|
+
export type ServerRoleShape = {
|
|
12
|
+
type: ServerRoles;
|
|
13
|
+
hasRole: boolean;
|
|
14
|
+
};
|
|
15
|
+
export type ParticipantWithRoles = {
|
|
16
|
+
controls: {
|
|
17
|
+
role: {
|
|
18
|
+
roles: Array<ServerRoleShape>;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { StatelessWebexPlugin } from '@webex/webex-core';
|
|
2
2
|
import { ReceiveSlotManager } from '../multistream/receiveSlotManager';
|
|
3
3
|
import { MediaRequestManager } from '../multistream/mediaRequestManager';
|
|
4
|
+
import { ServerRoleShape } from './types';
|
|
4
5
|
/**
|
|
5
6
|
* Members Update Event
|
|
6
7
|
* Emitted when something in the roster list needs to be updated
|
|
@@ -272,6 +273,15 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
272
273
|
* @memberof Members
|
|
273
274
|
*/
|
|
274
275
|
muteMember(memberId: string, mute?: boolean, isAudio?: boolean): any;
|
|
276
|
+
/**
|
|
277
|
+
* Assign role(s) to a member in the meeting
|
|
278
|
+
* @param {String} memberId
|
|
279
|
+
* @param {[ServerRoleShape]} roles - to assign an array of roles
|
|
280
|
+
* @returns {Promise}
|
|
281
|
+
* @public
|
|
282
|
+
* @memberof Members
|
|
283
|
+
*/
|
|
284
|
+
assignRoles(memberId: string, roles: Array<ServerRoleShape>): any;
|
|
275
285
|
/**
|
|
276
286
|
* Raise or lower the hand of a member in a meeting
|
|
277
287
|
* @param {String} memberId
|
|
@@ -22,6 +22,14 @@ export default class MembersRequest extends StatelessWebexPlugin {
|
|
|
22
22
|
admitMember(options: any): any;
|
|
23
23
|
removeMember(options: any): any;
|
|
24
24
|
muteMember(options: any): any;
|
|
25
|
+
/**
|
|
26
|
+
* Sends a request to the DTMF endpoint to send tones
|
|
27
|
+
* @param {Object} options
|
|
28
|
+
* @param {String} options.locusUrl
|
|
29
|
+
* @param {String} options.memberId ID of PSTN user
|
|
30
|
+
* @returns {Promise}
|
|
31
|
+
*/
|
|
32
|
+
assignRolesMember(options: any): any;
|
|
25
33
|
raiseOrLowerHandMember(options: any): any;
|
|
26
34
|
lowerAllHandsMember(options: any): any;
|
|
27
35
|
transferHostToMember(options: any): any;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare enum ServerRoles {
|
|
2
|
+
Cohost = "COHOST",
|
|
3
|
+
Moderator = "MODERATOR",
|
|
4
|
+
Presenter = "PRESENTER"
|
|
5
|
+
}
|
|
6
|
+
export type ServerRoleShape = {
|
|
7
|
+
type: ServerRoles;
|
|
8
|
+
hasRole: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type RoleAssignmentOptions = {
|
|
11
|
+
roles: Array<ServerRoleShape>;
|
|
12
|
+
locusUrl: string;
|
|
13
|
+
memberId: string;
|
|
14
|
+
};
|
|
15
|
+
export type RoleAssignmentBody = {
|
|
16
|
+
role: {
|
|
17
|
+
roles: Array<ServerRoleShape>;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export type RoleAssignmentRequest = {
|
|
21
|
+
method: string;
|
|
22
|
+
uri: string;
|
|
23
|
+
body: RoleAssignmentBody;
|
|
24
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.59",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
6
|
"contributors": [
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
36
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
38
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
39
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
40
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
35
|
+
"@webex/plugin-meetings": "3.0.0-beta.59",
|
|
36
|
+
"@webex/test-helper-chai": "3.0.0-beta.59",
|
|
37
|
+
"@webex/test-helper-mocha": "3.0.0-beta.59",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.59",
|
|
39
|
+
"@webex/test-helper-retry": "3.0.0-beta.59",
|
|
40
|
+
"@webex/test-helper-test-users": "3.0.0-beta.59",
|
|
41
41
|
"chai": "^4.3.4",
|
|
42
42
|
"chai-as-promised": "^7.1.1",
|
|
43
43
|
"jsdom-global": "3.0.2",
|
|
@@ -46,18 +46,18 @@
|
|
|
46
46
|
"typescript": "^4.7.4"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@webex/common": "3.0.0-beta.
|
|
49
|
+
"@webex/common": "3.0.0-beta.59",
|
|
50
50
|
"@webex/internal-media-core": "1.35.3",
|
|
51
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
52
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
53
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
54
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
55
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
56
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
57
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
58
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
59
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
60
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
51
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.59",
|
|
52
|
+
"@webex/internal-plugin-device": "3.0.0-beta.59",
|
|
53
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.59",
|
|
54
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.59",
|
|
55
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.59",
|
|
56
|
+
"@webex/internal-plugin-support": "3.0.0-beta.59",
|
|
57
|
+
"@webex/internal-plugin-user": "3.0.0-beta.59",
|
|
58
|
+
"@webex/plugin-people": "3.0.0-beta.59",
|
|
59
|
+
"@webex/plugin-rooms": "3.0.0-beta.59",
|
|
60
|
+
"@webex/webex-core": "3.0.0-beta.59",
|
|
61
61
|
"ampersand-collection": "^2.0.2",
|
|
62
62
|
"bowser": "^2.11.0",
|
|
63
63
|
"btoa": "^1.2.1",
|
package/src/constants.ts
CHANGED
|
@@ -785,6 +785,7 @@ export const DISPLAY_HINTS = {
|
|
|
785
785
|
DISPLAY_NON_ENGLISH_ASR: 'DISPLAY_NON_ENGLISH_ASR',
|
|
786
786
|
TRANSCRIPTION_CONTROL_START: 'TRANSCRIPTION_CONTROL_START',
|
|
787
787
|
TRANSCRIPTION_CONTROL_STOP: 'TRANSCRIPTION_CONTROL_STOP',
|
|
788
|
+
SAVE_TRANSCRIPTS_ENABLED: 'SAVE_TRANSCRIPTS_ENABLED',
|
|
788
789
|
WEBEX_ASSISTANT_STATUS_ACTIVE: 'WEBEX_ASSISTANT_STATUS_ACTIVE',
|
|
789
790
|
WAITING_FOR_OTHERS: 'WAITING_FOR_OTHERS',
|
|
790
791
|
ENABLE_REACTIONS: 'ENABLE_REACTIONS',
|
|
@@ -797,6 +798,7 @@ export const DISPLAY_HINTS = {
|
|
|
797
798
|
DISABLE_HARD_MUTE: 'DISABLE_HARD_MUTE',
|
|
798
799
|
MUTE_ALL: 'MUTE_ALL',
|
|
799
800
|
UNMUTE_ALL: 'UNMUTE_ALL',
|
|
801
|
+
PRESENTER_CONTROL: 'PRESENTER_CONTROL',
|
|
800
802
|
|
|
801
803
|
// breakout session
|
|
802
804
|
BREAKOUT_MANAGEMENT: 'BREAKOUT_MANAGEMENT',
|