@webex/plugin-meetings 3.12.0-mobius-socket.2 → 3.12.0-mobius-socket.4
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/AGENTS.md +9 -0
- package/dist/aiEnableRequest/index.js +15 -2
- package/dist/aiEnableRequest/index.js.map +1 -1
- package/dist/breakouts/breakout.js +8 -3
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/index.js +3 -2
- package/dist/breakouts/index.js.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +6 -3
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +11 -1
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/index.js +38 -24
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/util.js +91 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/hashTree/constants.js +10 -1
- package/dist/hashTree/constants.js.map +1 -1
- package/dist/hashTree/hashTreeParser.js +651 -382
- package/dist/hashTree/hashTreeParser.js.map +1 -1
- package/dist/hashTree/utils.js +22 -0
- package/dist/hashTree/utils.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/interceptors/locusRetry.js +23 -8
- package/dist/interceptors/locusRetry.js.map +1 -1
- package/dist/interpretation/index.js +10 -1
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +4 -1
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +289 -87
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/types.js +19 -0
- package/dist/locus-info/types.js.map +1 -1
- package/dist/media/properties.js +1 -0
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +3 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +848 -582
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +19 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +205 -77
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +6 -1
- package/dist/meetings/meetings.types.js.map +1 -1
- package/dist/meetings/request.js +39 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +67 -5
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +10 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js +3 -0
- package/dist/member/util.js.map +1 -1
- package/dist/metrics/constants.js +4 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/receiveSlot.js +9 -0
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/recording-controller/index.js +1 -3
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/types/config.d.ts +1 -0
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/controls-options-manager/constants.d.ts +6 -1
- package/dist/types/controls-options-manager/index.d.ts +10 -0
- package/dist/types/hashTree/constants.d.ts +1 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +83 -16
- package/dist/types/hashTree/utils.d.ts +11 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/interceptors/locusRetry.d.ts +4 -4
- package/dist/types/locus-info/index.d.ts +46 -6
- package/dist/types/locus-info/types.d.ts +21 -1
- package/dist/types/media/properties.d.ts +1 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
- package/dist/types/meeting/index.d.ts +65 -1
- package/dist/types/meeting/util.d.ts +8 -0
- package/dist/types/meetings/index.d.ts +20 -2
- package/dist/types/meetings/meetings.types.d.ts +15 -0
- package/dist/types/meetings/request.d.ts +14 -0
- package/dist/types/member/index.d.ts +1 -0
- package/dist/types/member/types.d.ts +1 -0
- package/dist/types/member/util.d.ts +1 -0
- package/dist/types/metrics/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.type.d.ts +3 -0
- package/dist/webinar/index.js +68 -17
- package/dist/webinar/index.js.map +1 -1
- package/package.json +22 -22
- package/src/aiEnableRequest/index.ts +16 -0
- package/src/breakouts/breakout.ts +3 -1
- package/src/breakouts/index.ts +1 -0
- package/src/config.ts +1 -0
- package/src/constants.ts +5 -1
- package/src/controls-options-manager/constants.ts +14 -1
- package/src/controls-options-manager/index.ts +47 -24
- package/src/controls-options-manager/util.ts +81 -1
- package/src/hashTree/constants.ts +9 -0
- package/src/hashTree/hashTreeParser.ts +375 -197
- package/src/hashTree/utils.ts +17 -0
- package/src/index.ts +5 -0
- package/src/interceptors/locusRetry.ts +25 -4
- package/src/interpretation/index.ts +25 -8
- package/src/locus-info/controlsUtils.ts +3 -1
- package/src/locus-info/index.ts +291 -97
- package/src/locus-info/types.ts +25 -1
- package/src/media/properties.ts +1 -0
- package/src/meeting/in-meeting-actions.ts +4 -0
- package/src/meeting/index.ts +260 -23
- package/src/meeting/util.ts +20 -2
- package/src/meetings/index.ts +109 -43
- package/src/meetings/meetings.types.ts +19 -0
- package/src/meetings/request.ts +43 -0
- package/src/meetings/util.ts +80 -1
- package/src/member/index.ts +10 -0
- package/src/member/types.ts +1 -0
- package/src/member/util.ts +3 -0
- package/src/metrics/constants.ts +3 -0
- package/src/multistream/receiveSlot.ts +18 -0
- package/src/reactions/reactions.type.ts +3 -0
- package/src/recording-controller/index.ts +1 -2
- package/src/webinar/index.ts +88 -21
- package/test/unit/spec/aiEnableRequest/index.ts +86 -0
- package/test/unit/spec/breakouts/breakout.ts +9 -3
- package/test/unit/spec/breakouts/index.ts +2 -0
- package/test/unit/spec/controls-options-manager/index.js +140 -29
- package/test/unit/spec/controls-options-manager/util.js +165 -0
- package/test/unit/spec/hashTree/hashTreeParser.ts +1263 -157
- package/test/unit/spec/hashTree/utils.ts +88 -1
- package/test/unit/spec/interceptors/locusRetry.ts +205 -4
- package/test/unit/spec/interpretation/index.ts +26 -4
- package/test/unit/spec/locus-info/controlsUtils.js +172 -57
- package/test/unit/spec/locus-info/index.js +475 -81
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
- package/test/unit/spec/meeting/index.js +902 -14
- package/test/unit/spec/meeting/muteState.js +3 -0
- package/test/unit/spec/meeting/utils.js +33 -0
- package/test/unit/spec/meetings/index.js +309 -10
- package/test/unit/spec/meetings/request.js +141 -0
- package/test/unit/spec/meetings/utils.js +161 -0
- package/test/unit/spec/member/index.js +7 -0
- package/test/unit/spec/member/util.js +24 -0
- package/test/unit/spec/recording-controller/index.js +9 -8
- package/test/unit/spec/webinar/index.ts +81 -16
|
@@ -20,3 +20,14 @@ export declare function isMetadata(object: HashTreeObject): boolean;
|
|
|
20
20
|
* @returns {void}
|
|
21
21
|
*/
|
|
22
22
|
export declare const deleteNestedObjectsWithHtMeta: (currentLocusPart: any, parent?: any, currentKey?: string | number) => void;
|
|
23
|
+
/**
|
|
24
|
+
* Reorders items so that those matching the given priority list come first (in priority order),
|
|
25
|
+
* followed by everything else in their original order.
|
|
26
|
+
*
|
|
27
|
+
* @param {Array<T>} items - The items to reorder
|
|
28
|
+
* @param {string[]} priority - Ordered list of names that should come first
|
|
29
|
+
* @returns {Array<T>} A new array with prioritized items first
|
|
30
|
+
*/
|
|
31
|
+
export declare function sortByInitPriority<T extends {
|
|
32
|
+
name: string;
|
|
33
|
+
}>(items: T[], priority: string[]): T[];
|
package/dist/types/index.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export * as REACTIONS from './reactions/reactions';
|
|
|
16
16
|
export * as sdkAnnotationTypes from './annotation/annotation.types';
|
|
17
17
|
export * as MeetingInfoV2 from './meeting-info/meeting-info-v2';
|
|
18
18
|
export { type Reaction } from './reactions/reactions.type';
|
|
19
|
+
export { SitePreferenceSelectOption } from './meetings/meetings.types';
|
|
20
|
+
export type { FetchSitePreferencesMeViaSiteOptions, SitePreferencesResponse, } from './meetings/meetings.types';
|
|
19
21
|
export { CaptchaError, IntentToJoinError, JoinMeetingError, PasswordError, PermissionError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError, ReclaimHostEmptyWrongKeyError, Meeting, MeetingInfoUtil, JoinWebinarError, SdpResponseTimeoutError, };
|
|
20
22
|
export { RemoteMedia } from './multistream/remoteMedia';
|
|
21
23
|
export { default as TriggerProxy } from './common/events/trigger-proxy';
|
|
@@ -11,11 +11,11 @@ export default class LocusRetryStatusInterceptor extends Interceptor {
|
|
|
11
11
|
*/
|
|
12
12
|
static create(): LocusRetryStatusInterceptor;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
* @param {
|
|
16
|
-
* @
|
|
17
|
-
* @returns {Promise<WebexHttpError>}
|
|
14
|
+
* Check whether a URI is a Locus /hashtree or /sync endpoint.
|
|
15
|
+
* @param {string} uri
|
|
16
|
+
* @returns {boolean}
|
|
18
17
|
*/
|
|
18
|
+
private static isLocusHashtreeOrSync;
|
|
19
19
|
onResponseError(options: any, reason: any): Promise<unknown>;
|
|
20
20
|
/**
|
|
21
21
|
* Handle retries for locus service unavailable errors
|
|
@@ -25,10 +25,9 @@ export type HashTreeParserEntry = {
|
|
|
25
25
|
*
|
|
26
26
|
* @param {HashTreeMessage} message - The hash tree message to find the meeting for
|
|
27
27
|
* @param {MeetingCollection} meetingCollection - The collection of meetings to search
|
|
28
|
-
* @param {string} deviceUrl - The URL of the user's device
|
|
29
28
|
* @returns {any} The meeting if found, otherwise undefined
|
|
30
29
|
*/
|
|
31
|
-
export declare function findMeetingForHashTreeMessage(message: HashTreeMessage, meetingCollection: MeetingCollection
|
|
30
|
+
export declare function findMeetingForHashTreeMessage(message: HashTreeMessage | undefined, meetingCollection: MeetingCollection): any;
|
|
32
31
|
/**
|
|
33
32
|
* Creates a locus object from the objects received in a hash tree message. It usually will be
|
|
34
33
|
* incomplete, because hash tree messages only contain the parts of locus that have changed,
|
|
@@ -130,6 +129,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
130
129
|
private createHashTreeParser;
|
|
131
130
|
/**
|
|
132
131
|
* @param {Object} data - data to initialize locus info with. It may be from a join or GET /loci response or from a Mercury event that triggers a creation of meeting object
|
|
132
|
+
* @param {Function} [onLocusSynced] - optional callback that will be called at the end of initial setup, when locus info is fully synced. It will be called with the full locus snapshot as an argument (which may be null if we haven't received any full locus DTOs during the initial setup, for example in case we receive only hash tree messages without full locus DTOs)
|
|
133
133
|
* @returns {undefined}
|
|
134
134
|
* @memberof LocusInfo
|
|
135
135
|
*/
|
|
@@ -145,7 +145,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
145
145
|
} | {
|
|
146
146
|
trigger: 'get-loci-response';
|
|
147
147
|
locus?: LocusDTO;
|
|
148
|
-
}): Promise<void>;
|
|
148
|
+
}, onLocusSynced?: (locus: LocusDTO) => void): Promise<void>;
|
|
149
|
+
/**
|
|
150
|
+
* Builds a full locus DTO snapshot from current internal locus state.
|
|
151
|
+
*
|
|
152
|
+
* @returns {LocusDTO}
|
|
153
|
+
*/
|
|
154
|
+
private getCurrentLocusSnapshot;
|
|
149
155
|
/**
|
|
150
156
|
* Handles HTTP response from Locus API call.
|
|
151
157
|
* @param {Meeting} meeting meeting object
|
|
@@ -167,6 +173,28 @@ export default class LocusInfo extends EventsScope {
|
|
|
167
173
|
* @returns {void}
|
|
168
174
|
*/
|
|
169
175
|
sendClassicVsHashTreeMismatchMetric(meeting: any, message: string): void;
|
|
176
|
+
/**
|
|
177
|
+
* Helper that handles the common logic for reactivating a stopped HashTreeParser when
|
|
178
|
+
* a newer "replaces" is detected. Used by both the message and API response parser switch methods.
|
|
179
|
+
*
|
|
180
|
+
* @param {string} callerName - name of the calling method, used in log messages
|
|
181
|
+
* @param {string} locusUrl - the locus URL of the stopped parser
|
|
182
|
+
* @param {HashTreeParserEntry} stoppedEntry - the stopped parser entry
|
|
183
|
+
* @param {ReplacesInfo} replaces - replacement info extracted from self
|
|
184
|
+
* @param {Function} resumeCallback - callback to invoke after reactivation to resume the parser
|
|
185
|
+
* @returns {void}
|
|
186
|
+
*/
|
|
187
|
+
private resumeStoppedParser;
|
|
188
|
+
/**
|
|
189
|
+
* Handles an API response whose locusUrl doesn't match any active HashTreeParser
|
|
190
|
+
* (either no entry exists, or the existing entry is stopped).
|
|
191
|
+
* Creates a new parser or reactivates a stopped one using initializeFromGetLociResponse.
|
|
192
|
+
*
|
|
193
|
+
* @param {string} locusUrl - the locus URL from the API response
|
|
194
|
+
* @param {LocusDTO} locus - the locus DTO from the API response
|
|
195
|
+
* @returns {void}
|
|
196
|
+
*/
|
|
197
|
+
private handleHashTreeParserSwitchForAPIResponse;
|
|
170
198
|
/**
|
|
171
199
|
* Checks if the hash tree message should trigger a switch to a different HashTreeParser
|
|
172
200
|
*
|
|
@@ -183,13 +211,19 @@ export default class LocusInfo extends EventsScope {
|
|
|
183
211
|
* @returns {void}
|
|
184
212
|
*/
|
|
185
213
|
private handleHashTreeMessage;
|
|
214
|
+
/**
|
|
215
|
+
* Triggers a sync of all hash tree datasets for all hash tree parsers associated with this meeting.
|
|
216
|
+
* The syncs are executed sequentially within each parser.
|
|
217
|
+
*
|
|
218
|
+
* @returns {Promise<void>}
|
|
219
|
+
*/
|
|
220
|
+
syncAllHashTreeDatasets(): Promise<void>;
|
|
186
221
|
/**
|
|
187
222
|
* Callback registered with HashTreeParser to receive locus info updates.
|
|
188
223
|
* Updates our locus info based on the data parsed by the hash tree parser.
|
|
189
224
|
*
|
|
190
225
|
* @param {string} locusUrl - the locus URL for which the update is received
|
|
191
|
-
* @param {
|
|
192
|
-
* @param {Object} [data] - Additional data for the update, if applicable.
|
|
226
|
+
* @param {LocusInfoUpdate} update - Details about the update.
|
|
193
227
|
* @returns {void}
|
|
194
228
|
*/
|
|
195
229
|
private updateFromHashTree;
|
|
@@ -214,8 +248,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
214
248
|
* @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes
|
|
215
249
|
* @param {object} locus locus object
|
|
216
250
|
* @param {object} metadata locus hash trees metadata
|
|
217
|
-
* @param {string} eventType locus event
|
|
218
251
|
* @param {DataSet[]} dataSets
|
|
252
|
+
* @param {string} eventType locus event
|
|
219
253
|
* @returns {void}
|
|
220
254
|
*/
|
|
221
255
|
private onFullLocusWithHashTrees;
|
|
@@ -444,4 +478,10 @@ export default class LocusInfo extends EventsScope {
|
|
|
444
478
|
* @memberof LocusInfo
|
|
445
479
|
*/
|
|
446
480
|
clearMainSessionLocusCache(): void;
|
|
481
|
+
/**
|
|
482
|
+
* Cleans up all hash tree parsers and clears internal maps.
|
|
483
|
+
* @returns {void}
|
|
484
|
+
* @memberof LocusInfo
|
|
485
|
+
*/
|
|
486
|
+
cleanUp(): void;
|
|
447
487
|
}
|
|
@@ -1,14 +1,30 @@
|
|
|
1
|
+
import { Enum } from '../constants';
|
|
1
2
|
import { HtMeta } from '../hashTree/types';
|
|
3
|
+
export declare const EndMeetingReason: {
|
|
4
|
+
readonly maxMeetingDuration: "MAX_MEETING_DURATION";
|
|
5
|
+
readonly allParticipantsLeft: "ALL_PARTICIPANTS_LEFT";
|
|
6
|
+
readonly sipHostLeft: "SIP_HOST_LEFT";
|
|
7
|
+
readonly noHost: "NO_HOST";
|
|
8
|
+
readonly waitingForMpsEndMeetingTimeout: "WAITING_FOR_MPS_END_MEETING_TIMEOUT";
|
|
9
|
+
readonly fraudDetection: "FRAUD_DETECTION";
|
|
10
|
+
readonly meetingEndedByHost: "MEETING_ENDED_BY_HOST";
|
|
11
|
+
readonly meetingUpdated: "MEETING_UPDATED";
|
|
12
|
+
readonly meetingCancelled: "MEETING_CANCELLED";
|
|
13
|
+
readonly autoEndWithSingleParticipant: "AUTO_END_WITH_SINGLE_PARTICIPANT";
|
|
14
|
+
readonly breakoutEnded: "BREAKOUT_ENDED";
|
|
15
|
+
};
|
|
16
|
+
export type EndMeetingReason = Enum<typeof EndMeetingReason>;
|
|
2
17
|
export type LocusFullState = {
|
|
3
18
|
active: boolean;
|
|
4
19
|
count: number;
|
|
5
20
|
lastActive: string;
|
|
6
21
|
locked: boolean;
|
|
7
22
|
sessionId: string;
|
|
8
|
-
|
|
23
|
+
sessionIds: string[];
|
|
9
24
|
startTime: number;
|
|
10
25
|
state: string;
|
|
11
26
|
type: string;
|
|
27
|
+
endMeetingReason?: EndMeetingReason;
|
|
12
28
|
};
|
|
13
29
|
export type Links = {
|
|
14
30
|
services: Record<'breakout' | 'record', {
|
|
@@ -59,3 +75,7 @@ export type ReplacesInfo = {
|
|
|
59
75
|
replacedAt: string;
|
|
60
76
|
sessionId: string;
|
|
61
77
|
};
|
|
78
|
+
export declare const LocusErrorCodes: {
|
|
79
|
+
readonly LOCUS_INACTIVE: 2403004;
|
|
80
|
+
};
|
|
81
|
+
export type LocusErrorCodes = Enum<typeof LocusErrorCodes>;
|
|
@@ -115,6 +115,7 @@ interface IInMeetingActions {
|
|
|
115
115
|
canDisablePollingQA?: boolean;
|
|
116
116
|
canAttendeeRequestAiAssistantEnabled?: boolean;
|
|
117
117
|
isAttendeeRequestAiAssistantDeclinedAll?: boolean;
|
|
118
|
+
isAnonymizeDisplayNamesEnabled?: boolean;
|
|
118
119
|
}
|
|
119
120
|
/**
|
|
120
121
|
* @class InMeetingActions
|
|
@@ -230,6 +231,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
230
231
|
canDisablePollingQA: any;
|
|
231
232
|
canAttendeeRequestAiAssistantEnabled: any;
|
|
232
233
|
isAttendeeRequestAiAssistantDeclinedAll: any;
|
|
234
|
+
isAnonymizeDisplayNamesEnabled: any;
|
|
233
235
|
/**
|
|
234
236
|
* Returns all meeting action options
|
|
235
237
|
* @returns {Object}
|
|
@@ -374,7 +374,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
374
374
|
webinar: any;
|
|
375
375
|
conversationUrl: string;
|
|
376
376
|
callStateForMetrics: CallStateForMetrics;
|
|
377
|
-
destination: string;
|
|
377
|
+
destination: string | LocusDTO;
|
|
378
378
|
destinationType: DESTINATION_TYPE;
|
|
379
379
|
deviceUrl: string;
|
|
380
380
|
hostId: string;
|
|
@@ -412,6 +412,8 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
412
412
|
floorGrantPending: boolean;
|
|
413
413
|
hasJoinedOnce: boolean;
|
|
414
414
|
hasWebsocketConnected: boolean;
|
|
415
|
+
private mercuryOnlineHandler?;
|
|
416
|
+
private mercuryOfflineHandler?;
|
|
415
417
|
inMeetingActions: InMeetingActions;
|
|
416
418
|
isLocalShareLive: boolean;
|
|
417
419
|
isRoapInProgress: boolean;
|
|
@@ -1051,6 +1053,13 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1051
1053
|
* @memberof Meeting
|
|
1052
1054
|
*/
|
|
1053
1055
|
setSipUri(sipUri: string): void;
|
|
1056
|
+
/**
|
|
1057
|
+
* After initial locus setup, refreshes destination with synced locus data and optionally
|
|
1058
|
+
* performs deferred meeting info fetch when initial locus was incomplete.
|
|
1059
|
+
* @param {LocusDTO} locus
|
|
1060
|
+
* @returns {void}
|
|
1061
|
+
*/
|
|
1062
|
+
finalizeMeetingAfterInitialLocusSetup(locus: LocusDTO): Promise<void>;
|
|
1054
1063
|
/**
|
|
1055
1064
|
* Set the locus info the class instance. Should be called with the parsed locus
|
|
1056
1065
|
* we got in the join response.
|
|
@@ -1163,6 +1172,22 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1163
1172
|
* @memberof Meeting
|
|
1164
1173
|
*/
|
|
1165
1174
|
setMercuryListener(): void;
|
|
1175
|
+
/**
|
|
1176
|
+
* Removes this meeting's Mercury ONLINE/OFFLINE event listeners registered
|
|
1177
|
+
* by setMercuryListener(). Must be called before Locus /leave to avoid
|
|
1178
|
+
* unnecessary syncs/metrics triggered by events received while leaving
|
|
1179
|
+
* (per Locus team recommendation).
|
|
1180
|
+
*
|
|
1181
|
+
* Mercury is a process-wide singleton shared with other plugins, so we
|
|
1182
|
+
* pass the bound handler refs to .off() to avoid clearing every listener
|
|
1183
|
+
* for ONLINE/OFFLINE on the shared emitter.
|
|
1184
|
+
*
|
|
1185
|
+
* Idempotent: subsequent calls are no-ops because the handler refs are
|
|
1186
|
+
* cleared after detaching.
|
|
1187
|
+
* @private
|
|
1188
|
+
* @returns {void}
|
|
1189
|
+
*/
|
|
1190
|
+
private stopListeningForMercuryEvents;
|
|
1166
1191
|
/**
|
|
1167
1192
|
* Close the peer connections and remove them from the class.
|
|
1168
1193
|
* Cleanup any media connection related things.
|
|
@@ -1299,6 +1324,12 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1299
1324
|
* @returns {void}
|
|
1300
1325
|
*/
|
|
1301
1326
|
private processLocusLLMEvent;
|
|
1327
|
+
/**
|
|
1328
|
+
* Verifies the relay event was delivered for the active LLM session binding.
|
|
1329
|
+
* @param {RelayEvent} event Event object coming from LLM Connection
|
|
1330
|
+
* @returns {boolean}
|
|
1331
|
+
*/
|
|
1332
|
+
private isRelayEventRouteValid;
|
|
1302
1333
|
/**
|
|
1303
1334
|
* Callback called when a relay event is received from meeting LLM Connection
|
|
1304
1335
|
* @param {RelayEvent} e Event object coming from LLM Connection
|
|
@@ -1356,8 +1387,41 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1356
1387
|
* @returns {void}
|
|
1357
1388
|
*/
|
|
1358
1389
|
private clearLLMHealthCheckTimer;
|
|
1390
|
+
/**
|
|
1391
|
+
* Removes LLM event listeners and clears the health check timer.
|
|
1392
|
+
* Must be called before Locus /leave to avoid unnecessary syncs triggered
|
|
1393
|
+
* by events received while leaving (per Locus team recommendation).
|
|
1394
|
+
* Idempotent: safe to call multiple times; .off() is a no-op when no
|
|
1395
|
+
* matching listener is registered.
|
|
1396
|
+
* @private
|
|
1397
|
+
* @returns {void}
|
|
1398
|
+
*/
|
|
1399
|
+
private stopListeningForLLMEvents;
|
|
1400
|
+
/**
|
|
1401
|
+
* Stops listening on every event bus (LLM, Mercury, voicea/transcription,
|
|
1402
|
+
* annotation) that could otherwise deliver events to this meeting while
|
|
1403
|
+
* Locus is processing /leave or /end. Per the Locus team recommendation,
|
|
1404
|
+
* this must run before the Locus request is dispatched to avoid
|
|
1405
|
+
* unnecessary syncs triggered by in-flight events.
|
|
1406
|
+
*
|
|
1407
|
+
* Voicea (transcription) subscribes to llm 'event:relay.event' internally,
|
|
1408
|
+
* and the annotation plugin subscribes to both mercury and llm, so both
|
|
1409
|
+
* must be torn down alongside the direct LLM/Mercury listeners.
|
|
1410
|
+
*
|
|
1411
|
+
* Idempotent: safe to call multiple times; .off() is a no-op when no
|
|
1412
|
+
* matching listener is registered, and stopTranscription is guarded.
|
|
1413
|
+
* @private
|
|
1414
|
+
* @returns {void}
|
|
1415
|
+
*/
|
|
1416
|
+
private stopListeningForMeetingEvents;
|
|
1359
1417
|
/**
|
|
1360
1418
|
* Disconnects and cleans up the default LLM session listeners/timers.
|
|
1419
|
+
*
|
|
1420
|
+
* Ownership-aware: only calls `disconnectLLM` when this meeting is the
|
|
1421
|
+
* current owner of the default LLM session (or when no owner is recorded).
|
|
1422
|
+
* Event listeners belonging to this meeting instance are always detached
|
|
1423
|
+
* so they do not receive another meeting's relay events.
|
|
1424
|
+
*
|
|
1361
1425
|
* @param {Object} options
|
|
1362
1426
|
* @param {boolean} [options.removeOnlineListener=true] removes the one-time online listener
|
|
1363
1427
|
* @param {boolean} [options.throwOnError=true] rethrows disconnect errors when true
|
|
@@ -133,6 +133,13 @@ declare const MeetingUtil: {
|
|
|
133
133
|
* @returns {void}
|
|
134
134
|
*/
|
|
135
135
|
addSequence: (meeting: any, requestBody: any) => void;
|
|
136
|
+
/**
|
|
137
|
+
* Checks if Locus API response contains a Locus DTO
|
|
138
|
+
*
|
|
139
|
+
* @param {any} response http response from Locus API call
|
|
140
|
+
* @returns {boolean} true if response contains a Locus DTO
|
|
141
|
+
*/
|
|
142
|
+
isLocusDtoInAPIResponse(response: any): any;
|
|
136
143
|
/**
|
|
137
144
|
* Updates the locus info for the meeting with the locus
|
|
138
145
|
* information returned from API requests made to Locus
|
|
@@ -146,6 +153,7 @@ declare const MeetingUtil: {
|
|
|
146
153
|
generateLocusDeltaRequest: (originalMeeting: any) => (originalOptions: any) => any;
|
|
147
154
|
canAttendeeRequestAiAssistantEnabled: (displayHints?: any[], roles?: any[]) => boolean;
|
|
148
155
|
attendeeRequestAiAssistantDeclinedAll: (displayHints?: any[]) => boolean;
|
|
156
|
+
isAnonymizeDisplayNamesEnabled: (displayHints: any) => any;
|
|
149
157
|
selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record<SELF_POLICY, boolean>) => boolean;
|
|
150
158
|
parseInterpretationInfo: (meeting: any, meetingInfo: any) => void;
|
|
151
159
|
/**
|
|
@@ -8,7 +8,7 @@ import 'webrtc-adapter';
|
|
|
8
8
|
import { LOCUSEVENT, DESTINATION_TYPE } from '../constants';
|
|
9
9
|
import { CallStateForMetrics } from '../meeting';
|
|
10
10
|
import Reachability from '../reachability';
|
|
11
|
-
import { INoiseReductionEffect, IVirtualBackgroundEffect, MeetingRegistrationStatus } from './meetings.types';
|
|
11
|
+
import { FetchSitePreferencesMeViaSiteOptions, INoiseReductionEffect, IVirtualBackgroundEffect, MeetingRegistrationStatus, SitePreferencesResponse } from './meetings.types';
|
|
12
12
|
import { HashTreeMessage } from '../hashTree/hashTreeParser';
|
|
13
13
|
export type LocusEvent = {
|
|
14
14
|
eventType: LOCUSEVENT;
|
|
@@ -368,6 +368,23 @@ export default class Meetings extends WebexPlugin {
|
|
|
368
368
|
* @memberof Meetings
|
|
369
369
|
*/
|
|
370
370
|
getPersonalMeetingRoom(): any;
|
|
371
|
+
/**
|
|
372
|
+
* Fetches site preferences for the provided Webex site, or the preferred Webex site.
|
|
373
|
+
* This is used to determine capabilities of the site, such as whether scheduling a webinar is supported.
|
|
374
|
+
*
|
|
375
|
+
* @param {object} [options]
|
|
376
|
+
* @param {string} [options.siteUrl] - Webex site URL. Defaults to preferredWebexSite, for example "cisco.webex.com".
|
|
377
|
+
* @param {string} [options.siteName] - Site name query override. Defaults to the site name derived from siteUrl, for example "cisco" for "cisco.webex.com".
|
|
378
|
+
* @param {SitePreferenceSelectOption[]} [options.selectOptions] - Preference sections to fetch. Defaults to 'scheduling'.
|
|
379
|
+
* @returns {Promise<SitePreferencesResponse>} site preferences response body
|
|
380
|
+
* @throws {ParameterError}
|
|
381
|
+
* @public
|
|
382
|
+
* @memberof Meetings
|
|
383
|
+
* @example
|
|
384
|
+
* const preferences = await webex.meetings.fetchSitePreferencesMeViaSite();
|
|
385
|
+
* const supportScheduleWebinar = preferences?.scheduling?.supportScheduleWebinar;
|
|
386
|
+
*/
|
|
387
|
+
fetchSitePreferencesMeViaSite(options?: FetchSitePreferencesMeViaSiteOptions): Promise<SitePreferencesResponse>;
|
|
371
388
|
/**
|
|
372
389
|
* Returns basic information about a meeting that exists or
|
|
373
390
|
* used to exist in the MeetingCollection
|
|
@@ -477,8 +494,9 @@ export default class Meetings extends WebexPlugin {
|
|
|
477
494
|
* @public
|
|
478
495
|
* @memberof Meetings
|
|
479
496
|
*/
|
|
480
|
-
syncMeetings({ keepOnlyLocusMeetings }?: {
|
|
497
|
+
syncMeetings({ keepOnlyLocusMeetings, skipHashTreeSync, }?: {
|
|
481
498
|
keepOnlyLocusMeetings?: boolean;
|
|
499
|
+
skipHashTreeSync?: boolean;
|
|
482
500
|
}): Promise<void>;
|
|
483
501
|
/**
|
|
484
502
|
* sort out locus array for initial creating
|
|
@@ -19,3 +19,18 @@ export type MeetingRegistrationStatus = {
|
|
|
19
19
|
mercuryConnect: boolean;
|
|
20
20
|
checkH264Support: boolean;
|
|
21
21
|
};
|
|
22
|
+
export declare enum SitePreferenceSelectOption {
|
|
23
|
+
SCHEDULING = "scheduling"
|
|
24
|
+
}
|
|
25
|
+
export type FetchSitePreferencesMeViaSiteOptions = {
|
|
26
|
+
siteUrl?: string;
|
|
27
|
+
siteName?: string;
|
|
28
|
+
selectOptions?: SitePreferenceSelectOption[];
|
|
29
|
+
};
|
|
30
|
+
export declare const DEFAULT_SITE_PREFERENCE_SELECT_OPTIONS: SitePreferenceSelectOption[];
|
|
31
|
+
export type SitePreferencesResponse = {
|
|
32
|
+
scheduling?: {
|
|
33
|
+
supportScheduleWebinar?: boolean;
|
|
34
|
+
webinarWebLink?: string;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { StatelessWebexPlugin } from '@webex/webex-core';
|
|
2
|
+
import { type FetchSitePreferencesMeViaSiteOptions, type SitePreferencesResponse } from './meetings.types';
|
|
2
3
|
/**
|
|
3
4
|
* @class MeetingRequest
|
|
4
5
|
*/
|
|
@@ -18,6 +19,19 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
18
19
|
* @returns {Promise<object>} getMeetingPreferences
|
|
19
20
|
*/
|
|
20
21
|
getMeetingPreferences(): any;
|
|
22
|
+
/**
|
|
23
|
+
* Fetches site preferences from a given site given a select option and a siteUrl with an optional siteName. If siteName is not provided, it will be derived from the siteUrl. If siteUrl is not provided, it will throw an error. If selectOptions is not provided, it will default to scheduling.
|
|
24
|
+
*
|
|
25
|
+
* @param {object} [options]
|
|
26
|
+
* @param {string} [options.siteUrl] - Webex site URL, for example "cisco.webex.com".
|
|
27
|
+
* @param {string} [options.siteName] - Site name query override. Defaults to the site name derived from options.siteUrl, e.g., "cisco".
|
|
28
|
+
* @param {SitePreferenceSelectOption[]} [options.selectOptions] - Preference sections to fetch. Defaults to 'scheduling'.
|
|
29
|
+
* @returns {Promise<SitePreferencesResponse>} site preferences response body
|
|
30
|
+
* @throws {ParameterError}
|
|
31
|
+
* @public
|
|
32
|
+
* @memberof MeetingRequest
|
|
33
|
+
*/
|
|
34
|
+
fetchSitePreferencesMeViaSite(options?: FetchSitePreferencesMeViaSiteOptions): Promise<SitePreferencesResponse>;
|
|
21
35
|
/**
|
|
22
36
|
* Fetches indivdual locus rather then getting all at once
|
|
23
37
|
* @param {object} responseBody determine the locus and fetch them if a remoteUrl is given
|
|
@@ -66,6 +66,7 @@ declare const MemberUtil: {
|
|
|
66
66
|
isDevice: (participant: Participant) => boolean;
|
|
67
67
|
isModeratorAssignmentProhibited: (participant: Participant) => boolean;
|
|
68
68
|
isPresenterAssignmentProhibited: (participant: Participant) => boolean;
|
|
69
|
+
isAttendeeAssignmentProhibited: (participant: Participant) => boolean;
|
|
69
70
|
/**
|
|
70
71
|
* checks to see if the participant id is the same as the passed id
|
|
71
72
|
* there are multiple ids that can be used
|
|
@@ -92,5 +92,8 @@ declare const BEHAVIORAL_METRICS: {
|
|
|
92
92
|
DEPRECATED_DELETE_CODEC_PARAMETERS_USED: string;
|
|
93
93
|
SET_CUSTOM_CODEC_PARAMETERS_USED: string;
|
|
94
94
|
MARK_CUSTOM_CODEC_PARAMETERS_FOR_DELETION_USED: string;
|
|
95
|
+
HASH_TREE_SYNC_FAILURE: string;
|
|
96
|
+
HASH_TREE_HEARTBEAT_WATCHDOG_EXPIRED: string;
|
|
97
|
+
HASH_TREE_EMPTY_LOCUS_STATE_ELEMENTS: string;
|
|
95
98
|
};
|
|
96
99
|
export { BEHAVIORAL_METRICS as default };
|