@webex/plugin-meetings 3.8.0-next.8 → 3.8.0-next.80

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 (171) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +70 -6
  3. package/dist/breakouts/index.js.map +1 -1
  4. package/dist/common/errors/webex-errors.js +12 -2
  5. package/dist/common/errors/webex-errors.js.map +1 -1
  6. package/dist/config.js +5 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.js +20 -123
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controls-options-manager/enums.js +2 -0
  11. package/dist/controls-options-manager/enums.js.map +1 -1
  12. package/dist/controls-options-manager/types.js.map +1 -1
  13. package/dist/controls-options-manager/util.js +52 -0
  14. package/dist/controls-options-manager/util.js.map +1 -1
  15. package/dist/interpretation/index.js +1 -1
  16. package/dist/interpretation/siLanguage.js +1 -1
  17. package/dist/locus-info/controlsUtils.js +28 -10
  18. package/dist/locus-info/controlsUtils.js.map +1 -1
  19. package/dist/locus-info/index.js +62 -12
  20. package/dist/locus-info/index.js.map +1 -1
  21. package/dist/locus-info/selfUtils.js +432 -418
  22. package/dist/locus-info/selfUtils.js.map +1 -1
  23. package/dist/media/index.js +17 -17
  24. package/dist/media/index.js.map +1 -1
  25. package/dist/media/properties.js +94 -6
  26. package/dist/media/properties.js.map +1 -1
  27. package/dist/meeting/brbState.js +6 -0
  28. package/dist/meeting/brbState.js.map +1 -1
  29. package/dist/meeting/in-meeting-actions.js +17 -1
  30. package/dist/meeting/in-meeting-actions.js.map +1 -1
  31. package/dist/meeting/index.js +570 -302
  32. package/dist/meeting/index.js.map +1 -1
  33. package/dist/meeting/locusMediaRequest.js +0 -17
  34. package/dist/meeting/locusMediaRequest.js.map +1 -1
  35. package/dist/meeting/muteState.js +0 -2
  36. package/dist/meeting/muteState.js.map +1 -1
  37. package/dist/meeting/request.js +30 -0
  38. package/dist/meeting/request.js.map +1 -1
  39. package/dist/meeting/request.type.js.map +1 -1
  40. package/dist/meeting/util.js +13 -2
  41. package/dist/meeting/util.js.map +1 -1
  42. package/dist/meeting-info/meeting-info-v2.js +373 -68
  43. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  44. package/dist/meeting-info/utilv2.js +5 -1
  45. package/dist/meeting-info/utilv2.js.map +1 -1
  46. package/dist/meetings/index.js +136 -1
  47. package/dist/meetings/index.js.map +1 -1
  48. package/dist/meetings/util.js +14 -0
  49. package/dist/meetings/util.js.map +1 -1
  50. package/dist/member/index.js +10 -0
  51. package/dist/member/index.js.map +1 -1
  52. package/dist/member/util.js +330 -353
  53. package/dist/member/util.js.map +1 -1
  54. package/dist/members/index.js +42 -0
  55. package/dist/members/index.js.map +1 -1
  56. package/dist/members/request.js +38 -0
  57. package/dist/members/request.js.map +1 -1
  58. package/dist/members/util.js +36 -1
  59. package/dist/members/util.js.map +1 -1
  60. package/dist/metrics/constants.js +9 -0
  61. package/dist/metrics/constants.js.map +1 -1
  62. package/dist/reachability/clusterReachability.js +63 -27
  63. package/dist/reachability/clusterReachability.js.map +1 -1
  64. package/dist/reachability/index.js +112 -47
  65. package/dist/reachability/index.js.map +1 -1
  66. package/dist/reachability/reachability.types.js +14 -0
  67. package/dist/reachability/reachability.types.js.map +1 -1
  68. package/dist/reachability/request.js +19 -3
  69. package/dist/reachability/request.js.map +1 -1
  70. package/dist/reconnection-manager/index.js +2 -2
  71. package/dist/reconnection-manager/index.js.map +1 -1
  72. package/dist/roap/index.js.map +1 -1
  73. package/dist/roap/turnDiscovery.js +45 -27
  74. package/dist/roap/turnDiscovery.js.map +1 -1
  75. package/dist/roap/types.js +17 -0
  76. package/dist/roap/types.js.map +1 -0
  77. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  78. package/dist/types/config.d.ts +3 -0
  79. package/dist/types/constants.d.ts +13 -85
  80. package/dist/types/controls-options-manager/enums.d.ts +3 -1
  81. package/dist/types/controls-options-manager/types.d.ts +7 -1
  82. package/dist/types/locus-info/index.d.ts +3 -3
  83. package/dist/types/locus-info/selfUtils.d.ts +216 -1
  84. package/dist/types/media/properties.d.ts +15 -0
  85. package/dist/types/meeting/in-meeting-actions.d.ts +16 -0
  86. package/dist/types/meeting/index.d.ts +43 -1
  87. package/dist/types/meeting/muteState.d.ts +0 -1
  88. package/dist/types/meeting/request.d.ts +12 -1
  89. package/dist/types/meeting/request.type.d.ts +6 -0
  90. package/dist/types/meeting/util.d.ts +3 -1
  91. package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
  92. package/dist/types/meetings/index.d.ts +57 -0
  93. package/dist/types/member/index.d.ts +1 -0
  94. package/dist/types/member/util.d.ts +159 -1
  95. package/dist/types/members/index.d.ts +15 -0
  96. package/dist/types/members/request.d.ts +26 -0
  97. package/dist/types/members/util.d.ts +27 -0
  98. package/dist/types/metrics/constants.d.ts +9 -0
  99. package/dist/types/reachability/clusterReachability.d.ts +15 -7
  100. package/dist/types/reachability/index.d.ts +10 -1
  101. package/dist/types/reachability/reachability.types.d.ts +5 -0
  102. package/dist/types/roap/index.d.ts +3 -2
  103. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  104. package/dist/types/roap/types.d.ts +16 -0
  105. package/dist/webinar/index.js +1 -1
  106. package/package.json +24 -23
  107. package/src/breakouts/index.ts +69 -0
  108. package/src/common/errors/webex-errors.ts +8 -1
  109. package/src/config.ts +3 -0
  110. package/src/constants.ts +20 -90
  111. package/src/controls-options-manager/enums.ts +2 -0
  112. package/src/controls-options-manager/types.ts +11 -1
  113. package/src/controls-options-manager/util.ts +62 -0
  114. package/src/locus-info/controlsUtils.ts +44 -14
  115. package/src/locus-info/index.ts +56 -13
  116. package/src/locus-info/selfUtils.ts +496 -442
  117. package/src/media/index.ts +23 -21
  118. package/src/media/properties.ts +96 -0
  119. package/src/meeting/brbState.ts +7 -0
  120. package/src/meeting/in-meeting-actions.ts +32 -0
  121. package/src/meeting/index.ts +382 -93
  122. package/src/meeting/locusMediaRequest.ts +0 -18
  123. package/src/meeting/muteState.ts +0 -2
  124. package/src/meeting/request.ts +36 -1
  125. package/src/meeting/request.type.ts +7 -0
  126. package/src/meeting/util.ts +11 -2
  127. package/src/meeting-info/meeting-info-v2.ts +254 -8
  128. package/src/meeting-info/utilv2.ts +5 -0
  129. package/src/meetings/index.ts +148 -1
  130. package/src/meetings/util.ts +18 -0
  131. package/src/member/index.ts +13 -2
  132. package/src/member/util.ts +351 -348
  133. package/src/members/index.ts +47 -0
  134. package/src/members/request.ts +44 -0
  135. package/src/members/util.ts +43 -1
  136. package/src/metrics/constants.ts +9 -0
  137. package/src/reachability/clusterReachability.ts +73 -26
  138. package/src/reachability/index.ts +70 -1
  139. package/src/reachability/reachability.types.ts +6 -0
  140. package/src/reachability/request.ts +7 -0
  141. package/src/reconnection-manager/index.ts +2 -2
  142. package/src/roap/index.ts +3 -7
  143. package/src/roap/turnDiscovery.ts +34 -39
  144. package/src/roap/types.ts +23 -0
  145. package/test/unit/spec/breakouts/index.ts +167 -95
  146. package/test/unit/spec/controls-options-manager/util.js +120 -0
  147. package/test/unit/spec/locus-info/controlsUtils.js +103 -9
  148. package/test/unit/spec/locus-info/index.js +167 -73
  149. package/test/unit/spec/locus-info/selfUtils.js +98 -24
  150. package/test/unit/spec/media/index.ts +150 -18
  151. package/test/unit/spec/media/properties.ts +130 -0
  152. package/test/unit/spec/meeting/brbState.ts +19 -0
  153. package/test/unit/spec/meeting/in-meeting-actions.ts +19 -4
  154. package/test/unit/spec/meeting/index.js +557 -35
  155. package/test/unit/spec/meeting/locusMediaRequest.ts +0 -30
  156. package/test/unit/spec/meeting/muteState.js +0 -2
  157. package/test/unit/spec/meeting/request.js +32 -1
  158. package/test/unit/spec/meeting/utils.js +119 -18
  159. package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
  160. package/test/unit/spec/meeting-info/utilv2.js +19 -0
  161. package/test/unit/spec/meetings/index.js +146 -2
  162. package/test/unit/spec/member/index.js +7 -0
  163. package/test/unit/spec/member/util.js +24 -0
  164. package/test/unit/spec/members/index.js +140 -26
  165. package/test/unit/spec/members/request.js +68 -22
  166. package/test/unit/spec/members/utils.js +75 -0
  167. package/test/unit/spec/reachability/clusterReachability.ts +88 -56
  168. package/test/unit/spec/reachability/index.ts +101 -0
  169. package/test/unit/spec/reachability/request.js +47 -2
  170. package/test/unit/spec/reconnection-manager/index.js +4 -4
  171. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
