@webex/plugin-meetings 3.12.0-next.9 → 3.12.0-task-refactor.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/annotation/index.js +5 -14
- package/dist/annotation/index.js.map +1 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/config.js +2 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.js +6 -29
- package/dist/constants.js.map +1 -1
- package/dist/hashTree/hashTreeParser.js +29 -1563
- package/dist/hashTree/hashTreeParser.js.map +1 -1
- package/dist/hashTree/types.js +3 -13
- package/dist/hashTree/types.js.map +1 -1
- package/dist/index.js +2 -11
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js +0 -7
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interceptors/locusRouteToken.js +5 -27
- package/dist/interceptors/locusRouteToken.js.map +1 -1
- package/dist/interpretation/index.js +2 -2
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +3 -7
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +247 -642
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/selfUtils.js +0 -1
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/locus-info/types.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.js +1 -57
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/properties.js +2 -4
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +1 -7
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +1036 -1481
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +0 -50
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +3 -133
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +59 -142
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +7 -11
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +0 -10
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +0 -10
- package/dist/member/util.js.map +1 -1
- package/dist/metrics/constants.js +1 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +60 -9
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +0 -11
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +2 -116
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/reachability/clusterReachability.js +18 -171
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +11 -21
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachabilityPeerConnection.js +1 -1
- package/dist/reachability/reachabilityPeerConnection.js.map +1 -1
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +1 -0
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/types/common/browser-detection.d.ts +0 -1
- package/dist/types/common/events/events-scope.d.ts +0 -1
- package/dist/types/common/events/events.d.ts +0 -1
- package/dist/types/config.d.ts +0 -5
- package/dist/types/constants.d.ts +1 -24
- package/dist/types/hashTree/hashTreeParser.d.ts +11 -260
- package/dist/types/hashTree/types.d.ts +0 -20
- package/dist/types/index.d.ts +0 -1
- package/dist/types/interceptors/index.d.ts +1 -2
- package/dist/types/interceptors/locusRouteToken.d.ts +0 -2
- package/dist/types/locus-info/index.d.ts +47 -68
- package/dist/types/locus-info/types.d.ts +12 -28
- package/dist/types/media/MediaConnectionAwaiter.d.ts +1 -10
- package/dist/types/media/properties.d.ts +1 -2
- package/dist/types/meeting/in-meeting-actions.d.ts +0 -6
- package/dist/types/meeting/index.d.ts +7 -86
- package/dist/types/meeting/request.d.ts +1 -16
- package/dist/types/meeting/request.type.d.ts +0 -5
- package/dist/types/meeting/util.d.ts +0 -31
- package/dist/types/meeting-info/util.d.ts +0 -1
- package/dist/types/meeting-info/utilv2.d.ts +0 -1
- package/dist/types/meetings/index.d.ts +2 -4
- package/dist/types/member/index.d.ts +0 -1
- package/dist/types/member/types.d.ts +4 -4
- package/dist/types/member/util.d.ts +0 -5
- package/dist/types/metrics/constants.d.ts +0 -6
- package/dist/types/multistream/mediaRequestManager.d.ts +23 -0
- package/dist/types/multistream/sendSlotManager.d.ts +1 -23
- package/dist/types/reachability/clusterReachability.d.ts +3 -30
- package/dist/types/reactions/reactions.type.d.ts +0 -1
- package/dist/types/recording-controller/util.d.ts +5 -5
- package/dist/types/roap/index.d.ts +1 -1
- package/dist/webinar/index.js +163 -438
- package/dist/webinar/index.js.map +1 -1
- package/package.json +24 -26
- package/src/annotation/index.ts +7 -27
- package/src/config.ts +0 -5
- package/src/constants.ts +1 -30
- package/src/hashTree/hashTreeParser.ts +25 -1523
- package/src/hashTree/types.ts +1 -24
- package/src/index.ts +1 -8
- package/src/interceptors/index.ts +1 -2
- package/src/interceptors/locusRouteToken.ts +5 -22
- package/src/interpretation/index.ts +2 -2
- package/src/locus-info/controlsUtils.ts +0 -17
- package/src/locus-info/index.ts +213 -707
- package/src/locus-info/selfUtils.ts +0 -1
- package/src/locus-info/types.ts +12 -27
- package/src/media/MediaConnectionAwaiter.ts +1 -41
- package/src/media/properties.ts +1 -3
- package/src/meeting/in-meeting-actions.ts +0 -12
- package/src/meeting/index.ts +84 -461
- package/src/meeting/request.ts +0 -42
- package/src/meeting/request.type.ts +0 -6
- package/src/meeting/util.ts +2 -160
- package/src/meetings/index.ts +60 -180
- package/src/meetings/util.ts +9 -10
- package/src/member/index.ts +0 -10
- package/src/member/util.ts +0 -12
- package/src/metrics/constants.ts +0 -7
- package/src/multistream/mediaRequestManager.ts +54 -4
- package/src/multistream/remoteMediaManager.ts +0 -13
- package/src/multistream/sendSlotManager.ts +3 -97
- package/src/reachability/clusterReachability.ts +27 -153
- package/src/reachability/index.ts +1 -15
- package/src/reachability/reachabilityPeerConnection.ts +1 -3
- package/src/reactions/reactions.type.ts +0 -1
- package/src/reconnection-manager/index.ts +1 -0
- package/src/webinar/index.ts +6 -265
- package/test/unit/spec/annotation/index.ts +7 -69
- package/test/unit/spec/interceptors/locusRouteToken.ts +0 -44
- package/test/unit/spec/locus-info/controlsUtils.js +1 -56
- package/test/unit/spec/locus-info/index.js +90 -1457
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +1 -41
- package/test/unit/spec/media/properties.ts +3 -12
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -8
- package/test/unit/spec/meeting/index.js +128 -981
- package/test/unit/spec/meeting/request.js +0 -70
- package/test/unit/spec/meeting/utils.js +26 -438
- package/test/unit/spec/meetings/index.js +33 -845
- package/test/unit/spec/meetings/utils.js +1 -51
- package/test/unit/spec/member/index.js +4 -28
- package/test/unit/spec/member/util.js +27 -65
- package/test/unit/spec/multistream/mediaRequestManager.ts +85 -2
- package/test/unit/spec/multistream/remoteMediaManager.ts +0 -30
- package/test/unit/spec/multistream/sendSlotManager.ts +36 -135
- package/test/unit/spec/reachability/clusterReachability.ts +1 -125
- package/test/unit/spec/reachability/index.ts +3 -26
- package/test/unit/spec/reconnection-manager/index.js +8 -4
- package/test/unit/spec/webinar/index.ts +37 -534
- package/dist/aiEnableRequest/index.js +0 -184
- package/dist/aiEnableRequest/index.js.map +0 -1
- package/dist/aiEnableRequest/utils.js +0 -36
- package/dist/aiEnableRequest/utils.js.map +0 -1
- package/dist/hashTree/constants.js +0 -22
- package/dist/hashTree/constants.js.map +0 -1
- package/dist/hashTree/hashTree.js +0 -533
- package/dist/hashTree/hashTree.js.map +0 -1
- package/dist/hashTree/utils.js +0 -69
- package/dist/hashTree/utils.js.map +0 -1
- package/dist/interceptors/constant.js +0 -12
- package/dist/interceptors/constant.js.map +0 -1
- package/dist/interceptors/dataChannelAuthToken.js +0 -290
- package/dist/interceptors/dataChannelAuthToken.js.map +0 -1
- package/dist/interceptors/utils.js +0 -27
- package/dist/interceptors/utils.js.map +0 -1
- package/dist/types/aiEnableRequest/index.d.ts +0 -5
- package/dist/types/aiEnableRequest/utils.d.ts +0 -2
- package/dist/types/hashTree/constants.d.ts +0 -9
- package/dist/types/hashTree/hashTree.d.ts +0 -136
- package/dist/types/hashTree/utils.d.ts +0 -22
- package/dist/types/interceptors/constant.d.ts +0 -5
- package/dist/types/interceptors/dataChannelAuthToken.d.ts +0 -43
- package/dist/types/interceptors/utils.d.ts +0 -1
- package/dist/types/webinar/utils.d.ts +0 -6
- package/dist/webinar/utils.js +0 -25
- package/dist/webinar/utils.js.map +0 -1
- package/src/aiEnableRequest/README.md +0 -84
- package/src/aiEnableRequest/index.ts +0 -170
- package/src/aiEnableRequest/utils.ts +0 -25
- package/src/hashTree/constants.ts +0 -10
- package/src/hashTree/hashTree.ts +0 -480
- package/src/hashTree/utils.ts +0 -62
- package/src/interceptors/constant.ts +0 -6
- package/src/interceptors/dataChannelAuthToken.ts +0 -170
- package/src/interceptors/utils.ts +0 -16
- package/src/webinar/utils.ts +0 -16
- package/test/unit/spec/aiEnableRequest/index.ts +0 -981
- package/test/unit/spec/aiEnableRequest/utils.ts +0 -130
- package/test/unit/spec/hashTree/hashTree.ts +0 -721
- package/test/unit/spec/hashTree/hashTreeParser.ts +0 -3670
- package/test/unit/spec/hashTree/utils.ts +0 -140
- package/test/unit/spec/interceptors/dataChannelAuthToken.ts +0 -210
- package/test/unit/spec/interceptors/utils.ts +0 -75
- package/test/unit/spec/webinar/utils.ts +0 -39
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2026 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {Interceptor} from '@webex/http-core';
|
|
6
|
-
import LoggerProxy from '../common/logs/logger-proxy';
|
|
7
|
-
import {DATA_CHANNEL_AUTH_HEADER, MAX_RETRY, RETRY_INTERVAL, RETRY_KEY} from './constant';
|
|
8
|
-
import {isJwtTokenExpired} from './utils';
|
|
9
|
-
|
|
10
|
-
/*!
|
|
11
|
-
* Copyright (c) 2015-2026 Cisco Systems, Inc. See LICENSE file.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
const retryCountMap = new Map();
|
|
15
|
-
interface HttpLikeError extends Error {
|
|
16
|
-
statusCode?: number;
|
|
17
|
-
original?: any;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* @class
|
|
21
|
-
*/
|
|
22
|
-
export default class DataChannelAuthTokenInterceptor extends Interceptor {
|
|
23
|
-
private _refreshDataChannelToken: () => Promise<string>;
|
|
24
|
-
private _isDataChannelTokenEnabled: () => Promise<boolean>;
|
|
25
|
-
constructor(options) {
|
|
26
|
-
super(options);
|
|
27
|
-
|
|
28
|
-
this._refreshDataChannelToken = options.refreshDataChannelToken;
|
|
29
|
-
this._isDataChannelTokenEnabled = options.isDataChannelTokenEnabled;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @returns {DataChannelAuthTokenInterceptor}
|
|
34
|
-
*/
|
|
35
|
-
static create() {
|
|
36
|
-
// @ts-ignore
|
|
37
|
-
return new DataChannelAuthTokenInterceptor({
|
|
38
|
-
webex: this,
|
|
39
|
-
|
|
40
|
-
isDataChannelTokenEnabled: async () => {
|
|
41
|
-
// @ts-ignore
|
|
42
|
-
return this.internal.llm.isDataChannelTokenEnabled();
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
refreshDataChannelToken: async () => {
|
|
46
|
-
// @ts-ignore
|
|
47
|
-
const {body} = await this.internal.llm.refreshDataChannelToken();
|
|
48
|
-
const {datachannelToken, dataChannelTokenType} = body ?? {};
|
|
49
|
-
|
|
50
|
-
// @ts-ignore
|
|
51
|
-
this.internal.llm.setDatachannelToken(datachannelToken, dataChannelTokenType);
|
|
52
|
-
|
|
53
|
-
return datachannelToken;
|
|
54
|
-
},
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
private getRetryKey(options) {
|
|
59
|
-
if (!options[RETRY_KEY]) {
|
|
60
|
-
options[RETRY_KEY] = `${Date.now()}-${Math.random()}`;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return options[RETRY_KEY];
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Helper function to get header value case insensitively
|
|
67
|
-
private getHeader(headers: Record<string, string>, name: string) {
|
|
68
|
-
const key = Object.keys(headers).find((k) => k.toLowerCase() === name.toLowerCase());
|
|
69
|
-
|
|
70
|
-
return key ? headers[key] : undefined;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Intercepts outgoing requests and refreshes the Data-Channel-Auth-Token
|
|
75
|
-
* if the current JWT token is expired before the request is sent.
|
|
76
|
-
*
|
|
77
|
-
* @param {Object} options - The original request options.
|
|
78
|
-
* @returns {Promise<Object>} Updated request options with refreshed token if needed.
|
|
79
|
-
*/
|
|
80
|
-
async onRequest(options) {
|
|
81
|
-
const token = this.getHeader(options.headers, DATA_CHANNEL_AUTH_HEADER);
|
|
82
|
-
const enabled = await this._isDataChannelTokenEnabled();
|
|
83
|
-
|
|
84
|
-
if (!token || !enabled) {
|
|
85
|
-
return options;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (isJwtTokenExpired(token)) {
|
|
89
|
-
try {
|
|
90
|
-
const newToken = await this._refreshDataChannelToken();
|
|
91
|
-
options.headers[DATA_CHANNEL_AUTH_HEADER] = newToken;
|
|
92
|
-
} catch (e) {
|
|
93
|
-
LoggerProxy.logger.warn(`DataChannelAuthTokenInterceptor: refresh failed: ${e.message}`);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return options;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Intercept responses and, on 401/403 with `Data-Channel-Auth-Token` header,
|
|
102
|
-
* attempt to refresh the data channel token and retry the original request once.
|
|
103
|
-
*
|
|
104
|
-
* @param {Object} options
|
|
105
|
-
* @param {Object} reason
|
|
106
|
-
* @returns {Promise<HttpResponse>}
|
|
107
|
-
*/
|
|
108
|
-
async onResponseError(options, reason) {
|
|
109
|
-
const token = this.getHeader(options.headers, DATA_CHANNEL_AUTH_HEADER);
|
|
110
|
-
const enabled = await this._isDataChannelTokenEnabled();
|
|
111
|
-
|
|
112
|
-
if (!token || !enabled) {
|
|
113
|
-
return Promise.reject(reason);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
if (reason.statusCode !== 401 && reason.statusCode !== 403) {
|
|
117
|
-
return Promise.reject(reason);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const key = this.getRetryKey(options);
|
|
121
|
-
const retryCount = retryCountMap.get(key) || 0;
|
|
122
|
-
|
|
123
|
-
if (retryCount >= MAX_RETRY) {
|
|
124
|
-
LoggerProxy.logger.error(`data channel token refresh exceeded max retry (${MAX_RETRY})`);
|
|
125
|
-
retryCountMap.delete(key);
|
|
126
|
-
|
|
127
|
-
return Promise.reject(reason);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
retryCountMap.set(key, retryCount + 1);
|
|
131
|
-
|
|
132
|
-
return this.refreshTokenAndRetryWithDelay(options);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Retry the failed data channel request after a delay.
|
|
137
|
-
* Refreshes the Data-Channel-Auth-Token and re-sends the original request.
|
|
138
|
-
*
|
|
139
|
-
* @param {Object} options - Original request options.
|
|
140
|
-
* @returns {Promise<HttpResponse>} - Resolves on successful retry.
|
|
141
|
-
*/
|
|
142
|
-
refreshTokenAndRetryWithDelay(options) {
|
|
143
|
-
return new Promise((resolve, reject) => {
|
|
144
|
-
setTimeout(async () => {
|
|
145
|
-
const key = this.getRetryKey(options);
|
|
146
|
-
try {
|
|
147
|
-
const newToken = await this._refreshDataChannelToken();
|
|
148
|
-
|
|
149
|
-
options.headers[DATA_CHANNEL_AUTH_HEADER] = newToken;
|
|
150
|
-
|
|
151
|
-
// @ts-ignore
|
|
152
|
-
const res = await this.webex.request(options);
|
|
153
|
-
retryCountMap.delete(key);
|
|
154
|
-
|
|
155
|
-
resolve(res);
|
|
156
|
-
} catch (e) {
|
|
157
|
-
retryCountMap.delete(key);
|
|
158
|
-
|
|
159
|
-
const msg = e?.message || String(e);
|
|
160
|
-
|
|
161
|
-
const err: HttpLikeError = new Error(`DataChannel token refresh failed: ${msg}`);
|
|
162
|
-
err.statusCode = e?.statusCode;
|
|
163
|
-
err.original = e;
|
|
164
|
-
|
|
165
|
-
reject(err);
|
|
166
|
-
}
|
|
167
|
-
}, RETRY_INTERVAL);
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import * as jose from 'jose';
|
|
2
|
-
|
|
3
|
-
const EXPIRY_BUFFER = 30 * 1000;
|
|
4
|
-
|
|
5
|
-
// eslint-disable-next-line import/prefer-default-export
|
|
6
|
-
export const isJwtTokenExpired = (token: string): boolean => {
|
|
7
|
-
try {
|
|
8
|
-
const payload = jose.decodeJwt(token);
|
|
9
|
-
|
|
10
|
-
if (!payload?.exp) return false;
|
|
11
|
-
|
|
12
|
-
return payload.exp * 1000 < Date.now() + EXPIRY_BUFFER;
|
|
13
|
-
} catch {
|
|
14
|
-
return true;
|
|
15
|
-
}
|
|
16
|
-
};
|
package/src/webinar/utils.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Remove null/undefined/empty string values from an object
|
|
3
|
-
* @param {object} params
|
|
4
|
-
* @returns {object}
|
|
5
|
-
*/
|
|
6
|
-
export const sanitizeParams = (params: Record<string, any>) => {
|
|
7
|
-
const result: Record<string, any> = {};
|
|
8
|
-
Object.keys(params).forEach((key) => {
|
|
9
|
-
const value = params[key];
|
|
10
|
-
if (value !== null && value !== undefined && value !== '') {
|
|
11
|
-
result[key] = value;
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
return result;
|
|
16
|
-
};
|