@vkontakte/calls-sdk 2.8.11-dev.e80e239d.0 → 2.8.11-dev.f092dc48.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.
- package/calls-sdk.cjs.js +9 -9
- package/calls-sdk.esm.js +723 -493
- package/classes/AudioFix.d.ts +2 -0
- package/classes/CallRegistry.d.ts +5 -1
- package/classes/Conversation.d.ts +9 -1
- package/classes/ConversationResponseValidator.d.ts +3 -0
- package/classes/MediaSource.d.ts +1 -1
- package/classes/stat/StatFirstMediaReceived.d.ts +2 -1
- package/classes/transport/DirectTransport.d.ts +3 -0
- package/classes/transport/ServerTransport.d.ts +3 -0
- package/classes/transport/Transport.d.ts +1 -0
- package/default/Signaling.d.ts +29 -45
- package/default/SignalingTransport.d.ts +68 -0
- package/enums/HangupType.d.ts +2 -1
- package/package.json +1 -1
- package/types/SignalingMessage.d.ts +2 -0
- package/types/WebTransport.d.ts +4 -0
package/classes/AudioFix.d.ts
CHANGED
|
@@ -15,10 +15,12 @@ export default class AudioFix {
|
|
|
15
15
|
private _lastPacketsSentTime;
|
|
16
16
|
private _toggleAudioPromise;
|
|
17
17
|
private _fixNoPacketsAppliedVideo;
|
|
18
|
+
private _disabled;
|
|
18
19
|
constructor(mediaSource: MediaSource, debug?: DebugLogger, logger?: StatsLogger | null);
|
|
19
20
|
private _fixAudioDeviceNoPackets;
|
|
20
21
|
private _fixAudioDeviceTooManyPackets;
|
|
21
22
|
fix(rtps: any[]): void;
|
|
22
23
|
/** важно вызывать ___после___ метода `fix()` */
|
|
23
24
|
fixVideo(rtps: any[]): void;
|
|
25
|
+
disable(): void;
|
|
24
26
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import Conversation from './Conversation';
|
|
2
|
+
import MediaSettings from '../types/MediaSettings';
|
|
2
3
|
export interface HoldableConversation extends Conversation {
|
|
3
4
|
id: string;
|
|
4
|
-
hold(hold: boolean): Promise<void>;
|
|
5
|
+
hold(hold: boolean, lastActiveMediaSettings?: MediaSettings): Promise<void>;
|
|
5
6
|
}
|
|
6
7
|
export declare class CallRegistry {
|
|
7
8
|
private _conversations;
|
|
@@ -11,11 +12,14 @@ export declare class CallRegistry {
|
|
|
11
12
|
remove(id: string | null): void;
|
|
12
13
|
get(id: string): HoldableConversation | undefined;
|
|
13
14
|
getActive(): HoldableConversation | null;
|
|
15
|
+
getFirstHeld(): HoldableConversation | null;
|
|
14
16
|
getActiveId(): string | null;
|
|
15
17
|
has(id: string): boolean;
|
|
16
18
|
getAll(): HoldableConversation[];
|
|
17
19
|
get callsLength(): number;
|
|
18
20
|
setActive(id: string): Promise<void>;
|
|
21
|
+
setHold(id: string): Promise<void>;
|
|
22
|
+
switchCall(id: string): Promise<void>;
|
|
19
23
|
clear(): void;
|
|
20
24
|
}
|
|
21
25
|
declare const callRegistry: CallRegistry;
|
|
@@ -38,6 +38,8 @@ export default class Conversation extends EventEmitter {
|
|
|
38
38
|
private _myLastRequestedLayouts;
|
|
39
39
|
private _state;
|
|
40
40
|
private _previousState;
|
|
41
|
+
/** Если пользователь в зале ожидания, холд должен вызываться после промоута */
|
|
42
|
+
private _waitingHallHoldPending;
|
|
41
43
|
private _participantState;
|
|
42
44
|
private _participants;
|
|
43
45
|
private _pendingParticipants;
|
|
@@ -209,7 +211,13 @@ export default class Conversation extends EventEmitter {
|
|
|
209
211
|
*/
|
|
210
212
|
changePriorities(priorities: ParticipantPriority[]): Promise<void>;
|
|
211
213
|
changeParticipantState(state: ParticipantStateData, compositeUserId?: CompositeUserId): Promise<void>;
|
|
212
|
-
hold(hold: boolean): Promise<void>;
|
|
214
|
+
hold(hold: boolean, lastActiveMediaSettings?: MediaSettings): Promise<void>;
|
|
215
|
+
private _holdLocally;
|
|
216
|
+
private _resumeLocalMedia;
|
|
217
|
+
private _setOutgoingAudioEnabled;
|
|
218
|
+
private _restoreStateAfterHold;
|
|
219
|
+
private _isWaitingForPromotion;
|
|
220
|
+
private _getWaitingForPromotionStatus;
|
|
213
221
|
putHandsDown(): Promise<void>;
|
|
214
222
|
requestKeyFrame(participantStreamDescription: ParticipantStreamDescription): Promise<void | SignalingMessage>;
|
|
215
223
|
requestTestMode(consumerCommand: string, producerCommand: string): Promise<void>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import ConversationResponse from '../types/ConversationResponse';
|
|
2
|
+
export type ConversationResponseSource = 'startConversation' | 'joinConversation' | 'joinConversationByLink' | 'fastStart' | 'fastJoin';
|
|
3
|
+
export declare function assertValidConversationResponse(response: ConversationResponse | null | undefined, source: ConversationResponseSource): void;
|
package/classes/MediaSource.d.ts
CHANGED
|
@@ -101,7 +101,7 @@ export declare class MediaSource extends EventEmitter {
|
|
|
101
101
|
private _stopEffect;
|
|
102
102
|
destroy(): void;
|
|
103
103
|
stopLocalMedia(): Promise<void>;
|
|
104
|
-
resumeLocalMedia(): Promise<void>;
|
|
104
|
+
resumeLocalMedia(lastActiveMediaSettings?: MediaSettings): Promise<void>;
|
|
105
105
|
toggleScreenCapturing(settings: ScreenCaptureSettings): Promise<void>;
|
|
106
106
|
disableScreenCapturing(): Promise<void>;
|
|
107
107
|
private videoTrackMuteHandler;
|
|
@@ -4,6 +4,7 @@ import { StatAggregator } from './StatAggregator';
|
|
|
4
4
|
declare enum ECallType {
|
|
5
5
|
DirectOutgoing = "direct_outgoing",
|
|
6
6
|
DirectIncoming = "direct_incoming",
|
|
7
|
+
DirectJoin = "direct_join",
|
|
7
8
|
ServerIncoming = "server_incoming",
|
|
8
9
|
ServerJoinServer = "server_join_server",
|
|
9
10
|
ServerChangeTopology = "server_change_topology"
|
|
@@ -17,8 +18,8 @@ export declare class StatFirstMediaReceived {
|
|
|
17
18
|
constructor(statAggregator: StatAggregator);
|
|
18
19
|
markAcceptCall(topology: TransportTopology): void;
|
|
19
20
|
markAcceptedCall(topology?: TransportTopology): void;
|
|
20
|
-
markParticipantJoined(topology: TransportTopology): void;
|
|
21
21
|
markOnJoin(topology: TransportTopology): void;
|
|
22
|
+
markTopologyChanged(topology: TransportTopology): void;
|
|
22
23
|
private mark;
|
|
23
24
|
measure(): void;
|
|
24
25
|
}
|
|
@@ -32,6 +32,8 @@ export default class DirectTransport extends BaseTransport {
|
|
|
32
32
|
private _neverConnected;
|
|
33
33
|
private _serverSettings;
|
|
34
34
|
private _prevConsumerSettings;
|
|
35
|
+
private _heldAudioSender;
|
|
36
|
+
private _heldAudioTrack;
|
|
35
37
|
private _networkLimitsForVideo;
|
|
36
38
|
private _videoMaxDimensionsForNet;
|
|
37
39
|
private _lastVideoMaxDimension;
|
|
@@ -50,6 +52,7 @@ export default class DirectTransport extends BaseTransport {
|
|
|
50
52
|
updateSettings(settings: ServerSettings): void;
|
|
51
53
|
preventRestart(): void;
|
|
52
54
|
allowRestart(): void;
|
|
55
|
+
setOutgoingAudioEnabled(enabled: boolean): void;
|
|
53
56
|
setAnimojiTransport(receiver: AnimojiReceiver, sender: AnimojiSender): void;
|
|
54
57
|
close(error?: Error): void;
|
|
55
58
|
private _setState;
|
|
@@ -43,6 +43,8 @@ export default class ServerTransport extends BaseTransport {
|
|
|
43
43
|
private _producerSessionId;
|
|
44
44
|
private _newAudioShareTrack;
|
|
45
45
|
private _simulcastInfo;
|
|
46
|
+
private _heldAudioSender;
|
|
47
|
+
private _heldAudioTrack;
|
|
46
48
|
private readonly _debug;
|
|
47
49
|
private readonly _logger;
|
|
48
50
|
private readonly _statAggregator;
|
|
@@ -52,6 +54,7 @@ export default class ServerTransport extends BaseTransport {
|
|
|
52
54
|
open(observer?: boolean): void;
|
|
53
55
|
close(error?: Error): void;
|
|
54
56
|
removeParticipant(participantId: ParticipantId): void;
|
|
57
|
+
setOutgoingAudioEnabled(enabled: boolean): void;
|
|
55
58
|
preventRestart(): void;
|
|
56
59
|
allowRestart(): void;
|
|
57
60
|
updateSettings(settings: ServerSettings): void;
|
|
@@ -55,6 +55,7 @@ export declare class Transport extends EventEmitter {
|
|
|
55
55
|
open(participantIds: ParticipantId[], peerId?: string | null, observer?: boolean, force?: boolean): void;
|
|
56
56
|
close(participantId: ParticipantId): void;
|
|
57
57
|
destroy(): void;
|
|
58
|
+
setOutgoingAudioEnabled(enabled: boolean): void;
|
|
58
59
|
getTopology(): TransportTopology;
|
|
59
60
|
isAllocated(participantId: ParticipantId): boolean;
|
|
60
61
|
allocated(): string[];
|
package/default/Signaling.d.ts
CHANGED
|
@@ -9,7 +9,6 @@ import TransportTopology from '../enums/TransportTopology';
|
|
|
9
9
|
import ConversationFeature from '../enums/ConversationFeature';
|
|
10
10
|
import ConversationOption from '../enums/ConversationOption';
|
|
11
11
|
import MediaOption from '../enums/MediaOption';
|
|
12
|
-
import SignalingCommandType from '../enums/SignalingCommandType';
|
|
13
12
|
import SignalingConnectionType from '../enums/SignalingConnectionType';
|
|
14
13
|
import UserRole from '../enums/UserRole';
|
|
15
14
|
import { type DebugLogger } from '../static/Debug';
|
|
@@ -26,29 +25,24 @@ import ParticipantLayout, { RequestKeyFrame, StopStream } from '../types/Partici
|
|
|
26
25
|
import { ParticipantListChunkParameters } from '../types/ParticipantListChunk';
|
|
27
26
|
import { StreamDescriptionString } from '../types/ParticipantStreamDescription';
|
|
28
27
|
import { PerfStatReport } from '../types/PerfStatReporter';
|
|
29
|
-
import SignalingMessage, { GetParticipantsSignalingResponse, GetRoomsSignalingResponse
|
|
28
|
+
import SignalingMessage, { GetParticipantsSignalingResponse, GetRoomsSignalingResponse } from '../types/SignalingMessage';
|
|
30
29
|
import { IPublishStreamData, IStartStreamData, IStopStreamData } from '../types/Streams';
|
|
31
30
|
export default class Signaling extends BaseSignaling {
|
|
32
|
-
private
|
|
33
|
-
|
|
31
|
+
private transport;
|
|
32
|
+
private sequence;
|
|
34
33
|
private lastStamp;
|
|
35
34
|
private websocketCommandsQueue;
|
|
36
35
|
private datachannelCommandsQueue;
|
|
37
36
|
private incomingCache;
|
|
38
37
|
private responseHandlers;
|
|
39
38
|
private connectionType;
|
|
40
|
-
private
|
|
41
|
-
private
|
|
42
|
-
private wtEndpoint;
|
|
43
|
-
protected conversationResolve: Function | null;
|
|
44
|
-
protected conversationReject: Function | null;
|
|
39
|
+
private conversationResolve;
|
|
40
|
+
private conversationReject;
|
|
45
41
|
private connected;
|
|
46
42
|
private listenersReady;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
private reconnectTimer;
|
|
43
|
+
private peerId;
|
|
44
|
+
private conversationId;
|
|
50
45
|
private connectionMessageWaitTimer;
|
|
51
|
-
private doctorTimer;
|
|
52
46
|
private participantIdRegistry;
|
|
53
47
|
private producerNotificationDataChannel;
|
|
54
48
|
private producerCommandDataChannel;
|
|
@@ -57,16 +51,13 @@ export default class Signaling extends BaseSignaling {
|
|
|
57
51
|
private readonly _debug;
|
|
58
52
|
private readonly _logger;
|
|
59
53
|
private readonly _statAggregator;
|
|
60
|
-
private readonly
|
|
61
|
-
private readonly
|
|
62
|
-
private static get RECONNECT_DELAY();
|
|
63
|
-
private static get RECONNECT_MAX_DELAY();
|
|
64
|
-
private static get RECONNECT_MAX_COUNT();
|
|
54
|
+
private readonly _statPings;
|
|
55
|
+
private readonly _statSignalingCommands;
|
|
65
56
|
private static get WAIT_CONNECTION_DELAY();
|
|
66
57
|
private static get WAIT_RESPONSE_DELAY();
|
|
67
|
-
private static get WAIT_MESSAGE_DELAY();
|
|
68
|
-
constructor(debug?: DebugLogger, logger?: StatsLogger | null, statAggregator?: StatAggregator | null, pings?: StatPings | null, signalingCommands?: StatSignalingCommands | null);
|
|
69
58
|
get ready(): boolean;
|
|
59
|
+
constructor(debug?: DebugLogger, logger?: StatsLogger | null, statAggregator?: StatAggregator | null, statPings?: StatPings | null, statSignalingCommands?: StatSignalingCommands | null);
|
|
60
|
+
setAbortSignal(signal: AbortSignal | undefined): void;
|
|
70
61
|
setEndpoint(endpoint: string): void;
|
|
71
62
|
setWebTransportEndpoint(endpoint: string | null): void;
|
|
72
63
|
setConversationId(conversationId: string): void;
|
|
@@ -82,15 +73,6 @@ export default class Signaling extends BaseSignaling {
|
|
|
82
73
|
* Open a connection with a signaling server
|
|
83
74
|
*/
|
|
84
75
|
connect(connectionType: SignalingConnectionType): Promise<SignalingMessage.Connection>;
|
|
85
|
-
/**
|
|
86
|
-
* Send a command to a signaling server
|
|
87
|
-
*/
|
|
88
|
-
protected _send<T extends SignalingSuccessResponse>(command: SignalingCommandType, params?: any, needResponse?: boolean, retryCount?: number): Promise<T>;
|
|
89
|
-
/**
|
|
90
|
-
* Send a raw command to a signaling server
|
|
91
|
-
*/
|
|
92
|
-
protected _sendRaw<T extends SignalingSuccessResponse>(command: SignalingCommandType, params?: any, needResponse?: boolean, retryCount?: number): Promise<T>;
|
|
93
|
-
private _isDataChannelCommand;
|
|
94
76
|
getNextCommandSequenceNumber(): number;
|
|
95
77
|
hangup(reason: string): Promise<SignalingMessage | void>;
|
|
96
78
|
sendCandidate(participantId: ParticipantId, candidate: RTCIceCandidate): Promise<SignalingMessage>;
|
|
@@ -173,34 +155,36 @@ export default class Signaling extends BaseSignaling {
|
|
|
173
155
|
startAsr(params: IAsrStartParams): Promise<SignalingMessage>;
|
|
174
156
|
stopAsr(params?: IAsrStopParams): Promise<SignalingMessage>;
|
|
175
157
|
requestAsr(request: boolean): Promise<SignalingMessage>;
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
158
|
+
/**
|
|
159
|
+
* Send a command to a signaling server
|
|
160
|
+
*/
|
|
161
|
+
private _send;
|
|
162
|
+
/**
|
|
163
|
+
* Send a raw command to a signaling server
|
|
164
|
+
*/
|
|
165
|
+
private _sendRaw;
|
|
166
|
+
private _isDataChannelCommand;
|
|
179
167
|
private _onOpen;
|
|
180
168
|
private _onMessage;
|
|
181
|
-
|
|
169
|
+
private _handleMessage;
|
|
182
170
|
private _handleErrorMessage;
|
|
183
|
-
|
|
171
|
+
private _handleCachedMessages;
|
|
184
172
|
private _throwError;
|
|
185
173
|
private _onError;
|
|
186
174
|
private _serializeErrorEvent;
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
protected _reconnect(): void;
|
|
175
|
+
private _onClose;
|
|
176
|
+
private _closeSocket;
|
|
190
177
|
private _handleCommandResponse;
|
|
191
178
|
private _handleCommandsQueue;
|
|
192
179
|
private _startResponseTimer;
|
|
193
180
|
private _serializeBinary;
|
|
194
181
|
private _serializeJson;
|
|
195
182
|
private _convertDisplayLayout;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
private _startDoctor;
|
|
202
|
-
private _stopDoctor;
|
|
203
|
-
private isWebTransportAvailable;
|
|
183
|
+
private _waitConnectionMessage;
|
|
184
|
+
private _stopWaitConnectionMessage;
|
|
185
|
+
private _onTransportFailed;
|
|
186
|
+
private _onTransportReconnectScheduled;
|
|
187
|
+
private _onTransportConnectionDead;
|
|
204
188
|
private _getSocketType;
|
|
205
189
|
private _markTransportStat;
|
|
206
190
|
private _logTransportStat;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import SignalingConnectionType from '../enums/SignalingConnectionType';
|
|
2
|
+
import { SignalingTransportType } from '../enums/SignalingTransportStat';
|
|
3
|
+
export declare enum SignalingTransportFailure {
|
|
4
|
+
EMPTY_ENDPOINT = "EMPTY_ENDPOINT",
|
|
5
|
+
NETWORK_ERROR = "NETWORK_ERROR",
|
|
6
|
+
ABORTED = "ABORTED"
|
|
7
|
+
}
|
|
8
|
+
export type SignalingTransportFailedEvent = {
|
|
9
|
+
failure: SignalingTransportFailure;
|
|
10
|
+
message: string;
|
|
11
|
+
remote?: boolean;
|
|
12
|
+
};
|
|
13
|
+
export type SignalingTransportReconnectEvent = {
|
|
14
|
+
count: number;
|
|
15
|
+
delay: number;
|
|
16
|
+
};
|
|
17
|
+
export type SignalingTransportHandlers = {
|
|
18
|
+
onOpen: () => void;
|
|
19
|
+
onMessage: (event: MessageEvent) => void;
|
|
20
|
+
onError: (event: Event) => void;
|
|
21
|
+
onClose: (event: CloseEvent) => void;
|
|
22
|
+
onFailed: (event: SignalingTransportFailedEvent) => void;
|
|
23
|
+
onReconnectScheduled: (event: SignalingTransportReconnectEvent) => void;
|
|
24
|
+
onConnectionDead: () => void;
|
|
25
|
+
};
|
|
26
|
+
export default class SignalingTransport {
|
|
27
|
+
private readonly handlers;
|
|
28
|
+
private socket;
|
|
29
|
+
private endpoint;
|
|
30
|
+
private wtEndpoint;
|
|
31
|
+
private peerId;
|
|
32
|
+
private lastStamp;
|
|
33
|
+
private connectionType;
|
|
34
|
+
private reconnectCount;
|
|
35
|
+
private reconnectTimer;
|
|
36
|
+
private doctorTimer;
|
|
37
|
+
private forceWebSocket;
|
|
38
|
+
private abortSignal;
|
|
39
|
+
private manualClose;
|
|
40
|
+
private currentType;
|
|
41
|
+
constructor(handlers: SignalingTransportHandlers);
|
|
42
|
+
get readyState(): number | null;
|
|
43
|
+
get type(): SignalingTransportType;
|
|
44
|
+
setEndpoint(endpoint: string): void;
|
|
45
|
+
setWebTransportEndpoint(endpoint: string | null): void;
|
|
46
|
+
setPeerId(peerId: number | null): void;
|
|
47
|
+
setLastStamp(lastStamp: number): void;
|
|
48
|
+
setAbortSignal(signal?: AbortSignal): void;
|
|
49
|
+
resetReconnectCount(): void;
|
|
50
|
+
connect(connectionType: SignalingConnectionType): void;
|
|
51
|
+
close(code?: number): void;
|
|
52
|
+
send(data: string | ArrayBuffer): void;
|
|
53
|
+
private _connect;
|
|
54
|
+
private _connectWebTransport;
|
|
55
|
+
private _connectWebSocket;
|
|
56
|
+
private _setSocketHandlers;
|
|
57
|
+
private _buildUrl;
|
|
58
|
+
private _canUseWebTransport;
|
|
59
|
+
private _onOpen;
|
|
60
|
+
private _onMessage;
|
|
61
|
+
private _onError;
|
|
62
|
+
private _onClose;
|
|
63
|
+
private _disconnect;
|
|
64
|
+
private _scheduleReconnect;
|
|
65
|
+
private _getReconnectDelay;
|
|
66
|
+
private _startDoctor;
|
|
67
|
+
private _stopDoctor;
|
|
68
|
+
}
|
package/enums/HangupType.d.ts
CHANGED
|
@@ -53,6 +53,7 @@ declare enum HangupType {
|
|
|
53
53
|
* - Приложение вызываемого не запущено или упало
|
|
54
54
|
* - Брандмауэр или сетевые ограничения блокируют подключение
|
|
55
55
|
*/
|
|
56
|
-
CALL_TIMEOUT = "CALL_TIMEOUT"
|
|
56
|
+
CALL_TIMEOUT = "CALL_TIMEOUT",
|
|
57
|
+
OBSOLETE_CLIENT = "OBSOLETE_CLIENT"
|
|
57
58
|
}
|
|
58
59
|
export default HangupType;
|
package/package.json
CHANGED
|
@@ -97,6 +97,7 @@ declare namespace SignalingMessage {
|
|
|
97
97
|
markers?: ParticipantListMarkers;
|
|
98
98
|
observedIds?: CompositeUserId[];
|
|
99
99
|
movieShareInfos?: ISharedMovieInfo[];
|
|
100
|
+
onHold?: boolean;
|
|
100
101
|
}
|
|
101
102
|
export interface ParticipantListChunk extends Notification {
|
|
102
103
|
participants: (Participant & Required<Pick<Participant, 'markers'>>)[];
|
|
@@ -190,6 +191,7 @@ declare namespace SignalingMessage {
|
|
|
190
191
|
deviceIdx?: number;
|
|
191
192
|
peerId: PeerId;
|
|
192
193
|
reason: HangupType;
|
|
194
|
+
errorCode?: string;
|
|
193
195
|
markers?: ParticipantListMarkers;
|
|
194
196
|
}
|
|
195
197
|
export interface ClosedConversation extends Notification {
|
package/types/WebTransport.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ declare class WebTransportEventual {
|
|
|
7
7
|
private readonly url;
|
|
8
8
|
private readonly options;
|
|
9
9
|
private readonly compression;
|
|
10
|
+
private closeRequested;
|
|
11
|
+
private closeEventEmitted;
|
|
10
12
|
private encoder;
|
|
11
13
|
private decoder;
|
|
12
14
|
onopen: ((this: WebTransportEventual, ev: Event) => any) | null;
|
|
@@ -22,6 +24,8 @@ declare class WebTransportEventual {
|
|
|
22
24
|
send(data: string): Promise<void>;
|
|
23
25
|
private createErrorEvent;
|
|
24
26
|
close(code?: number, reason?: string): void;
|
|
27
|
+
private closeConnectedTransport;
|
|
28
|
+
private emitClose;
|
|
25
29
|
static isBrowserSupported(): boolean;
|
|
26
30
|
}
|
|
27
31
|
export { WebTransportEventual as WebTransport };
|