@@ -124,6 +124,19 @@ declare const MembersUtil: {
124
124
  };
125
125
  };
126
126
  };
127
+ getMoveMemberToLobbyRequestBody: (memberId: string) => {
128
+ moveToLobby: {
129
+ participantIds: string[];
130
+ };
131
+ };
132
+ getMoveMemberToLobbyRequestParams: (options: {
133
+ memberId: string;
134
+ locusUrl: string;
135
+ }, body: any) => {
136
+ method: string;
137
+ uri: string;
138
+ body: any;
139
+ };
127
140
  /**
128
141
  * @param {ServerRoleShape} role
129
142
  * @returns {ServerRoleShape} the role shape to be added to the body
@@ -215,5 +228,19 @@ declare const MembersUtil: {
215
228
  }[];
216
229
  };
217
230
  };
231
+ cancelSIPInviteOptions: (invitee: any, locusUrl: any) => {
232
+ invitee: any;
233
+ locusUrl: any;
234
+ };
235
+ generateCancelSIPInviteRequestParams: (options: any) => {
236
+ method: string;
237
+ uri: any;
238
+ body: {
239
+ actionType: string;
240
+ invitees: {
241
+ address: any;
242
+ }[];
243
+ };
244
+ };
218
245
  };
219
246
  export default MembersUtil;
@@ -45,10 +45,19 @@ declare const BEHAVIORAL_METRICS: {
45
45
  UPLOAD_LOGS_FAILURE: string;
46
46
  UPLOAD_LOGS_SUCCESS: string;
47
47
  RECEIVE_TRANSCRIPTION_FAILURE: string;
48
+ MEETING_IS_IN_PROGRESS_ERROR: string;
49
+ STATIC_MEETING_LINK_ALREADY_EXISTS_ERROR: string;
48
50
  FETCH_MEETING_INFO_V1_SUCCESS: string;
49
51
  FETCH_MEETING_INFO_V1_FAILURE: string;
52
+ ENABLE_STATIC_METTING_LINK_SUCCESS: string;
53
+ ENABLE_STATIC_METTING_LINK_FAILURE: string;
54
+ DISABLE_STATIC_MEETING_LINK_SUCCESS: string;
55
+ DISABLE_STATIC_MEETING_LINK_FAILURE: string;
50
56
  ADHOC_MEETING_SUCCESS: string;
51
57
  ADHOC_MEETING_FAILURE: string;
58
+ FETCH_STATIC_MEETING_LINK_SUCCESS: string;
59
+ FETCH_STATIC_MEETING_LINK_FAILURE: string;
60
+ MEETING_LINK_DOES_NOT_EXIST_ERROR: string;
52
61
  VERIFY_PASSWORD_SUCCESS: string;
53
62
  VERIFY_PASSWORD_ERROR: string;
54
63
  VERIFY_CAPTCHA_ERROR: string;
@@ -1,7 +1,7 @@
1
1
  import { ClusterNode } from './request';
2
2
  import EventsScope from '../common/events/events-scope';
3
3
  import { Enum } from '../constants';
4
- import { ClusterReachabilityResult } from './reachability.types';
4
+ import { ClusterReachabilityResult, NatType } from './reachability.types';
5
5
  export type ResultEventData = {
6
6
  protocol: 'udp' | 'tcp' | 'xtls';
7
7
  result: 'reachable' | 'unreachable' | 'untested';
@@ -12,9 +12,13 @@ export type ClientMediaIpsUpdatedEventData = {
12
12
  protocol: 'udp' | 'tcp' | 'xtls';
13
13
  clientMediaIPs: string[];
14
14
  };
15
+ export type NatTypeUpdatedEventData = {
16
+ natType: NatType;
17
+ };
15
18
  export declare const Events: {
16
19
  readonly resultReady: "resultReady";
17
20
  readonly clientMediaIpsUpdated: "clientMediaIpsUpdated";
21
+ readonly natTypeUpdated: "natTypeUpdated";
18
22
  };
19
23
  export type Events = Enum<typeof Events>;
20
24
  /**
@@ -29,8 +33,10 @@ export declare class ClusterReachability extends EventsScope {
29
33
  private pc?;
30
34
  private defer;
31
35
  private startTimestamp;
36
+ private srflxIceCandidates;
32
37
  readonly isVideoMesh: boolean;
33
38
  readonly name: any;
39
+ readonly reachedSubnets: Set<string>;
34
40
  /**
35
41
  * Constructor for ClusterReachability
36
42
  * @param {string} name cluster name
@@ -89,12 +95,6 @@ export declare class ClusterReachability extends EventsScope {
89
95
  * @returns {void}
90
96
  */
