@webex/plugin-meetings 1.142.1 → 1.143.2
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/README.md +13 -5
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +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 +1 -1
- package/dist/locus-info/index.js.map +1 -1
- package/dist/members/index.js +1 -1
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +1 -1
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +9 -5
- package/dist/members/util.js.map +1 -1
- package/package.json +5 -5
- package/src/constants.js +2 -1
- package/src/locus-info/controlsUtils.js +7 -6
- package/src/locus-info/index.js +1 -1
- package/src/members/index.js +1 -1
- package/src/members/request.js +1 -1
- package/src/members/util.js +11 -6
- package/test/unit/spec/locus-info/index.js +48 -0
package/dist/members/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["util.js"],"names":["MembersUtil","generateAddMemberOptions","invitee","locusUrl","alertIfActive","generateAdmitMemberOptions","memberIds","getAddMemberBody","options","invitees","address","emailAddress","email","getAdmitMemberRequestBody","admit","participantIds","getAdmitMemberRequestParams","format","body","uri","CONTROLS","method","HTTP_VERBS","PUT","getAddMemberRequestParams","requestParams","isInvalidInvitee","
|
|
1
|
+
{"version":3,"sources":["util.js"],"names":["MembersUtil","generateAddMemberOptions","invitee","locusUrl","alertIfActive","generateAdmitMemberOptions","memberIds","getAddMemberBody","options","invitees","address","emailAddress","email","phoneNumber","getAdmitMemberRequestBody","admit","participantIds","getAdmitMemberRequestParams","format","body","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","mute","status","muted","getMuteMemberRequestParams","audio","PATCH","getTransferHostToMemberRequestParams","role"],"mappings":"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","sourcesContent":["import {\n HTTP_VERBS,\n CONTROLS,\n _FORCED_,\n LEAVE,\n PARTICIPANT,\n VALID_EMAIL_ADDRESS,\n DIALER_REGEX\n} from '../constants';\n\nconst MembersUtil = {};\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 = (invitee, locusUrl, alertIfActive) => ({\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, locusUrl) => ({\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) => ({\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}\n * @returns {Object} admit with {memberIds}\n */\nMembersUtil.getAdmitMemberRequestBody = (options) => ({\n admit: {participantIds: options.memberIds}\n});\n\n/**\n * @param {Object} format with {memberIds, locusUrl}\n * @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request\n */\nMembersUtil.getAdmitMemberRequestParams = (format) => {\n const body = MembersUtil.getAdmitMemberRequestBody(format);\n const uri = `${format.locusUrl}/${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) => {\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 = (mute, status, locusUrl) => ({\n memberId: mute,\n muted: status,\n locusUrl\n});\n\nMembersUtil.getMuteMemberRequestParams = (options) => {\n const body = {\n audio: {\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.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\nexport default MembersUtil;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.143.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"contributors": [
|
|
@@ -24,17 +24,17 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@babel/runtime-corejs2": "^7.14.8",
|
|
27
|
-
"@webex/webex-core": "1.
|
|
28
|
-
"@webex/internal-plugin-mercury": "1.
|
|
27
|
+
"@webex/webex-core": "1.143.2",
|
|
28
|
+
"@webex/internal-plugin-mercury": "1.143.2",
|
|
29
29
|
"webrtc-adapter": "^7.7.0",
|
|
30
30
|
"lodash": "^4.17.21",
|
|
31
31
|
"uuid": "^3.3.2",
|
|
32
32
|
"global": "^4.4.0",
|
|
33
|
-
"@webex/common": "1.
|
|
33
|
+
"@webex/common": "1.143.2",
|
|
34
34
|
"bowser": "^2.11.0",
|
|
35
35
|
"sdp-transform": "^2.12.0",
|
|
36
36
|
"readable-stream": "^3.6.0",
|
|
37
|
-
"@webex/common-timers": "1.
|
|
37
|
+
"@webex/common-timers": "1.143.2",
|
|
38
38
|
"btoa": "^1.2.1",
|
|
39
39
|
"javascript-state-machine": "^3.1.0",
|
|
40
40
|
"envify": "^4.1.0"
|
package/src/constants.js
CHANGED
|
@@ -200,7 +200,8 @@ export const DIALER_REGEX = {
|
|
|
200
200
|
// requires the @ symbol
|
|
201
201
|
SIP_ADDRESS: /^(sips?)?:?(?:([^\s>:@]+)(?::([^\s@>]+))?@)([\w\-.]+)(?::(\d+))?((?:;[^\s=?>;]+(?:=[^\s?;]+)?)*)(?:\?(([^\s&=>]+=[^\s&=>]+)(&[^\s&=>]+=[^\s&=>]+)*))?$/,
|
|
202
202
|
// standard telephony num regex
|
|
203
|
-
PHONE_NUMBER: /^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))
|
|
203
|
+
PHONE_NUMBER: /^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/,
|
|
204
|
+
E164_FORMAT: /^\+[1-9]\d{1,14}$/
|
|
204
205
|
};
|
|
205
206
|
|
|
206
207
|
// eslint-disable-next-line max-len
|
|
@@ -46,12 +46,13 @@ ControlsUtils.getControls = (oldControls, newControls) => {
|
|
|
46
46
|
previous,
|
|
47
47
|
current,
|
|
48
48
|
updates: {
|
|
49
|
-
hasRecordingPausedChanged: current?.record &&
|
|
50
|
-
|
|
51
|
-
),
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
)
|
|
49
|
+
hasRecordingPausedChanged: current?.record &&
|
|
50
|
+
!isEqual(previous?.record?.paused, current.record.paused) &&
|
|
51
|
+
(previous?.record?.recording || current?.record?.recording), // see comments directly below
|
|
52
|
+
|
|
53
|
+
hasRecordingChanged: current?.record &&
|
|
54
|
+
!isEqual(previous?.record?.recording, current?.record?.recording) && // upon first join, previous?.record?.recording = undefined; thus, never going to be equal and will always return true
|
|
55
|
+
(previous?.record?.recording || current?.record?.recording) // therefore, condition added to prevent false firings of #meeting:recording:stopped upon first joining a meeting
|
|
55
56
|
}
|
|
56
57
|
};
|
|
57
58
|
};
|
package/src/locus-info/index.js
CHANGED
|
@@ -256,7 +256,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
256
256
|
* @memberof LocusInfo
|
|
257
257
|
*/
|
|
258
258
|
handleOneOnOneEvent(eventType) {
|
|
259
|
-
if (this.parsedLocus.fullState.type === _CALL_) {
|
|
259
|
+
if (this.parsedLocus.fullState.type === _CALL_ || this.parsedLocus.fullState.type === _SIP_BRIDGE_) {
|
|
260
260
|
// for 1:1 bob calls alice and alice declines, notify the meeting state
|
|
261
261
|
if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {
|
|
262
262
|
// trigger the event for stop ringing
|
package/src/members/index.js
CHANGED
|
@@ -586,7 +586,7 @@ export default class Members extends StatelessWebexPlugin {
|
|
|
586
586
|
}
|
|
587
587
|
if (MembersUtil.isInvalidInvitee(invitee)) {
|
|
588
588
|
return Promise.reject(
|
|
589
|
-
new ParameterError('The invitee must be defined with either a valid email, or
|
|
589
|
+
new ParameterError('The invitee must be defined with either a valid email, emailAddress or phoneNumber property.')
|
|
590
590
|
);
|
|
591
591
|
}
|
|
592
592
|
const options = MembersUtil.generateAddMemberOptions(invitee, this.locusUrl, alertIfActive);
|
package/src/members/request.js
CHANGED
|
@@ -20,7 +20,7 @@ export default class MembersRequest extends StatelessWebexPlugin {
|
|
|
20
20
|
* @memberof MembersRequest
|
|
21
21
|
*/
|
|
22
22
|
addMembers(options) {
|
|
23
|
-
if (!(!options || !options.invitee || (!options.invitee.emailAddress || !options.invitee.email) || !options.locusUrl)) {
|
|
23
|
+
if (!(!options || !options.invitee || (!options.invitee.emailAddress || !options.invitee.email || !options.invitee.phoneNumber) || !options.locusUrl)) {
|
|
24
24
|
throw new ParameterError('invitee must be passed and the associated locus url for this meeting object must be defined.');
|
|
25
25
|
}
|
|
26
26
|
const requestParams = MembersUtil.getAddMemberRequestParams(options);
|
package/src/members/util.js
CHANGED
|
@@ -4,13 +4,14 @@ import {
|
|
|
4
4
|
_FORCED_,
|
|
5
5
|
LEAVE,
|
|
6
6
|
PARTICIPANT,
|
|
7
|
-
VALID_EMAIL_ADDRESS
|
|
7
|
+
VALID_EMAIL_ADDRESS,
|
|
8
|
+
DIALER_REGEX
|
|
8
9
|
} from '../constants';
|
|
9
10
|
|
|
10
11
|
const MembersUtil = {};
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
|
-
* @param {Object} invitee with emailAddress or
|
|
14
|
+
* @param {Object} invitee with emailAddress, email or phoneNumber
|
|
14
15
|
* @param {String} locusUrl
|
|
15
16
|
* @param {Boolean} alertIfActive
|
|
16
17
|
* @returns {Object} the format object
|
|
@@ -32,13 +33,13 @@ MembersUtil.generateAdmitMemberOptions = (memberIds, locusUrl) => ({
|
|
|
32
33
|
});
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
|
-
* @param {Object} options with {invitee: {emailAddress, email}, alertIfActive}
|
|
36
|
+
* @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}
|
|
36
37
|
* @returns {Object} with {invitees: [{address}], alertIfActive}
|
|
37
38
|
*/
|
|
38
39
|
MembersUtil.getAddMemberBody = (options) => ({
|
|
39
40
|
invitees: [
|
|
40
41
|
{
|
|
41
|
-
address: options.invitee.emailAddress || options.invitee.email
|
|
42
|
+
address: options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber
|
|
42
43
|
}
|
|
43
44
|
],
|
|
44
45
|
alertIfActive: options.alertIfActive
|
|
@@ -68,7 +69,7 @@ MembersUtil.getAdmitMemberRequestParams = (format) => {
|
|
|
68
69
|
};
|
|
69
70
|
|
|
70
71
|
/**
|
|
71
|
-
* @param {Object} format with {invitee {emailAddress, email}, locusUrl, alertIfActive}
|
|
72
|
+
* @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}
|
|
72
73
|
* @returns {Object} the request parameters (method, uri, body) needed to make a addMember request
|
|
73
74
|
*/
|
|
74
75
|
MembersUtil.getAddMemberRequestParams = (format) => {
|
|
@@ -83,10 +84,14 @@ MembersUtil.getAddMemberRequestParams = (format) => {
|
|
|
83
84
|
};
|
|
84
85
|
|
|
85
86
|
MembersUtil.isInvalidInvitee = (invitee) => {
|
|
86
|
-
if (!(invitee && (invitee.email || invitee.emailAddress))) {
|
|
87
|
+
if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {
|
|
87
88
|
return true;
|
|
88
89
|
}
|
|
89
90
|
|
|
91
|
+
if (invitee.phoneNumber) {
|
|
92
|
+
return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);
|
|
93
|
+
}
|
|
94
|
+
|
|
90
95
|
return !VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress);
|
|
91
96
|
};
|
|
92
97
|
|
|
@@ -81,6 +81,17 @@ describe('plugin-meetings', () => {
|
|
|
81
81
|
assert.equal(locusInfo.controls, newControls);
|
|
82
82
|
});
|
|
83
83
|
|
|
84
|
+
it('should not trigger the CONTROLS_RECORDING_UPDATED event', () => {
|
|
85
|
+
locusInfo.controls = {};
|
|
86
|
+
locusInfo.emitScoped = sinon.stub();
|
|
87
|
+
locusInfo.updateControls(newControls);
|
|
88
|
+
|
|
89
|
+
locusInfo.emitScoped.getCalls().forEach((x) => {
|
|
90
|
+
// check that no calls in emitScoped are for CONTROLS_RECORDING_UPDATED
|
|
91
|
+
assert.notEqual(x.args[1], LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
84
95
|
it('should keep the recording state to `IDLE`', () => {
|
|
85
96
|
locusInfo.controls = {
|
|
86
97
|
record: {
|
|
@@ -531,6 +542,7 @@ describe('plugin-meetings', () => {
|
|
|
531
542
|
meetingInfoUnlocked);
|
|
532
543
|
});
|
|
533
544
|
});
|
|
545
|
+
|
|
534
546
|
describe('#LocusDeltaEvents', () => {
|
|
535
547
|
const fakeMeeting = 'fakeMeeting';
|
|
536
548
|
let sandbox = null;
|
|
@@ -675,5 +687,41 @@ describe('plugin-meetings', () => {
|
|
|
675
687
|
});
|
|
676
688
|
});
|
|
677
689
|
});
|
|
690
|
+
|
|
691
|
+
describe('#handleOneonOneEvent', () => {
|
|
692
|
+
beforeEach(() => {
|
|
693
|
+
locusInfo.emitScoped = sinon.stub();
|
|
694
|
+
});
|
|
695
|
+
it('emits `REMOTE_RESPONSE`', () => {
|
|
696
|
+
// 'locus.participant_joined'
|
|
697
|
+
|
|
698
|
+
locusInfo.parsedLocus.fullState.type = 'SIP_BRIDGE';
|
|
699
|
+
locusInfo.handleOneOnOneEvent('locus.participant_declined');
|
|
700
|
+
|
|
701
|
+
assert.calledWith(locusInfo.emitScoped, {
|
|
702
|
+
file: 'locus-info',
|
|
703
|
+
function: 'handleOneonOneEvent'
|
|
704
|
+
},
|
|
705
|
+
'REMOTE_RESPONSE',
|
|
706
|
+
{
|
|
707
|
+
remoteDeclined: true,
|
|
708
|
+
remoteAnswered: false
|
|
709
|
+
});
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
locusInfo.parsedLocus.fullState.type = 'SIP_BRIDGE';
|
|
713
|
+
locusInfo.handleOneOnOneEvent('locus.participant_joined');
|
|
714
|
+
|
|
715
|
+
assert.calledWith(locusInfo.emitScoped, {
|
|
716
|
+
file: 'locus-info',
|
|
717
|
+
function: 'handleOneonOneEvent'
|
|
718
|
+
},
|
|
719
|
+
'REMOTE_RESPONSE',
|
|
720
|
+
{
|
|
721
|
+
remoteDeclined: false,
|
|
722
|
+
remoteAnswered: true
|
|
723
|
+
});
|
|
724
|
+
});
|
|
725
|
+
});
|
|
678
726
|
});
|
|
679
727
|
});
|