@webex/plugin-meetings 1.149.1 → 1.151.0

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.
Files changed (42) hide show
  1. package/dist/constants.js +14 -4
  2. package/dist/constants.js.map +1 -1
  3. package/dist/locus-info/mediaSharesUtils.js +88 -11
  4. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  5. package/dist/meeting/index.js +368 -42
  6. package/dist/meeting/index.js.map +1 -1
  7. package/dist/meeting/request.js +17 -41
  8. package/dist/meeting/request.js.map +1 -1
  9. package/dist/meeting-info/index.js +1 -1
  10. package/dist/meeting-info/index.js.map +1 -1
  11. package/dist/meeting-info/util.js +14 -0
  12. package/dist/meeting-info/util.js.map +1 -1
  13. package/dist/meetings/index.js +1 -1
  14. package/dist/meetings/index.js.map +1 -1
  15. package/dist/meetings/util.js +0 -16
  16. package/dist/meetings/util.js.map +1 -1
  17. package/dist/members/index.js +72 -11
  18. package/dist/members/index.js.map +1 -1
  19. package/dist/metrics/config.js +6 -0
  20. package/dist/metrics/config.js.map +1 -1
  21. package/dist/metrics/index.js +26 -1
  22. package/dist/metrics/index.js.map +1 -1
  23. package/dist/peer-connection-manager/index.js +1 -1
  24. package/dist/peer-connection-manager/index.js.map +1 -1
  25. package/package.json +5 -5
  26. package/src/constants.js +11 -2
  27. package/src/locus-info/mediaSharesUtils.js +84 -12
  28. package/src/meeting/index.js +350 -29
  29. package/src/meeting/request.js +50 -29
  30. package/src/meeting-info/index.js +4 -1
  31. package/src/meeting-info/util.js +13 -0
  32. package/src/meetings/index.js +1 -1
  33. package/src/meetings/util.js +0 -14
  34. package/src/members/index.js +80 -11
  35. package/src/metrics/config.js +6 -0
  36. package/src/metrics/index.js +23 -2
  37. package/src/peer-connection-manager/index.js +7 -2
  38. package/test/integration/spec/journey.js +177 -3
  39. package/test/integration/spec/space-meeting.js +33 -5
  40. package/test/unit/spec/meeting/index.js +547 -2
  41. package/test/utils/testUtils.js +18 -1
  42. package/test/utils/webex-test-users.js +2 -0
@@ -20,8 +20,15 @@ var MediaSharesUtils = {};
20
20
  MediaSharesUtils.parse = function (mediaShares) {
21
21
  if (mediaShares) {
22
22
  return {
23
- contentId: MediaSharesUtils.getContentId(mediaShares),
24
- disposition: MediaSharesUtils.getDisposition(mediaShares)
23
+ content: {
24
+ beneficiaryId: MediaSharesUtils.getContentBeneficiaryId(mediaShares),
25
+ disposition: MediaSharesUtils.getContentDisposition(mediaShares)
26
+ },
27
+ whiteboard: {
28
+ beneficiaryId: MediaSharesUtils.getWhiteboardBeneficiaryId(mediaShares),
29
+ disposition: MediaSharesUtils.getWhiteboardDisposition(mediaShares),
30
+ resourceUrl: MediaSharesUtils.getWhiteboardResourceUrl(mediaShares)
31
+ }
25
32
  };
26
33
  }
27
34
 
@@ -45,16 +52,27 @@ MediaSharesUtils.getMediaShares = function (oldShare, newShare) {
45
52
  };
46
53
  };
47
54
  /**
48
- * get the floor disposition (released, granted)
55
+ * get the content floor disposition (released, granted)
49
56
  * @param {Object} mediaShares
50
57
  * @returns {Boolean} disposition
51
58
  */
52
59
 
53
60
 