91
97
  private registerIceGatheringStateChangeListener;
92
- /**
93
- * Checks if we have the results for all the protocols (UDP and TCP)
94
- *
95
- * @returns {boolean} true if we have all results, false otherwise
96
- */
97
- private haveWeGotAllResults;
98
98
  /**
99
99
  * Saves the latency in the result for the given protocol and marks it as reachable,
100
100
  * emits the "resultReady" event if this is the first result for that protocol,
@@ -104,9 +104,17 @@ export declare class ClusterReachability extends EventsScope {
104
104
  * @param {string} protocol
105
105
  * @param {number} latency
106
106
  * @param {string|null} [publicIp]
107
+ * @param {string|null} [serverIp]
107
108
  * @returns {void}
108
109
  */
109
110
  private saveResult;
111
+ /**
112
+ * Determines NAT Type.
113
+ *
114
+ * @param {RTCIceCandidate} candidate
115
+ * @returns {void}
116
+ */
117
+ private determineNatType;
110
118
  /**
111
119
  * Registers a listener for the icecandidate event
112
120
  *
@@ -4,7 +4,7 @@
4
4
  import { Defer } from '@webex/common';
5
5
  import { IP_VERSION } from '../constants';
6
6
  import ReachabilityRequest, { ClusterList } from './request';
7
- import { ClusterReachabilityResult, ClientMediaPreferences, ReachabilityMetrics, ReachabilityReportV0, ReachabilityReportV1, ReachabilityResults, ReachabilityResultsForBackend, GetClustersTrigger } from './reachability.types';
7
+ import { ClusterReachabilityResult, ClientMediaPreferences, ReachabilityMetrics, ReachabilityReportV0, ReachabilityReportV1, ReachabilityResults, ReachabilityResultsForBackend, GetClustersTrigger, NatType } from './reachability.types';
8
8
  import { ClusterReachability } from './clusterReachability';
9
9
  import EventsScope from '../common/events/events-scope';
10
10
  /**
@@ -46,6 +46,7 @@ export default class Reachability extends EventsScope {
46
46
  };
47
47
  startTime: any;
48
48
  totalDuration: any;
49
+ natType: NatType;
49
50
  protected lastTrigger?: string;
50
51
  /**
51
52
  * Creates an instance of Reachability.
@@ -65,6 +66,14 @@ export default class Reachability extends EventsScope {
65
66
  clusters: ClusterList;
66
67
  joinCookie: any;
67
68
  }>;
69
+ /**
70
+ * Checks if the given subnet is reachable
71
+ * @param {string} mediaServerIp - media server ip
72
+ * @returns {boolean | null} true if reachable, false if not reachable, null if mediaServerIp is not provided
73
+ * @public
74
+ * @memberof Reachability
75
+ */
76
+ isSubnetReachable(mediaServerIp?: string): boolean | null;
68
77
  /**
69
78
  * Gets a list of media clusters from the backend and performs reachability checks on all the clusters
70
79
  * @param {string} trigger - explains the reason for starting reachability
@@ -4,6 +4,10 @@ export type TransportResult = {
4
4
  latencyInMilliseconds?: number;
5
5
  clientMediaIPs?: string[];
6
6
  };
7
+ export declare enum NatType {
8
+ Unknown = "unknown",
9
+ SymmetricNat = "symmetric-nat"
10
+ }
7
11
  export type ClusterReachabilityResult = {
8
12
  udp: TransportResult;
9
13
  tcp: TransportResult;
@@ -22,6 +26,7 @@ export type ReachabilityMetrics = {
22
26
  reachability_vmn_tcp_failed: number;
23
27
  reachability_vmn_xtls_success: number;
24
28
  reachability_vmn_xtls_failed: number;
29
+ natType: NatType;
25
30
  };
26
31
  /**
27
32
  * This is the type that matches what backend expects us to send to them. It is a bit weird, because
@@ -1,7 +1,8 @@
1
1
  import { StatelessWebexPlugin } from '@webex/webex-core';
2
- import TurnDiscovery, { TurnDiscoveryResult } from './turnDiscovery';
2
+ import TurnDiscovery from './turnDiscovery';
3
+ import { TurnDiscoveryResult } from './types';
3
4
  import Meeting from '../meeting';
4
- export { type TurnDiscoveryResult, type TurnServerInfo, type TurnDiscoverySkipReason, } from './turnDiscovery';
5
+ export { type TurnDiscoveryResult, type TurnServerInfo, type TurnDiscoverySkipReason } from './types';
5
6
  /**
6
7
  * Roap options
7
8
  * @typedef {Object} RoapOptions
@@ -1,21 +1,6 @@
1
- import { Enum } from '../constants';
2
1
  import RoapRequest from './request';
3
2
  import Meeting from '../meeting';
4
- declare const TurnDiscoverySkipReason: {
5
- readonly missingHttpResponse: "missing http response";
6
- readonly reachability: "reachability";
7
- readonly alreadyInProgress: "already in progress";
8
- };
9
- export type TurnDiscoverySkipReason = Enum<typeof TurnDiscoverySkipReason> | string | undefined;
10
- export type TurnServerInfo = {
11
- url: string;
12
- username: string;
13
- password: string;
14
- };
15
- export type TurnDiscoveryResult = {
16
- turnServerInfo?: TurnServerInfo;
17
- turnDiscoverySkippedReason: TurnDiscoverySkipReason;
18
- };
3
+ import { TurnDiscoverySkipReason, TurnDiscoveryResult } from './types';
19
4
  /**
20
5
  * Handles the process of finding out TURN server information from Linus.
21
6
  * This is achieved by sending a TURN_DISCOVERY_REQUEST.
@@ -25,6 +10,10 @@ export default class TurnDiscovery {
25
10
  private defer?;
26
11
  private turnInfo;
27
12
  private responseTimer?;
13
+ /** Resets the turnInfo structure to the defaults
14
+ * @returns {void}
15
+ */
16
+ private resetTurnInfo;
28
17
  /**
29
18
  * Constructor
30
19
  *
@@ -152,4 +141,3 @@ export default class TurnDiscovery {
152
141
  */
153
142
  doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean, isForced?: boolean): Promise<TurnDiscoveryResult>;
154
143
  }
155
- export {};
@@ -0,0 +1,16 @@
1
+ import { Enum } from '../constants';
2
+ export declare const TurnDiscoverySkipReason: {
3
+ readonly missingHttpResponse: "missing http response";
4
+ readonly reachability: "reachability";
5
+ readonly alreadyInProgress: "already in progress";
6
+ };
7
+ export type TurnDiscoverySkipReason = Enum<typeof TurnDiscoverySkipReason> | string | undefined;
8
+ export type TurnServerInfo = {
9
+ urls: string[];
10
+ username: string;
11
+ password: string;
12
+ };
13
+ export type TurnDiscoveryResult = {
14
+ turnServerInfo?: TurnServerInfo;
15
+ turnDiscoverySkippedReason: TurnDiscoverySkipReason;
16
+ };
@@ -458,7 +458,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
458
458
  }, _callee7);
459
459
  }))();
460
460
  },
461
- version: "3.8.0-next.8"
461
+ version: "3.8.0-next.80"
462
462
  });
463
463
  var _default = exports.default = Webinar;
464
464
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -43,13 +43,13 @@
43
43
  "@webex/eslint-config-legacy": "0.0.0",
44
44
  "@webex/jest-config-legacy": "0.0.0",