54
- MediaSharesUtils.getDisposition = function (mediaShares) {
61
+ MediaSharesUtils.getContentDisposition = function (mediaShares) {
55
62
  var contentFloor = MediaSharesUtils.extractContentFloor(mediaShares);
56
63
  return contentFloor ? contentFloor.disposition : null;
57
64
  };
65
+ /**
66
+ * get the whiteboard floor disposition (released, granted)
67
+ * @param {Object} mediaShares
68
+ * @returns {Boolean} disposition
69
+ */
70
+
71
+
72
+ MediaSharesUtils.getWhiteboardDisposition = function (mediaShares) {
73
+ var whiteboardFloor = MediaSharesUtils.extractWhiteboardFloor(mediaShares);
74
+ return whiteboardFloor ? whiteboardFloor.disposition : null;
75
+ };
58
76
  /**
59
77
  * extract the content property from media shares
60
78
  * @param {Object} mediaShares
@@ -72,18 +90,34 @@ MediaSharesUtils.extractContent = function (mediaShares) {
72
90
  }) || null;
73
91
  };
74
92
  /**
75
- * extract the floor property from content object
76
- * @param {Object} content
93
+ * extract the whiteboard property from media shares
94
+ * @param {Object} mediaShares
77
95
  * @returns {Object}
78
96
  */
79
97
 
80
98
 
81
- MediaSharesUtils.extractFloor = function (content) {
82
- if (!content) {
99
+ MediaSharesUtils.extractWhiteboard = function (mediaShares) {
100
+ if (!mediaShares || !mediaShares.length) {
83
101
  return null;
84
102
  }
85
103
 
86
- return content.floor;
104
+ return mediaShares.find(function (share) {
105
+ return share.name === _constants.WHITEBOARD;
106
+ }) || null;
107
+ };
108
+ /**
109
+ * extract the media stream floor property from content object
110
+ * @param {Object} mediaStream
111
+ * @returns {Object}
112
+ */
113
+
114
+
115
+ MediaSharesUtils.extractFloor = function (mediaStream) {
116
+ if (!mediaStream) {
117
+ return null;
118
+ }
119
+
120
+ return mediaStream.floor;
87
121
  };
88
122
  /**
89
123
  * extract the content's floor from media shares
@@ -97,13 +131,24 @@ MediaSharesUtils.extractContentFloor = function (mediaShares) {
97
131
  return MediaSharesUtils.extractFloor(content);
98
132
  };
99
133
  /**
100
- * get who is sharing from media shares
134
+ * extract the whiteboard's floor from media shares
101
135
  * @param {Object} mediaShares
102
136
  * @returns {Object}
103
137
  */
104
138
 
105
139
 
106
- MediaSharesUtils.getContentId = function (mediaShares) {
140
+ MediaSharesUtils.extractWhiteboardFloor = function (mediaShares) {
141
+ var whiteboard = MediaSharesUtils.extractWhiteboard(mediaShares);
142
+ return MediaSharesUtils.extractFloor(whiteboard);
143
+ };
144
+ /**
145
+ * get who is sharing from media shares (content)
146
+ * @param {Object} mediaShares
147
+ * @returns {Object}
148
+ */
149
+
150
+
151
+ MediaSharesUtils.getContentBeneficiaryId = function (mediaShares) {
107
152
  var contentFloor = MediaSharesUtils.extractContentFloor(mediaShares);
108
153
 
109
154
  if (!contentFloor || !contentFloor.beneficiary) {
@@ -112,6 +157,38 @@ MediaSharesUtils.getContentId = function (mediaShares) {
112
157
 
113
158
  return contentFloor.beneficiary.id;
114
159
  };
160
+ /**
161
+ * get who is sharing from media shares (whiteboard)
162
+ * @param {Object} mediaShares
163
+ * @returns {Object}
164
+ */
165
+
166
+
167
+ MediaSharesUtils.getWhiteboardBeneficiaryId = function (mediaShares) {
168
+ var whiteboardFloor = MediaSharesUtils.extractWhiteboardFloor(mediaShares);
169
+
170
+ if (!whiteboardFloor || !whiteboardFloor.beneficiary) {
171
+ return null;
172
+ }
173
+
174
+ return whiteboardFloor.beneficiary.id;
175
+ };
176
+ /**
177
+ * get the which whiteboard is being shared via resource url
178
+ * @param {Object} mediaShares
179
+ * @returns {Object}
180
+ */
181
+
182
+
183
+ MediaSharesUtils.getWhiteboardResourceUrl = function (mediaShares) {
184
+ var whiteboard = MediaSharesUtils.extractWhiteboard(mediaShares);
185
+
186
+ if (!whiteboard || !whiteboard.resourceUrl) {
187
+ return null;
188
+ }
189
+
190
+ return whiteboard.resourceUrl;
191
+ };
115
192
 
116
193
  var _default = MediaSharesUtils;
117
194
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["mediaSharesUtils.js"],"names":["MediaSharesUtils","parse","mediaShares","contentId","getContentId","disposition","getDisposition","getMediaShares","oldShare","newShare","previous","current","contentFloor","extractContentFloor","extractContent","length","find","share","name","CONTENT","extractFloor","content","floor","beneficiary","id"],"mappings":";;;;;;;;;;AAAA;;AAEA,IAAMA,gBAAgB,GAAG,EAAzB;AAEA;AACA;AACA;AACA;AACA;;AACAA,gBAAgB,CAACC,KAAjB,GAAyB,UAACC,WAAD,EAAiB;AACxC,MAAIA,WAAJ,EAAiB;AACf,WAAO;AACLC,MAAAA,SAAS,EAAEH,gBAAgB,CAACI,YAAjB,CAA8BF,WAA9B,CADN;AAELG,MAAAA,WAAW,EAAEL,gBAAgB,CAACM,cAAjB,CAAgCJ,WAAhC;AAFR,KAAP;AAID;;AAED,SAAO,IAAP;AACD,CATD;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAF,gBAAgB,CAACO,cAAjB,GAAkC,UAACC,QAAD,EAAWC,QAAX,EAAwB;AACxD,MAAMC,QAAQ,GAAGF,QAAQ,IAAIR,gBAAgB,CAACC,KAAjB,CAAuBO,QAAvB,CAA7B;AACA,MAAMG,OAAO,GAAGF,QAAQ,IAAIT,gBAAgB,CAACC,KAAjB,CAAuBQ,QAAvB,CAA5B;AAEA,SAAO;AACLC,IAAAA,QAAQ,EAARA,QADK;AAELC,IAAAA,OAAO,EAAPA;AAFK,GAAP;AAID,CARD;AAUA;AACA;AACA;AACA;AACA;;;AACAX,gBAAgB,CAACM,cAAjB,GAAkC,UAACJ,WAAD,EAAiB;AACjD,MAAMU,YAAY,GAAGZ,gBAAgB,CAACa,mBAAjB,CAAqCX,WAArC,CAArB;AAEA,SAAOU,YAAY,GAAGA,YAAY,CAACP,WAAhB,GAA8B,IAAjD;AACD,CAJD;AAMA;AACA;AACA;AACA;AACA;;;AACAL,gBAAgB,CAACc,cAAjB,GAAkC,UAACZ,WAAD,EAAiB;AACjD,MAAI,CAACA,WAAD,IAAgB,CAACA,WAAW,CAACa,MAAjC,EAAyC;AACvC,WAAO,IAAP;AACD;;AAED,SAAOb,WAAW,CAACc,IAAZ,CAAiB,UAACC,KAAD;AAAA,WAAWA,KAAK,CAACC,IAAN,KAAeC,kBAA1B;AAAA,GAAjB,KAAuD,IAA9D;AACD,CAND;AAQA;AACA;AACA;AACA;AACA;;;AACAnB,gBAAgB,CAACoB,YAAjB,GAAgC,UAACC,OAAD,EAAa;AAC3C,MAAI,CAACA,OAAL,EAAc;AACZ,WAAO,IAAP;AACD;;AAED,SAAOA,OAAO,CAACC,KAAf;AACD,CAND;AAQA;AACA;AACA;AACA;AACA;;;AACAtB,gBAAgB,CAACa,mBAAjB,GAAuC,UAACX,WAAD,EAAiB;AACtD,MAAMmB,OAAO,GAAGrB,gBAAgB,CAACc,cAAjB,CAAgCZ,WAAhC,CAAhB;AAEA,SAAOF,gBAAgB,CAACoB,YAAjB,CAA8BC,OAA9B,CAAP;AACD,CAJD;AAMA;AACA;AACA;AACA;AACA;;;AACArB,gBAAgB,CAACI,YAAjB,GAAgC,UAACF,WAAD,EAAiB;AAC/C,MAAMU,YAAY,GAAGZ,gBAAgB,CAACa,mBAAjB,CAAqCX,WAArC,CAArB;;AAEA,MAAI,CAACU,YAAD,IAAiB,CAACA,YAAY,CAACW,WAAnC,EAAgD;AAC9C,WAAO,IAAP;AACD;;AAED,SAAOX,YAAY,CAACW,WAAb,CAAyBC,EAAhC;AACD,CARD;;eAUexB,gB","sourcesContent":["import {CONTENT} from '../constants';\n\nconst MediaSharesUtils = {};\n\n/**\n * parses the relevant values for mediaShares: contentId, disposition\n * @param {Object} mediaShares\n * @returns {undefined}\n */\nMediaSharesUtils.parse = (mediaShares) => {\n if (mediaShares) {\n return {\n contentId: MediaSharesUtils.getContentId(mediaShares),\n disposition: MediaSharesUtils.getDisposition(mediaShares)\n };\n }\n\n return null;\n};\n\n/**\n * get the previous and current mediaShares values parsed, as well as the boolean updates\n * @param {Object} oldShare\n * @param {Object} newShare\n * @returns {Object}\n * previous: {Object} old share, current: {Object} new share,\n */\nMediaSharesUtils.getMediaShares = (oldShare, newShare) => {\n const previous = oldShare && MediaSharesUtils.parse(oldShare);\n const current = newShare && MediaSharesUtils.parse(newShare);\n\n return {\n previous,\n current\n };\n};\n\n/**\n * get the floor disposition (released, granted)\n * @param {Object} mediaShares\n * @returns {Boolean} disposition\n */\nMediaSharesUtils.getDisposition = (mediaShares) => {\n const contentFloor = MediaSharesUtils.extractContentFloor(mediaShares);\n\n return contentFloor ? contentFloor.disposition : null;\n};\n\n/**\n * extract the content property from media shares\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.extractContent = (mediaShares) => {\n if (!mediaShares || !mediaShares.length) {\n return null;\n }\n\n return mediaShares.find((share) => share.name === CONTENT) || null;\n};\n\n/**\n * extract the floor property from content object\n * @param {Object} content\n * @returns {Object}\n */\nMediaSharesUtils.extractFloor = (content) => {\n if (!content) {\n return null;\n }\n\n return content.floor;\n};\n\n/**\n * extract the content's floor from media shares\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.extractContentFloor = (mediaShares) => {\n const content = MediaSharesUtils.extractContent(mediaShares);\n\n return MediaSharesUtils.extractFloor(content);\n};\n\n/**\n * get who is sharing from media shares\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getContentId = (mediaShares) => {\n const contentFloor = MediaSharesUtils.extractContentFloor(mediaShares);\n\n if (!contentFloor || !contentFloor.beneficiary) {\n return null;\n }\n\n return contentFloor.beneficiary.id;\n};\n\nexport default MediaSharesUtils;\n"]}
1
+ {"version":3,"sources":["mediaSharesUtils.js"],"names":["MediaSharesUtils","parse","mediaShares","content","beneficiaryId","getContentBeneficiaryId","disposition","getContentDisposition","whiteboard","getWhiteboardBeneficiaryId","getWhiteboardDisposition","resourceUrl","getWhiteboardResourceUrl","getMediaShares","oldShare","newShare","previous","current","contentFloor","extractContentFloor","whiteboardFloor","extractWhiteboardFloor","extractContent","length","find","share","name","CONTENT","extractWhiteboard","WHITEBOARD","extractFloor","mediaStream","floor","beneficiary","id"],"mappings":"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","sourcesContent":["import {CONTENT, WHITEBOARD} from '../constants';\n\nconst MediaSharesUtils = {};\n\n/**\n * parses the relevant values for mediaShares: contentId, disposition\n * @param {Object} mediaShares\n * @returns {undefined}\n */\nMediaSharesUtils.parse = (mediaShares) => {\n if (mediaShares) {\n return {\n content: {\n beneficiaryId: MediaSharesUtils.getContentBeneficiaryId(mediaShares),\n disposition: MediaSharesUtils.getContentDisposition(mediaShares)\n },\n whiteboard: {\n beneficiaryId: MediaSharesUtils.getWhiteboardBeneficiaryId(mediaShares),\n disposition: MediaSharesUtils.getWhiteboardDisposition(mediaShares),\n resourceUrl: MediaSharesUtils.getWhiteboardResourceUrl(mediaShares)\n }\n };\n }\n\n return null;\n};\n\n/**\n * get the previous and current mediaShares values parsed, as well as the boolean updates\n * @param {Object} oldShare\n * @param {Object} newShare\n * @returns {Object}\n * previous: {Object} old share, current: {Object} new share,\n */\nMediaSharesUtils.getMediaShares = (oldShare, newShare) => {\n const previous = oldShare && MediaSharesUtils.parse(oldShare);\n const current = newShare && MediaSharesUtils.parse(newShare);\n\n return {\n previous,\n current\n };\n};\n\n/**\n * get the content floor disposition (released, granted)\n * @param {Object} mediaShares\n * @returns {Boolean} disposition\n */\nMediaSharesUtils.getContentDisposition = (mediaShares) => {\n const contentFloor = MediaSharesUtils.extractContentFloor(mediaShares);\n\n return contentFloor ? contentFloor.disposition : null;\n};\n\n/**\n * get the whiteboard floor disposition (released, granted)\n * @param {Object} mediaShares\n * @returns {Boolean} disposition\n */\nMediaSharesUtils.getWhiteboardDisposition = (mediaShares) => {\n const whiteboardFloor = MediaSharesUtils.extractWhiteboardFloor(mediaShares);\n\n return whiteboardFloor ? whiteboardFloor.disposition : null;\n};\n\n/**\n * extract the content property from media shares\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.extractContent = (mediaShares) => {\n if (!mediaShares || !mediaShares.length) {\n return null;\n }\n\n return mediaShares.find((share) => share.name === CONTENT) || null;\n};\n\n/**\n * extract the whiteboard property from media shares\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.extractWhiteboard = (mediaShares) => {\n if (!mediaShares || !mediaShares.length) {\n return null;\n }\n\n return mediaShares.find((share) => share.name === WHITEBOARD) || null;\n};\n\n/**\n * extract the media stream floor property from content object\n * @param {Object} mediaStream\n * @returns {Object}\n */\nMediaSharesUtils.extractFloor = (mediaStream) => {\n if (!mediaStream) {\n return null;\n }\n\n return mediaStream.floor;\n};\n\n/**\n * extract the content's floor from media shares\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.extractContentFloor = (mediaShares) => {\n const content = MediaSharesUtils.extractContent(mediaShares);\n\n return MediaSharesUtils.extractFloor(content);\n};\n\n/**\n * extract the whiteboard's floor from media shares\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.extractWhiteboardFloor = (mediaShares) => {\n const whiteboard = MediaSharesUtils.extractWhiteboard(mediaShares);\n\n return MediaSharesUtils.extractFloor(whiteboard);\n};\n\n/**\n * get who is sharing from media shares (content)\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getContentBeneficiaryId = (mediaShares) => {\n const contentFloor = MediaSharesUtils.extractContentFloor(mediaShares);\n\n if (!contentFloor || !contentFloor.beneficiary) {\n return null;\n }\n\n return contentFloor.beneficiary.id;\n};\n\n/**\n * get who is sharing from media shares (whiteboard)\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getWhiteboardBeneficiaryId = (mediaShares) => {\n const whiteboardFloor = MediaSharesUtils.extractWhiteboardFloor(mediaShares);\n\n if (!whiteboardFloor || !whiteboardFloor.beneficiary) {\n return null;\n }\n\n return whiteboardFloor.beneficiary.id;\n};\n\n/**\n * get the which whiteboard is being shared via resource url\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getWhiteboardResourceUrl = (mediaShares) => {\n const whiteboard = MediaSharesUtils.extractWhiteboard(mediaShares);\n\n if (!whiteboard || !whiteboard.resourceUrl) {\n return null;\n }\n\n return whiteboard.resourceUrl;\n};\n\nexport default MediaSharesUtils;\n"]}