45
45
  "@webex/legacy-tools": "0.0.0",
46
- "@webex/plugin-meetings": "3.8.0-next.8",
47
- "@webex/plugin-rooms": "3.8.0-next.2",
48
- "@webex/test-helper-chai": "3.8.0-next.2",
49
- "@webex/test-helper-mocha": "3.8.0-next.2",
50
- "@webex/test-helper-mock-webex": "3.8.0-next.2",
51
- "@webex/test-helper-retry": "3.8.0-next.2",
52
- "@webex/test-helper-test-users": "3.8.0-next.2",
46
+ "@webex/plugin-meetings": "3.8.0-next.80",
47
+ "@webex/plugin-rooms": "3.8.0-next.27",
48
+ "@webex/test-helper-chai": "3.8.0-next.22",
49
+ "@webex/test-helper-mocha": "3.8.0-next.22",
50
+ "@webex/test-helper-mock-webex": "3.8.0-next.22",
51
+ "@webex/test-helper-retry": "3.8.0-next.22",
52
+ "@webex/test-helper-test-users": "3.8.0-next.22",
53
53
  "chai": "^4.3.4",
54
54
  "chai-as-promised": "^7.1.1",
55
55
  "eslint": "^8.24.0",
@@ -61,22 +61,23 @@
61
61
  "typescript": "^4.7.4"
62
62
  },
63
63
  "dependencies": {
64
- "@webex/common": "3.8.0-next.2",
65
- "@webex/event-dictionary-ts": "^1.0.1688",
66
- "@webex/internal-media-core": "2.14.4",
67
- "@webex/internal-plugin-conversation": "3.8.0-next.2",
68
- "@webex/internal-plugin-device": "3.8.0-next.2",
69
- "@webex/internal-plugin-llm": "3.8.0-next.3",
70
- "@webex/internal-plugin-mercury": "3.8.0-next.2",
71
- "@webex/internal-plugin-metrics": "3.8.0-next.2",
72
- "@webex/internal-plugin-support": "3.8.0-next.2",
73
- "@webex/internal-plugin-user": "3.8.0-next.2",
74
- "@webex/internal-plugin-voicea": "3.8.0-next.8",
75
- "@webex/media-helpers": "3.8.0-next.2",
76
- "@webex/plugin-people": "3.8.0-next.2",
77
- "@webex/plugin-rooms": "3.8.0-next.2",
64
+ "@webex/common": "3.8.0-next.22",
65
+ "@webex/event-dictionary-ts": "^1.0.1753",
66
+ "@webex/internal-media-core": "2.17.0",
67
+ "@webex/internal-plugin-conversation": "3.8.0-next.27",
68
+ "@webex/internal-plugin-device": "3.8.0-next.22",
69
+ "@webex/internal-plugin-llm": "3.8.0-next.25",
70
+ "@webex/internal-plugin-mercury": "3.8.0-next.24",
71
+ "@webex/internal-plugin-metrics": "3.8.0-next.22",
72
+ "@webex/internal-plugin-support": "3.8.0-next.27",
73
+ "@webex/internal-plugin-user": "3.8.0-next.22",
74
+ "@webex/internal-plugin-voicea": "3.8.0-next.80",
75
+ "@webex/media-helpers": "3.8.0-next.27",
76
+ "@webex/plugin-people": "3.8.0-next.24",
77
+ "@webex/plugin-rooms": "3.8.0-next.27",
78
+ "@webex/ts-sdp": "^1.8.1",
78
79
  "@webex/web-capabilities": "^1.4.0",
79
- "@webex/webex-core": "3.8.0-next.2",
80
+ "@webex/webex-core": "3.8.0-next.22",
80
81
  "ampersand-collection": "^2.0.2",
81
82
  "bowser": "^2.11.0",
82
83
  "btoa": "^1.2.1",
@@ -92,5 +93,5 @@
92
93
  "//": [
93
94
  "TODO: upgrade jwt-decode when moving to node 18"
94
95
  ],
95
- "version": "3.8.0-next.8"
96
+ "version": "3.8.0-next.80"
96
97
  }
@@ -45,6 +45,8 @@ const Breakouts = WebexPlugin.extend({
45
45
  intervalID: 'number',
46
46
  meetingId: 'string',
47
47
  canManageBreakouts: 'boolean', // appear the ability to manage breakouts
48
+ mainGroupId: 'string', // appears from the moment you enable breakouts
49
+ mainSessionId: 'string', // appears from the moment you enable breakouts
48
50
  },
49
51
  children: {
50
52
  currentBreakoutSession: Breakout,
@@ -544,6 +546,28 @@ const Breakouts = WebexPlugin.extend({
544
546
  }
545
547
  },
546
548
 
549
+ /**
550
+ * set main group id
551
+ * @param {Object} breakoutInfo -- breakout groups
552
+ * @returns {void}
553
+ */
554
+ _setMainGroupId(breakoutInfo) {
555
+ if (breakoutInfo?.body?.mainGroupId) {
556
+ this.set('mainGroupId', breakoutInfo.body.mainGroupId);
557
+ }
558
+ },
559
+
560
+ /**
561
+ * set main session id
562
+ * @param {Object} breakoutInfo -- breakout groups
563
+ * @returns {void}
564
+ */
565
+ _setMainSessionId(breakoutInfo) {
566
+ if (breakoutInfo?.body?.mainSessionId) {
567
+ this.set('mainSessionId', breakoutInfo.body.mainSessionId);
568
+ }
569
+ },
570
+
547
571
  /**
548
572
  * Create new breakout sessions
549
573
  * @param {object} params -- breakout session group
@@ -567,6 +591,8 @@ const Breakouts = WebexPlugin.extend({
567
591
  });
568
592
 
569
593
  this._setManageGroups(breakoutInfo);
594
+ this._setMainGroupId(breakoutInfo);
595
+ this._setMainSessionId(breakoutInfo);
570
596
 
571
597
  // clear edit lock info after save breakout session info
572
598
  this._clearEditLockInfo();
@@ -630,6 +656,8 @@ const Breakouts = WebexPlugin.extend({
630
656
  });
631
657
 
632
658
  this._setManageGroups(breakoutInfo);
659
+ this._setMainGroupId(breakoutInfo);
660
+ this._setMainSessionId(breakoutInfo);
633
661
 
634
662
  return breakoutInfo;
635
663
  },
@@ -665,6 +693,8 @@ const Breakouts = WebexPlugin.extend({
665
693
  });
666
694
 
667
695
  this._setManageGroups(breakoutInfo);
696
+ this._setMainGroupId(breakoutInfo);
697
+ this._setMainSessionId(breakoutInfo);
668
698
 
669
699
  return breakoutInfo;
670
700
  },
@@ -718,6 +748,9 @@ const Breakouts = WebexPlugin.extend({
718
748
  });
719
749
 
720
750
  this._setManageGroups(breakout);
751
+ this._setMainGroupId(breakout);
752
+ this._setMainSessionId(breakout);
753
+
721
754
  if (editlock && breakout.body?.editlock?.token) {
722
755
  this.set('editLock', breakout.body.editlock);
723
756
  this.keepEditLockAlive();
@@ -916,6 +949,42 @@ const Breakouts = WebexPlugin.extend({
916
949
  body,
917
950
  });
918
951
  },
952
+ /**
953
+ * Move participants to main session lobby
954
+ * @param {Array} sessions
955
+ * @param {string} sessions[].participants - Participant IDs to move
956
+ * @returns {void}
957
+ */
958
+ moveToLobby(sessions: Array<{participants: string[]}>) {
959
+ if (!this.mainGroupId || !this.mainSessionId) {
960
+ throw new Error(
961
+ 'Main group ID and session ID must be available to move participants to lobby'
962
+ );
963
+ }
964
+
965
+ const updatedSessions = sessions.map((item) => {
966
+ return {
967
+ id: this.mainSessionId,
968
+ participants: item.participants,
969
+ targetState: 'LOBBY',
970
+ };
971
+ });
972
+
973
+ const body = {
974
+ groups: [
975
+ {
976
+ id: this.mainGroupId,
977
+ sessions: updatedSessions,
978
+ },
979
+ ],
980
+ };
981
+
982
+ return this.request({
983
+ method: HTTP_VERBS.PUT,
984
+ uri: `${this.url}/dynamicAssign`,
985
+ body,
986
+ });
987
+ },
919
988
  /**
920
989
  * trigger ASK_RETURN_TO_MAIN event when main session requested
921
990
  * @param {Object} breakout
@@ -152,12 +152,19 @@ WebExMeetingsErrors[IceGatheringFailed.CODE] = IceGatheringFailed;
152
152
  * @extends WebexMeetingsError
153
153
  * @property {number} code - 30203
154
154
  * @property {string} message - 'Failed to add media'
155
+ * @property {Error} [cause] - The underlying error that caused the failure
155
156
  */
156
157
  class AddMediaFailed extends WebexMeetingsError {
157
158
  static CODE = 30203;
159
+ cause?: Error;
158
160
 
159
- constructor() {
161
+ /**
162
+ * Creates a new AddMediaFailed error
163
+ * @param {Error} [cause] - The underlying error that caused the media addition to fail
164
+ */
165
+ constructor(cause?: Error) {
160
166
  super(AddMediaFailed.CODE, 'Failed to add media');
167
+ this.cause = cause;
161
168
  }
162
169
  }
163
170
  export {AddMediaFailed};
package/src/config.ts CHANGED
@@ -95,7 +95,10 @@ export default {
95
95
  // This only applies to non-multistream meetings
96
96
  iceCandidatesGatheringTimeout: undefined,
97
97
  backendIpv6NativeSupport: false,
98
+ enableReachabilityChecks: true,
98
99
  reachabilityGetClusterTimeout: 5000,
99
100
  logUploadIntervalMultiplicationFactor: 0, // if set to 0 or undefined, logs won't be uploaded periodically, if you want periodic logs, recommended value is 1
101
+ stopIceGatheringAfterFirstRelayCandidate: false,
102
+ enableAudioTwccForMultistream: false,
100
103
  },
101
104
  };
package/src/constants.ts CHANGED
@@ -369,6 +369,9 @@ export const EVENT_TRIGGERS = {
369
369
  MEETING_CONTROLS_MEETING_FULL_UPDATED: 'meeting:controls:meeting-full:updated',
370
370
  MEETING_CONTROLS_PRACTICE_SESSION_STATUS_UPDATED:
371
371
  'meeting:controls:practice-session-status:updated',
372
+ MEETING_CONTROLS_ANNOTATION_UPDATED: 'meeting:controls:annotation:updated',
373
+ MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED:
374
+ 'meeting:controls:remote-desktop-control:updated',
372
375
  // Locus URL changed
373
376
  MEETING_LOCUS_URL_UPDATE: 'meeting:locus:locusUrl:update',
374
377
  MEETING_STREAM_PUBLISH_STATE_CHANGED: 'meeting:streamPublishStateChanged',
@@ -378,6 +381,7 @@ export const EVENT_TRIGGERS = {
378
381
  MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',
379
382
  MEETING_MANUAL_CAPTION_UPDATED: 'meeting:manualCaptionControl:updated',
380
383
  MEETING_CAPTION_RECEIVED: 'meeting:caption-received',
384
+ MEETING_PARTICIPANT_REASON_CHANGED: 'meeting:participant-reason-changed',
381
385
  };
382
386
 
383
387
  export const EVENT_TYPES = {
@@ -711,6 +715,8 @@ export const LOCUSINFO = {
711
715
  CONTROLS_PRACTICE_SESSION_STATUS_UPDATED: 'CONTROLS_PRACTICE_SESSION_STATUS_UPDATED',
712
716
  CONTROLS_VIDEO_CHANGED: 'CONTROLS_VIDEO_CHANGED',
713
717
  CONTROLS_STAGE_VIEW_UPDATED: 'CONTROLS_STAGE_VIEW_UPDATED',
718
+ CONTROLS_ANNOTATION_CHANGED: 'CONTROLS_ANNOTATION_CHANGED',
719
+ CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED: 'CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED',
714
720
  SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',
715
721
  SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',
716
722
  SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: 'SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED',
@@ -738,6 +744,7 @@ export const LOCUSINFO = {
738
744
  MEDIA_INACTIVITY: 'MEDIA_INACTIVITY',
739
745
  LINKS_SERVICES: 'LINKS_SERVICES',
740
746
  LINKS_RESOURCES: 'LINKS_RESOURCES',
747
+ PARTICIPANT_REASON_CHANGED: 'PARTICIPANT_REASON_CHANGED',
741
748
  },
742
749
  };
743
750
 
@@ -906,6 +913,7 @@ export enum SELF_POLICY {
906
913
  SUPPORT_NETWORK_BASED_RECORD = 'supportNetworkBasedRecord',
907
914
  SUPPORT_PREMISE_RECORD = 'supportPremiseRecord',
908
915
  SUPPORT_REALTIME_CLOSE_CAPTION = 'supportRealtimeCloseCaption',
916
+ SUPPORT_REALTIME_CLOSE_CAPTION_MANUAL = 'supportRealtimeCloseCaptionManual',
909
917
  SUPPORT_CHAT = 'supportChat',
910
918
  SUPPORT_DESKTOP_SHARE_REMOTE = 'supportDesktopShareRemote',
911
919
  SUPPORT_DESKTOP_SHARE = 'supportDesktopShare',
@@ -973,6 +981,7 @@ export const DISPLAY_HINTS = {
973
981
  PRESENTER_CONTROL: 'PRESENTER_CONTROL',
974
982
  CAN_RENAME_SELF_AND_OBSERVED: 'CAN_RENAME_SELF_AND_OBSERVED',
975
983
  CAN_RENAME_OTHERS: 'CAN_RENAME_OTHERS',
984
+ MOVE_TO_LOBBY: 'MOVE_TO_LOBBY',
976
985
 
977
986
  // breakout session
978
987
  BREAKOUT_MANAGEMENT: 'BREAKOUT_MANAGEMENT',
@@ -1026,6 +1035,17 @@ export const DISPLAY_HINTS = {
1026
1035
  PRACTICE_SESSION_OFF: 'PRACTICE_SESSION_OFF',
1027
1036
  SHOW_PRACTICE_SESSION_START: 'SHOW_PRACTICE_SESSION_START',
1028
1037
  SHOW_PRACTICE_SESSION_STOP: 'SHOW_PRACTICE_SESSION_STOP',
1038
+
1039
+ // Explicit consent for post meeting data
1040
+ SHOW_POST_MEETING_DATA_CONSENT_PROMPT: 'SHOW_POST_MEETING_DATA_CONSENT_PROMPT',
1041
+
1042
+ // Annotations
1043
+ ENABLE_ANNOTATION_MEETING_OPTION: 'ENABLE_ANNOTATION_MEETING_OPTION',
1044
+ DISABLE_ANNOTATION_MEETING_OPTION: 'DISABLE_ANNOTATION_MEETING_OPTION',
1045
+
1046
+ // Remote Desktop Control
1047
+ ENABLE_RDC_MEETING_OPTION: 'ENABLE_RDC_MEETING_OPTION',
1048
+ DISABLE_RDC_MEETING_OPTION: 'DISABLE_RDC_MEETING_OPTION',
1029
1049
  };
1030
1050
 
1031
1051
  export const INTERSTITIAL_DISPLAY_HINTS = [DISPLAY_HINTS.VOIP_IS_ENABLED];
@@ -1150,96 +1170,6 @@ export const NETWORK_STATUS = {
1150
1170
 
1151
1171
  export type NETWORK_STATUS = Enum<typeof NETWORK_STATUS>;
1152
1172
 
1153
- export const NETWORK_TYPE = {
1154
- VPN: 'vpn',
1155
- UNKNOWN: 'unknown',
1156
- WIFI: 'wifi',
1157
- ETHERNET: 'ethernet',
1158
- };
1159
-
1160
- export const STATS = {
1161
- SEND_DIRECTION: 'send',
1162
- RECEIVE_DIRECTION: 'recv',
1163
- REMOTE: 'remote',
1164
- LOCAL: 'local',
1165
- };
1166
-
1167
- export const MQA_STATS = {
1168
- MQA_SIZE: 120, // MQA is done on 60 second intervals by server def, add a buffer for missed events
1169
- CA_TYPE: 'MQA',
1170
- DEFAULT_IP: '0.0.0.0',
1171
- DEFAULT_SHARE_SENDER_STATS: {
1172
- common: {
1173
- common: {
1174
- direction: 'sendrecv', // TODO: parse from SDP and save globally
1175
- isMain: false, // always true for share sender
1176
- mariFecEnabled: false, // unavailable
1177
- mariRtxEnabled: false, // unavailable
1178
- mariLiteEnabled: false, // unavailable
1179
- mariQosEnabled: false, // unavailable
1180
- multistreamEnabled: false, // unavailable
1181
- },
1182
- availableBitrate: 0,
1183
- dtlsBitrate: 0, // unavailable
1184
- dtlsPackets: 0, // unavailable
1185
- fecBitrate: 0, // unavailable
1186
- fecPackets: 0, // unavailable
1187
- maxBitrate: 0, // unavailable
1188
- queueDelay: 0, // unavailable
1189
- remoteJitter: 0, // unavailable
1190
- remoteLossRate: 0,
1191
- roundTripTime: 0,
1192
- rtcpBitrate: 0, // unavailable
1193
- rtcpPackets: 0, // unavailable
1194
- rtpBitrate: 0, // unavailable
1195
- rtpPackets: 0,
1196
- stunBitrate: 0, // unavailable
1197
- stunPackets: 0, // unavailable
1198
- transportType: 'UDP', // TODO: parse the transport type from the SDP and save globally
1199
- },
1200
- streams: [
1201
- {
1202
- common: {
1203
- codec: 'H264', // TODO: parse the codec from the SDP and save globally
1204
- duplicateSsci: 0, // unavailable
1205
- requestedBitrate: 0, // unavailable
1206
- requestedFrames: 0, // unavailable
1207
- rtpPackets: 0,
1208
- ssci: 0, // unavailable
1209
- transmittedBitrate: 0,
1210
- transmittedFrameRate: 0,
1211
- },
1212
- h264CodecProfile: 'BP', // TODO: parse the profile level from h264 in the SDP and save globally
1213
- localConfigurationChanges: 0, // unavailable
1214
- remoteConfigurationChanges: 0, // unavailable
1215
- requestedFrameSize: 0, // unavailable
1216
- requestedKeyFrames: 0, // unavailable
1217
- transmittedFrameSize: 0, // unavailable
1218
- transmittedHeight: 0,
1219
- transmittedKeyFrames: 0,
1220
- transmittedWidth: 0,
1221
- },
1222
- ],
1223
- },
1224
- intervalMetadata: {
1225
- memoryUsage: {
1226
- cpuBitWidth: 0,
1227
- mainProcessMaximumMemoryBytes: 0,
1228
- osBitWidth: 0,
1229
- processAverageMemoryUsage: 0,
1230
- processMaximumMemoryBytes: 0,
1231
- processMaximumMemoryUsage: 0,
1232
- systemAverageMemoryUsage: 0,
1233
- systemMaximumMemoryUsage: 0,
1234
- },
1235
- peerReflexiveIP: 'NULL', // TODO: save after ice trickling completes and use as a global variable
1236
- processAverageCPU: 0,
1237
- processMaximumCPU: 0,
1238
- systemAverageCPU: 0,
1239
- systemMaximumCPU: 0,
1240
- },
1241
- };
1242
-
1243
1173
  // ****** MEDIA QUALITY CONSTANTS ****** //
1244
1174
 
1245
1175
  // these values must match allowed values of RemoteQualityLevel from the @webex/internal-media-core lib
@@ -12,6 +12,8 @@ enum Control {
12
12
  shareControl = 'shareControl',
13
13
  video = 'video',
14
14
  viewTheParticipantList = 'viewTheParticipantList',
15
+ annotation = 'annotation',
16
+ rdc = 'rdc',
15
17
  }
16
18
 
17
19
  export {Control, Setting};
@@ -40,13 +40,23 @@ export interface ViewTheParticipantListProperties {
40
40
  attendeeCount?: boolean;
41
41
  }
42
42
 
43
+ export interface AnnotationProperties {
44
+ enabled?: boolean;
45
+ }
46
+
47
+ export interface RemoteDesktopControlProperties {
48
+ enabled?: boolean;
49
+ }
50
+
43
51
  export type Properties =
44
52
  | AudioProperties
45
53
  | RaiseHandProperties
46
54
  | ReactionsProperties
47
55
  | ShareControlProperties
48
56
  | VideoProperties
49
- | ViewTheParticipantListProperties;
57
+ | ViewTheParticipantListProperties
58
+ | AnnotationProperties
59
+ | RemoteDesktopControlProperties;
50
60
 
51
61
  export interface ControlConfig<Props = Properties> {
52
62
  /**