livekit-client 2.22.3 → 2.22.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.
Files changed (214) hide show
  1. package/README.md +35 -0
  2. package/dist/livekit-client.e2ee.worker.js +1 -1
  3. package/dist/livekit-client.e2ee.worker.js.map +1 -1
  4. package/dist/livekit-client.e2ee.worker.mjs +2 -1
  5. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  6. package/dist/livekit-client.esm.mjs +602 -247
  7. package/dist/livekit-client.esm.mjs.map +1 -1
  8. package/dist/livekit-client.fm.worker.js +1 -1
  9. package/dist/livekit-client.fm.worker.js.map +1 -1
  10. package/dist/livekit-client.fm.worker.mjs +2 -1
  11. package/dist/livekit-client.fm.worker.mjs.map +1 -1
  12. package/dist/livekit-client.umd.js +1 -1
  13. package/dist/livekit-client.umd.js.map +1 -1
  14. package/dist/src/api/SignalClient.d.ts +4 -2
  15. package/dist/src/api/SignalClient.d.ts.map +1 -1
  16. package/dist/src/options.d.ts +14 -0
  17. package/dist/src/options.d.ts.map +1 -1
  18. package/dist/src/room/PCTransport.d.ts +78 -7
  19. package/dist/src/room/PCTransport.d.ts.map +1 -1
  20. package/dist/src/room/PCTransportManager.d.ts.map +1 -1
  21. package/dist/src/room/RTCEngine.d.ts +8 -0
  22. package/dist/src/room/RTCEngine.d.ts.map +1 -1
  23. package/dist/src/room/Room.d.ts +1 -1
  24. package/dist/src/room/Room.d.ts.map +1 -1
  25. package/dist/src/room/defaults.d.ts.map +1 -1
  26. package/dist/src/room/errors.d.ts +18 -0
  27. package/dist/src/room/errors.d.ts.map +1 -1
  28. package/dist/src/room/events.d.ts +3 -2
  29. package/dist/src/room/events.d.ts.map +1 -1
  30. package/dist/src/room/participant/publishUtils.d.ts.map +1 -1
  31. package/dist/src/room/rpc/client/RpcClientManager.d.ts.map +1 -1
  32. package/dist/src/room/track/LocalTrack.d.ts.map +1 -1
  33. package/dist/src/room/track/LocalVideoTrack.d.ts +2 -0
  34. package/dist/src/room/track/LocalVideoTrack.d.ts.map +1 -1
  35. package/dist/src/room/track/utils.d.ts +13 -0
  36. package/dist/src/room/track/utils.d.ts.map +1 -1
  37. package/dist/src/room/utils.d.ts +32 -0
  38. package/dist/src/room/utils.d.ts.map +1 -1
  39. package/dist/src/test/compressionStreamStubs.d.ts +12 -0
  40. package/dist/src/test/compressionStreamStubs.d.ts.map +1 -0
  41. package/dist/ts4.2/api/SignalClient.d.ts +187 -185
  42. package/dist/ts4.2/api/SignalClientStateMachine.d.ts +85 -85
  43. package/dist/ts4.2/api/WebSocketStream.d.ts +33 -33
  44. package/dist/ts4.2/api/utils.d.ts +9 -9
  45. package/dist/ts4.2/connectionHelper/ConnectionCheck.d.ts +30 -30
  46. package/dist/ts4.2/connectionHelper/checks/Checker.d.ts +62 -62
  47. package/dist/ts4.2/connectionHelper/checks/cloudRegion.d.ts +18 -18
  48. package/dist/ts4.2/connectionHelper/checks/connectionProtocol.d.ts +20 -20
  49. package/dist/ts4.2/connectionHelper/checks/publishAudio.d.ts +6 -6
  50. package/dist/ts4.2/connectionHelper/checks/publishVideo.d.ts +7 -7
  51. package/dist/ts4.2/connectionHelper/checks/reconnect.d.ts +6 -6
  52. package/dist/ts4.2/connectionHelper/checks/turn.d.ts +6 -6
  53. package/dist/ts4.2/connectionHelper/checks/webrtc.d.ts +6 -6
  54. package/dist/ts4.2/connectionHelper/checks/websocket.d.ts +6 -6
  55. package/dist/ts4.2/e2ee/E2eeManager.d.ts +111 -111
  56. package/dist/ts4.2/e2ee/KeyProvider.d.ts +54 -54
  57. package/dist/ts4.2/e2ee/constants.d.ts +21 -21
  58. package/dist/ts4.2/e2ee/errors.d.ts +12 -12
  59. package/dist/ts4.2/e2ee/events.d.ts +39 -39
  60. package/dist/ts4.2/e2ee/index.d.ts +6 -6
  61. package/dist/ts4.2/e2ee/types.d.ts +231 -231
  62. package/dist/ts4.2/e2ee/utils.d.ts +32 -32
  63. package/dist/ts4.2/e2ee/worker/DataCryptor.d.ts +16 -16
  64. package/dist/ts4.2/e2ee/worker/ErrorRateLimiter.d.ts +21 -21
  65. package/dist/ts4.2/e2ee/worker/FrameCryptor.d.ts +209 -209
  66. package/dist/ts4.2/e2ee/worker/ParticipantKeyHandler.d.ts +81 -84
  67. package/dist/ts4.2/e2ee/worker/e2ee.worker.d.ts +2 -2
  68. package/dist/ts4.2/e2ee/worker/naluUtils.d.ts +28 -28
  69. package/dist/ts4.2/e2ee/worker/sifPayload.d.ts +23 -23
  70. package/dist/ts4.2/frameMetadata/FrameMetadataManager.d.ts +53 -53
  71. package/dist/ts4.2/frameMetadata/frameMetadata.d.ts +33 -33
  72. package/dist/ts4.2/frameMetadata/types.d.ts +62 -62
  73. package/dist/ts4.2/frameMetadata/utils.d.ts +9 -9
  74. package/dist/ts4.2/frameMetadata/worker/frameMetadata.worker.d.ts +2 -2
  75. package/dist/ts4.2/index.d.ts +76 -76
  76. package/dist/ts4.2/logger.d.ts +66 -66
  77. package/dist/ts4.2/options.d.ts +163 -149
  78. package/dist/ts4.2/room/BackOffStrategy.d.ts +27 -27
  79. package/dist/ts4.2/room/DefaultReconnectPolicy.d.ts +8 -8
  80. package/dist/ts4.2/room/DeviceManager.d.ts +12 -12
  81. package/dist/ts4.2/room/PCTransport.d.ts +246 -175
  82. package/dist/ts4.2/room/PCTransportManager.d.ts +77 -77
  83. package/dist/ts4.2/room/RTCEngine.d.ts +269 -262
  84. package/dist/ts4.2/room/ReconnectPolicy.d.ts +24 -24
  85. package/dist/ts4.2/room/RegionUrlProvider.d.ts +36 -36
  86. package/dist/ts4.2/room/Room.d.ts +354 -365
  87. package/dist/ts4.2/room/attribute-typings.d.ts +35 -35
  88. package/dist/ts4.2/room/data-channel/DataChannelManager.d.ts +62 -62
  89. package/dist/ts4.2/room/data-channel/FlowControlledDataChannel.d.ts +94 -95
  90. package/dist/ts4.2/room/data-channel/LossyDataChannel.d.ts +41 -41
  91. package/dist/ts4.2/room/data-channel/ReliableDataChannel.d.ts +57 -57
  92. package/dist/ts4.2/room/data-channel/types.d.ts +12 -12
  93. package/dist/ts4.2/room/data-stream/compression.d.ts +49 -49
  94. package/dist/ts4.2/room/data-stream/constants.d.ts +18 -18
  95. package/dist/ts4.2/room/data-stream/incoming/IncomingDataStreamManager.d.ts +29 -29
  96. package/dist/ts4.2/room/data-stream/incoming/StreamReader.d.ts +80 -80
  97. package/dist/ts4.2/room/data-stream/outgoing/OutgoingDataStreamManager.d.ts +73 -73
  98. package/dist/ts4.2/room/data-stream/outgoing/StreamWriter.d.ts +16 -16
  99. package/dist/ts4.2/room/data-stream/outgoing/header-utils.d.ts +18 -18
  100. package/dist/ts4.2/room/data-track/LocalDataTrack.d.ts +79 -80
  101. package/dist/ts4.2/room/data-track/RemoteDataTrack.d.ts +50 -50
  102. package/dist/ts4.2/room/data-track/depacketizer.d.ts +59 -59
  103. package/dist/ts4.2/room/data-track/frame.d.ts +22 -22
  104. package/dist/ts4.2/room/data-track/handle.d.ts +27 -27
  105. package/dist/ts4.2/room/data-track/incoming/IncomingDataTrackManager.d.ts +124 -124
  106. package/dist/ts4.2/room/data-track/incoming/errors.d.ts +24 -24
  107. package/dist/ts4.2/room/data-track/incoming/pipeline.d.ts +41 -41
  108. package/dist/ts4.2/room/data-track/incoming/types.d.ts +20 -20
  109. package/dist/ts4.2/room/data-track/outgoing/OutgoingDataTrackManager.d.ts +126 -126
  110. package/dist/ts4.2/room/data-track/outgoing/errors.d.ts +74 -74
  111. package/dist/ts4.2/room/data-track/outgoing/pipeline.d.ts +23 -23
  112. package/dist/ts4.2/room/data-track/outgoing/types.d.ts +48 -48
  113. package/dist/ts4.2/room/data-track/packet/constants.d.ts +20 -20
  114. package/dist/ts4.2/room/data-track/packet/errors.d.ts +40 -40
  115. package/dist/ts4.2/room/data-track/packet/extensions.d.ts +69 -69
  116. package/dist/ts4.2/room/data-track/packet/index.d.ts +98 -98
  117. package/dist/ts4.2/room/data-track/packet/serializable.d.ts +13 -13
  118. package/dist/ts4.2/room/data-track/packetizer.d.ts +43 -43
  119. package/dist/ts4.2/room/data-track/track-interfaces.d.ts +23 -23
  120. package/dist/ts4.2/room/data-track/types.d.ts +22 -22
  121. package/dist/ts4.2/room/data-track/utils.d.ts +60 -60
  122. package/dist/ts4.2/room/debounce.d.ts +11 -11
  123. package/dist/ts4.2/room/defaults.d.ts +9 -9
  124. package/dist/ts4.2/room/errors.d.ts +180 -162
  125. package/dist/ts4.2/room/events.d.ts +638 -637
  126. package/dist/ts4.2/room/participant/LocalParticipant.d.ts +287 -287
  127. package/dist/ts4.2/room/participant/Participant.d.ts +142 -144
  128. package/dist/ts4.2/room/participant/ParticipantTrackPermission.d.ts +26 -26
  129. package/dist/ts4.2/room/participant/RemoteParticipant.d.ts +85 -86
  130. package/dist/ts4.2/room/participant/publishUtils.d.ts +53 -53
  131. package/dist/ts4.2/room/rpc/client/RpcClientManager.d.ts +43 -43
  132. package/dist/ts4.2/room/rpc/client/events.d.ts +8 -8
  133. package/dist/ts4.2/room/rpc/index.d.ts +7 -7
  134. package/dist/ts4.2/room/rpc/server/RpcServerManager.d.ts +44 -44
  135. package/dist/ts4.2/room/rpc/server/events.d.ts +8 -8
  136. package/dist/ts4.2/room/rpc/utils.d.ts +131 -131
  137. package/dist/ts4.2/room/stats.d.ts +71 -71
  138. package/dist/ts4.2/room/statsSummary.d.ts +13 -13
  139. package/dist/ts4.2/room/timers.d.ts +12 -12
  140. package/dist/ts4.2/room/token-source/TokenSource.d.ts +82 -82
  141. package/dist/ts4.2/room/token-source/types.d.ts +70 -70
  142. package/dist/ts4.2/room/token-source/utils.d.ts +8 -8
  143. package/dist/ts4.2/room/track/FrameMetadataExtractor.d.ts +19 -19
  144. package/dist/ts4.2/room/track/LocalAudioTrack.d.ts +39 -42
  145. package/dist/ts4.2/room/track/LocalTrack.d.ts +125 -125
  146. package/dist/ts4.2/room/track/LocalTrackPublication.d.ts +42 -42
  147. package/dist/ts4.2/room/track/LocalVideoTrack.d.ts +102 -100
  148. package/dist/ts4.2/room/track/RemoteAudioTrack.d.ts +55 -55
  149. package/dist/ts4.2/room/track/RemoteTrack.d.ts +38 -38
  150. package/dist/ts4.2/room/track/RemoteTrackPublication.d.ts +72 -75
  151. package/dist/ts4.2/room/track/RemoteVideoTrack.d.ts +73 -76
  152. package/dist/ts4.2/room/track/Track.d.ts +156 -166
  153. package/dist/ts4.2/room/track/TrackPublication.d.ts +75 -81
  154. package/dist/ts4.2/room/track/create.d.ts +25 -25
  155. package/dist/ts4.2/room/track/facingMode.d.ts +41 -41
  156. package/dist/ts4.2/room/track/options.d.ts +403 -403
  157. package/dist/ts4.2/room/track/processor/types.d.ts +31 -31
  158. package/dist/ts4.2/room/track/record.d.ts +13 -13
  159. package/dist/ts4.2/room/track/types.d.ts +28 -28
  160. package/dist/ts4.2/room/track/utils.d.ts +60 -47
  161. package/dist/ts4.2/room/types.d.ts +127 -127
  162. package/dist/ts4.2/room/utils.d.ts +246 -214
  163. package/dist/ts4.2/test/MockMediaStreamTrack.d.ts +26 -26
  164. package/dist/ts4.2/test/compressionStreamStubs.d.ts +12 -0
  165. package/dist/ts4.2/test/mocks.d.ts +12 -12
  166. package/dist/ts4.2/test/promiseState.d.ts +12 -12
  167. package/dist/ts4.2/test/signalToken.d.ts +26 -26
  168. package/dist/ts4.2/type-polyfills/non-shared-typed-arrays.d.ts +2 -2
  169. package/dist/ts4.2/utils/AsyncQueue.d.ts +23 -23
  170. package/dist/ts4.2/utils/TypedPromise.d.ts +17 -17
  171. package/dist/ts4.2/utils/abort-signal-polyfill.d.ts +13 -13
  172. package/dist/ts4.2/utils/browserParser.d.ts +13 -13
  173. package/dist/ts4.2/utils/camelToSnakeCase.d.ts +8 -8
  174. package/dist/ts4.2/utils/cloneDeep.d.ts +2 -2
  175. package/dist/ts4.2/utils/dataPacketBuffer.d.ts +34 -34
  176. package/dist/ts4.2/utils/deferrable-map.d.ts +32 -32
  177. package/dist/ts4.2/utils/machineInspector.d.ts +54 -54
  178. package/dist/ts4.2/utils/serializer.d.ts +48 -48
  179. package/dist/ts4.2/utils/subscribeToEvents.d.ts +15 -15
  180. package/dist/ts4.2/utils/ttlmap.d.ts +20 -20
  181. package/dist/ts4.2/version.d.ts +15 -15
  182. package/package.json +5 -4
  183. package/src/api/SignalClient.e2e.test.ts +1 -3
  184. package/src/api/SignalClient.test.ts +160 -10
  185. package/src/api/SignalClient.ts +75 -54
  186. package/src/options.ts +16 -0
  187. package/src/room/PCTransport.test.ts +183 -7
  188. package/src/room/PCTransport.ts +197 -36
  189. package/src/room/PCTransportManager.ts +3 -1
  190. package/src/room/RTCEngine.test.ts +84 -0
  191. package/src/room/RTCEngine.ts +24 -5
  192. package/src/room/Room.test.ts +32 -6
  193. package/src/room/Room.ts +26 -6
  194. package/src/room/data-stream/incoming/IncomingDataStreamManager.test.ts +16 -20
  195. package/src/room/data-stream/incoming/IncomingDataStreamManager.ts +5 -5
  196. package/src/room/data-stream/outgoing/OutgoingDataStreamManager.test.ts +60 -39
  197. package/src/room/data-stream/outgoing/OutgoingDataStreamManager.ts +4 -4
  198. package/src/room/defaults.ts +1 -0
  199. package/src/room/errors.test.ts +36 -0
  200. package/src/room/errors.ts +27 -0
  201. package/src/room/events.ts +2 -1
  202. package/src/room/participant/publishUtils.ts +0 -19
  203. package/src/room/rpc/client/RpcClientManager.test.ts +51 -0
  204. package/src/room/rpc/client/RpcClientManager.ts +32 -15
  205. package/src/room/track/LocalTrack.ts +18 -7
  206. package/src/room/track/LocalVideoTrack.ts +10 -3
  207. package/src/room/track/RemoteAudioTrack.ts +3 -3
  208. package/src/room/track/RemoteVideoTrack.test.ts +210 -0
  209. package/src/room/track/RemoteVideoTrack.ts +29 -3
  210. package/src/room/track/utils.test.ts +201 -2
  211. package/src/room/track/utils.ts +88 -0
  212. package/src/room/utils.test.ts +124 -0
  213. package/src/room/utils.ts +70 -0
  214. package/src/test/compressionStreamStubs.ts +53 -0
@@ -1,262 +1,269 @@
1
- import type { AddTrackRequest, ConnectionQualityUpdate, JoinResponse, RegionSettings, StreamStateUpdate, SubscriptionPermissionUpdate, SubscriptionResponse } from '@livekit/protocol';
2
- import { DataPacket, DataTrackSubscriberHandles, DisconnectReason, Encryption_Type, ParticipantInfo, PublishDataTrackResponse, ReconnectReason, RequestResponse, Room as RoomModel, RoomMovedResponse, ServerInfo, SpeakerInfo, SubscribedQualityUpdate, TrackInfo, TrackUnpublishedResponse, Transcription, UnpublishDataTrackResponse } from '@livekit/protocol';
3
- import type TypedEventEmitter from 'typed-emitter';
4
- import type { SignalOptions } from '../api/SignalClient';
5
- import { SignalClient } from '../api/SignalClient';
6
- import type { BaseE2EEManager } from '../e2ee/E2eeManager';
7
- import type { InternalRoomOptions } from '../options';
8
- import type { NonSharedUint8Array } from '../type-polyfills/non-shared-typed-arrays';
9
- import PCTransport from './PCTransport';
10
- import { PCTransportManager } from './PCTransportManager';
11
- import { DataChannelKind } from './data-channel/types';
12
- import { DataTrackInfo } from './data-track/types';
13
- import type LocalTrack from './track/LocalTrack';
14
- import type LocalTrackPublication from './track/LocalTrackPublication';
15
- import LocalVideoTrack from './track/LocalVideoTrack';
16
- import type { SimulcastTrackInfo } from './track/LocalVideoTrack';
17
- import type RemoteTrackPublication from './track/RemoteTrackPublication';
18
- import type { Track } from './track/Track';
19
- import type { TrackPublishOptions, VideoCodec } from './track/options';
20
- export { DataChannelKind };
21
- declare const RTCEngine_base: new () => TypedEventEmitter<EngineEventCallbacks>;
22
- /** @internal */
23
- export default class RTCEngine extends RTCEngine_base {
24
- private options;
25
- client: SignalClient;
26
- rtcConfig: RTCConfiguration;
27
- peerConnectionTimeout: number;
28
- fullReconnectOnNext: boolean;
29
- pcManager?: PCTransportManager;
30
- /**
31
- * @internal
32
- */
33
- latestJoinResponse?: JoinResponse;
34
- /**
35
- * @internal
36
- */
37
- latestRemoteOfferId: number;
38
- /** @internal */
39
- e2eeManager: BaseE2EEManager | undefined;
40
- get isClosed(): boolean;
41
- get isNewlyCreated(): boolean;
42
- get pendingReconnect(): boolean;
43
- get serverVersion(): string | undefined;
44
- /**
45
- * Owns the data channels: the three flow-controlled publisher wrappers (engine-lifetime; the
46
- * RTCDataChannel handles underneath are attached/detached as peer connections come and go, with
47
- * waiter invalidation built into the turnover) plus the subscriber-side receive handles.
48
- */
49
- private dataChannels;
50
- private get reliableChannel();
51
- private get lossyChannel();
52
- private get dataTrackChannel();
53
- private subscriberPrimary;
54
- private pcState;
55
- private _isClosed;
56
- private _isNewlyCreated;
57
- private pendingTrackResolvers;
58
- private url?;
59
- private token?;
60
- private signalOpts?;
61
- private reconnectAttempts;
62
- private reconnectStart;
63
- private clientConfiguration?;
64
- private attemptingReconnect;
65
- private reconnectPolicy;
66
- private reconnectTimeout?;
67
- private participantSid?;
68
- /** keeps track of how often an initial join connection has been tried */
69
- private joinAttempts;
70
- /** specifies how often an initial join connection is allowed to retry */
71
- private maxJoinAttempts;
72
- private closingLock;
73
- private dataProcessLock;
74
- private shouldFailNext;
75
- private shouldFailOnV1Path;
76
- private regionStrategy?;
77
- private log;
78
- private loggerOptions;
79
- private publisherConnectionPromise;
80
- private reliableReceivedState;
81
- private midToTrackId;
82
- /** used to indicate whether the browser is currently waiting to reconnect */
83
- private isWaitingForNetworkReconnect;
84
- /** set while the local participant's connection quality is `LOST`; forces a full reconnect on timeout */
85
- private lostQualityTimeout?;
86
- /** timestamp (ms) the primary transport entered `CONNECTING`, used to bound how long we tolerate it */
87
- private transportConnectingSince?;
88
- constructor(options: InternalRoomOptions);
89
- /** @internal */
90
- get logContext(): {
91
- room: string | undefined;
92
- roomID: string | undefined;
93
- participant: string | undefined;
94
- participantID: string | undefined;
95
- };
96
- join(url: string, token: string, opts: SignalOptions, abortSignal?: AbortSignal,
97
- /** setting this to true results in dual peer connection mode being used */
98
- useV0Path?: boolean): Promise<{
99
- joinResponse: JoinResponse;
100
- serverInfo: Partial<ServerInfo>;
101
- }>;
102
- /**
103
- * @param reason why the session is ending, recorded by the signal lifecycle. Worth passing
104
- * wherever the caller knows more than "someone called close" — the server's leave reason, or
105
- * having given up on reconnecting.
106
- */
107
- close(reason?: string): Promise<void>;
108
- cleanupPeerConnections(): Promise<void>;
109
- cleanupLossyDataStats(): void;
110
- cleanupClient(reason?: string): Promise<void>;
111
- addTrack(req: AddTrackRequest): Promise<TrackInfo>;
112
- /**
113
- * Removes sender from PeerConnection, returning true if it was removed successfully
114
- * and a negotiation is necessary
115
- * @param sender
116
- * @returns
117
- */
118
- removeTrack(sender: RTCRtpSender): boolean;
119
- updateMuteStatus(trackSid: string, muted: boolean): void;
120
- get dataSubscriberReadyState(): string | undefined;
121
- getConnectedServerAddress(): Promise<string | undefined>;
122
- setRegionStrategy(strategy: RegionStrategy | undefined): void;
123
- private configure;
124
- private setupSignalClientCallbacks;
125
- private makeRTCConfiguration;
126
- /**
127
- * Populate the publisher PC so its first offer carries the data channels + recvonly media
128
- * sections. Required for every V1 connection: Firefox only binds receive decoders for media
129
- * present in that first offer, and the offer-with-join path needs the sections to
130
- * build a meaningful initial offer. Must be called on a configured pcManager.
131
- */
132
- private applyInitialPublisherLayout;
133
- private addMediaSections;
134
- private createDataChannels;
135
- private handleDataChannel;
136
- /** Normalizes an incoming data-channel message into bytes, or logs and returns undefined. */
137
- private decodeDataMessage;
138
- private handleDataMessage;
139
- private handleDataTrackMessage;
140
- private handleDataError;
141
- private handleDataChannelClose;
142
- createSender(track: LocalTrack, opts: TrackPublishOptions, encodings?: RTCRtpEncodingParameters[]): Promise<RTCRtpSender>;
143
- createSimulcastSender(track: LocalVideoTrack, simulcastTrack: SimulcastTrackInfo, opts: TrackPublishOptions, encodings?: RTCRtpEncodingParameters[]): Promise<RTCRtpSender | undefined>;
144
- private get frameMetadataWorker();
145
- private setupFrameMetadataSender;
146
- private createTransceiverRTCRtpSender;
147
- private createSimulcastTransceiverSender;
148
- private createRTCRtpSender;
149
- private handleDisconnect;
150
- /**
151
- * A sustained local `LOST` while connected and publishing means the server isn't receiving
152
- * our media, so force a full reconnect; any non-`LOST` value cancels a pending trigger.
153
- */
154
- private handleLocalConnectionQuality;
155
- private scheduleLostQualityReconnect;
156
- private clearLostQualityTimeout;
157
- /** Whether the publisher currently has any sender with a live track. */
158
- private hasActivePublisherSenders;
159
- /**
160
- * Forces a full reconnect while keeping the engine (and its saved credentials) alive. Used by
161
- * Room's connection-reconcile safety net when the transport silently died but we looked connected.
162
- * @internal
163
- */
164
- reconnect(reason?: ReconnectReason): void;
165
- private attemptReconnect;
166
- private getNextRetryDelay;
167
- private restartConnection;
168
- private resumeConnection;
169
- waitForPCInitialConnection(timeout?: number, abortController?: AbortController): Promise<void>;
170
- private waitForPCReconnected;
171
- waitForRestarted: () => Promise<void>;
172
- /** @internal */
173
- publishRpcAck(destinationIdentity: string, requestId: string): Promise<void>;
174
- sendDataPacket(packet: DataPacket,
175
- /** Data-track frames don't come through here — they're sent pre-serialized via {@link sendDataTrackFrame }. */
176
- kind: Exclude<DataChannelKind, DataChannelKind.DATA_TRACK_LOSSY>): Promise<void>;
177
- /**
178
- * Sends pre-serialized bytes on the data-track channel. This is the one send path that doesn't
179
- * go through {@link sendDataPacket} — Room's `packetAvailable` handler calls it directly with
180
- * bytes the data-track pipeline already serialized.
181
- *
182
- * @internal
183
- */
184
- sendDataTrackFrame(bytes: NonSharedUint8Array): Promise<void>;
185
- private resendReliableMessagesForResume;
186
- /** The flow-control gate for `kind` — see {@link FlowControlledDataChannel}. */
187
- private flowControlFor;
188
- /**
189
- * Resolves once the caller may send on the `kind` channel — see
190
- * {@link FlowControlledDataChannel.waitForHeadroomWithLock}.
191
- */
192
- waitForBufferHeadroom(kind: DataChannelKind): Promise<void>;
193
- /**
194
- * @internal
195
- */
196
- ensureDataTransportConnected(kind: DataChannelKind, subscriber?: boolean): Promise<void>;
197
- private ensurePublisherConnected;
198
- verifyTransport(): boolean;
199
- /** @internal */
200
- negotiate(): Promise<void>;
201
- dataChannelForKind(kind: DataChannelKind, sub?: boolean): RTCDataChannel | undefined;
202
- /** @internal */
203
- sendSyncState(remoteTracks: RemoteTrackPublication[], localTracks: LocalTrackPublication[], localDataTrackInfos: Array<DataTrackInfo>): void;
204
- failNext(): void;
205
- failNextV1Path(): void;
206
- private onRtpMapAvailable;
207
- private dataChannelsInfo;
208
- private clearReconnectTimeout;
209
- private clearPendingReconnect;
210
- private handleBrowserOnLine;
211
- private handleBrowserOffline;
212
- private registerOnLineListener;
213
- private deregisterOnLineListener;
214
- getTrackIdForReceiver(receiver: RTCRtpReceiver): string | undefined;
215
- }
216
- export type EngineEventCallbacks = {
217
- connected: (joinResp: JoinResponse) => void;
218
- disconnected: (reason?: DisconnectReason) => void;
219
- resuming: () => void;
220
- resumed: () => void;
221
- restarting: () => void;
222
- restarted: () => void;
223
- signalResumed: () => void;
224
- signalRestarted: (joinResp: JoinResponse) => void;
225
- closing: () => void;
226
- mediaTrackAdded: (track: MediaStreamTrack, streams: MediaStream, receiver: RTCRtpReceiver) => void;
227
- activeSpeakersUpdate: (speakers: Array<SpeakerInfo>) => void;
228
- dataPacketReceived: (packet: DataPacket, encryptionType: Encryption_Type) => void;
229
- transcriptionReceived: (transcription: Transcription) => void;
230
- transportsCreated: (publisher: PCTransport, subscriber?: PCTransport) => void;
231
- /** @internal */
232
- trackSenderAdded: (track: Track, sender: RTCRtpSender) => void;
233
- rtpVideoMapUpdate: (rtpMap: Map<number, VideoCodec>) => void;
234
- dcBufferStatusChanged: (isLow: boolean, kind: DataChannelKind) => void;
235
- participantUpdate: (infos: ParticipantInfo[]) => void;
236
- roomUpdate: (room: RoomModel) => void;
237
- roomMoved: (room: RoomMovedResponse) => void;
238
- connectionQualityUpdate: (update: ConnectionQualityUpdate) => void;
239
- speakersChanged: (speakerUpdates: SpeakerInfo[]) => void;
240
- streamStateChanged: (update: StreamStateUpdate) => void;
241
- subscriptionError: (resp: SubscriptionResponse) => void;
242
- subscriptionPermissionUpdate: (update: SubscriptionPermissionUpdate) => void;
243
- subscribedQualityUpdate: (update: SubscribedQualityUpdate) => void;
244
- localTrackUnpublished: (unpublishedResponse: TrackUnpublishedResponse) => void;
245
- localTrackSubscribed: (trackSid: string) => void;
246
- remoteMute: (trackSid: string, muted: boolean) => void;
247
- offline: () => void;
248
- signalRequestResponse: (response: RequestResponse) => void;
249
- signalConnected: (joinResp: JoinResponse) => void;
250
- publishDataTrackResponse: (event: PublishDataTrackResponse) => void;
251
- unPublishDataTrackResponse: (event: UnpublishDataTrackResponse) => void;
252
- dataTrackSubscriberHandles: (event: DataTrackSubscriberHandles) => void;
253
- dataTrackPacketReceived: (packet: Uint8Array) => void;
254
- joined: (joinResponse: JoinResponse) => void;
255
- tokenRefreshed: (token: string) => void;
256
- serverRegionsReported: (regions: RegionSettings) => void;
257
- };
258
- export interface RegionStrategy {
259
- getNextUrl(abortSignal?: AbortSignal): Promise<string | null>;
260
- resetAttempts(): void;
261
- }
262
- //# sourceMappingURL=RTCEngine.d.ts.map
1
+ import type { AddTrackRequest, ConnectionQualityUpdate, JoinResponse, RegionSettings, StreamStateUpdate, SubscriptionPermissionUpdate, SubscriptionResponse } from '@livekit/protocol';
2
+ import { DataPacket, DataTrackSubscriberHandles, DisconnectReason, Encryption_Type, ParticipantInfo, PublishDataTrackResponse, ReconnectReason, RequestResponse, Room as RoomModel, RoomMovedResponse, ServerInfo, SpeakerInfo, SubscribedQualityUpdate, TrackInfo, TrackUnpublishedResponse, Transcription, UnpublishDataTrackResponse } from '@livekit/protocol';
3
+ import type TypedEventEmitter from 'typed-emitter';
4
+ import type { SignalOptions } from '../api/SignalClient';
5
+ import { SignalClient } from '../api/SignalClient';
6
+ import type { BaseE2EEManager } from '../e2ee/E2eeManager';
7
+ import type { InternalRoomOptions } from '../options';
8
+ import type { NonSharedUint8Array } from '../type-polyfills/non-shared-typed-arrays';
9
+ import PCTransport from './PCTransport';
10
+ import { PCTransportManager } from './PCTransportManager';
11
+ import { DataChannelKind } from './data-channel/types';
12
+ import { DataTrackInfo } from './data-track/types';
13
+ import type LocalTrack from './track/LocalTrack';
14
+ import type LocalTrackPublication from './track/LocalTrackPublication';
15
+ import LocalVideoTrack from './track/LocalVideoTrack';
16
+ import type { SimulcastTrackInfo } from './track/LocalVideoTrack';
17
+ import type RemoteTrackPublication from './track/RemoteTrackPublication';
18
+ import type { Track } from './track/Track';
19
+ import type { TrackPublishOptions, VideoCodec } from './track/options';
20
+ export { DataChannelKind };
21
+ declare const RTCEngine_base: new () => TypedEventEmitter<EngineEventCallbacks>;
22
+ /** @internal */
23
+ export default class RTCEngine extends RTCEngine_base {
24
+ private options;
25
+ client: SignalClient;
26
+ rtcConfig: RTCConfiguration;
27
+ peerConnectionTimeout: number;
28
+ fullReconnectOnNext: boolean;
29
+ pcManager?: PCTransportManager;
30
+ /**
31
+ * @internal
32
+ */
33
+ latestJoinResponse?: JoinResponse;
34
+ /**
35
+ * @internal
36
+ */
37
+ latestRemoteOfferId: number;
38
+ /** @internal */
39
+ e2eeManager: BaseE2EEManager | undefined;
40
+ get isClosed(): boolean;
41
+ get isNewlyCreated(): boolean;
42
+ get pendingReconnect(): boolean;
43
+ get serverVersion(): (string | undefined);
44
+ /**
45
+ * Owns the data channels: the three flow-controlled publisher wrappers (engine-lifetime; the
46
+ * RTCDataChannel handles underneath are attached/detached as peer connections come and go, with
47
+ * waiter invalidation built into the turnover) plus the subscriber-side receive handles.
48
+ */
49
+ private dataChannels;
50
+ private get reliableChannel();
51
+ private get lossyChannel();
52
+ private get dataTrackChannel();
53
+ private subscriberPrimary;
54
+ private pcState;
55
+ private _isClosed;
56
+ private _isNewlyCreated;
57
+ private pendingTrackResolvers;
58
+ private url?;
59
+ private token?;
60
+ private signalOpts?;
61
+ private reconnectAttempts;
62
+ private reconnectStart;
63
+ private clientConfiguration?;
64
+ private attemptingReconnect;
65
+ private reconnectPolicy;
66
+ private reconnectTimeout?;
67
+ private participantSid?;
68
+ /** keeps track of how often an initial join connection has been tried */
69
+ private joinAttempts;
70
+ /** specifies how often an initial join connection is allowed to retry */
71
+ private maxJoinAttempts;
72
+ private closingLock;
73
+ private dataProcessLock;
74
+ private shouldFailNext;
75
+ private shouldFailOnV1Path;
76
+ private regionStrategy?;
77
+ private log;
78
+ private loggerOptions;
79
+ private publisherConnectionPromise;
80
+ private reliableReceivedState;
81
+ private midToTrackId;
82
+ /** used to indicate whether the browser is currently waiting to reconnect */
83
+ private isWaitingForNetworkReconnect;
84
+ /** set while the local participant's connection quality is `LOST`; forces a full reconnect on timeout */
85
+ private lostQualityTimeout?;
86
+ /** timestamp (ms) the primary transport entered `CONNECTING`, used to bound how long we tolerate it */
87
+ private transportConnectingSince?;
88
+ /**
89
+ * Abort handlers for the in-flight `negotiate()` calls, which a single central
90
+ * Closing/Restarting listener pair fans out to. Registering a listener pair per call instead
91
+ * accumulates them on the engine emitter and trips its max-listener warning under
92
+ * renegotiation bursts.
93
+ */
94
+ private pendingNegotiationAborts;
95
+ constructor(options: InternalRoomOptions);
96
+ get logContext(): {
97
+ room: string | undefined;
98
+ roomID: string | undefined;
99
+ participant: string | undefined;
100
+ participantID: string | undefined;
101
+ };
102
+ join(url: string, token: string, opts: SignalOptions, abortSignal?: AbortSignal,
103
+ /** setting this to true results in dual peer connection mode being used */
104
+ useV0Path?: boolean): Promise<{
105
+ joinResponse: JoinResponse;
106
+ serverInfo: Partial<ServerInfo>;
107
+ }>;
108
+ /**
109
+ * @param reason why the session is ending, recorded by the signal lifecycle. Worth passing
110
+ * wherever the caller knows more than "someone called close" — the server's leave reason, or
111
+ * having given up on reconnecting.
112
+ */
113
+ close(reason?: string): Promise<void>;
114
+ cleanupPeerConnections(): Promise<void>;
115
+ cleanupLossyDataStats(): void;
116
+ cleanupClient(reason?: string): Promise<void>;
117
+ addTrack(req: AddTrackRequest): Promise<TrackInfo>;
118
+ /**
119
+ * Removes sender from PeerConnection, returning true if it was removed successfully
120
+ * and a negotiation is necessary
121
+ * @param sender
122
+ * @returns
123
+ */
124
+ removeTrack(sender: RTCRtpSender): boolean;
125
+ updateMuteStatus(trackSid: string, muted: boolean): void;
126
+ get dataSubscriberReadyState(): (string | undefined);
127
+ getConnectedServerAddress(): Promise<string | undefined>;
128
+ setRegionStrategy(strategy: RegionStrategy | undefined): void;
129
+ private configure;
130
+ private setupSignalClientCallbacks;
131
+ private makeRTCConfiguration;
132
+ /**
133
+ * Populate the publisher PC so its first offer carries the data channels + recvonly media
134
+ * sections. Required for every V1 connection: Firefox only binds receive decoders for media
135
+ * present in that first offer, and the offer-with-join path needs the sections to
136
+ * build a meaningful initial offer. Must be called on a configured pcManager.
137
+ */
138
+ private applyInitialPublisherLayout;
139
+ private addMediaSections;
140
+ private createDataChannels;
141
+ private handleDataChannel;
142
+ /** Normalizes an incoming data-channel message into bytes, or logs and returns undefined. */
143
+ private decodeDataMessage;
144
+ private handleDataMessage;
145
+ private handleDataTrackMessage;
146
+ private handleDataError;
147
+ private handleDataChannelClose;
148
+ createSender(track: LocalTrack, opts: TrackPublishOptions, encodings?: RTCRtpEncodingParameters[]): Promise<RTCRtpSender>;
149
+ createSimulcastSender(track: LocalVideoTrack, simulcastTrack: SimulcastTrackInfo, opts: TrackPublishOptions, encodings?: RTCRtpEncodingParameters[]): Promise<RTCRtpSender | undefined>;
150
+ private get frameMetadataWorker();
151
+ private setupFrameMetadataSender;
152
+ private createTransceiverRTCRtpSender;
153
+ private createSimulcastTransceiverSender;
154
+ private createRTCRtpSender;
155
+ private handleDisconnect;
156
+ /**
157
+ * A sustained local `LOST` while connected and publishing means the server isn't receiving
158
+ * our media, so force a full reconnect; any non-`LOST` value cancels a pending trigger.
159
+ */
160
+ private handleLocalConnectionQuality;
161
+ private scheduleLostQualityReconnect;
162
+ private clearLostQualityTimeout;
163
+ /** Whether the publisher currently has any sender with a live track. */
164
+ private hasActivePublisherSenders;
165
+ /**
166
+ * Forces a full reconnect while keeping the engine (and its saved credentials) alive. Used by
167
+ * Room's connection-reconcile safety net when the transport silently died but we looked connected.
168
+ * @internal
169
+ */
170
+ reconnect(reason?: ReconnectReason): void;
171
+ private attemptReconnect;
172
+ private getNextRetryDelay;
173
+ private restartConnection;
174
+ private resumeConnection;
175
+ waitForPCInitialConnection(timeout?: number, abortController?: AbortController): Promise<void>;
176
+ private waitForPCReconnected;
177
+ waitForRestarted: () => Promise<void>;
178
+ /** @internal */
179
+ publishRpcAck(destinationIdentity: string, requestId: string): Promise<void>;
180
+ sendDataPacket(packet: DataPacket,
181
+ /** Data-track frames don't come through here — they're sent pre-serialized via {@link sendDataTrackFrame }. */
182
+ kind: Exclude<DataChannelKind, DataChannelKind.DATA_TRACK_LOSSY>): Promise<void>;
183
+ /**
184
+ * Sends pre-serialized bytes on the data-track channel. This is the one send path that doesn't
185
+ * go through {@link sendDataPacket} — Room's `packetAvailable` handler calls it directly with
186
+ * bytes the data-track pipeline already serialized.
187
+ *
188
+ * @internal
189
+ */
190
+ sendDataTrackFrame(bytes: NonSharedUint8Array): Promise<void>;
191
+ private resendReliableMessagesForResume;
192
+ /** The flow-control gate for `kind` — see {@link FlowControlledDataChannel}. */
193
+ private flowControlFor;
194
+ /**
195
+ * Resolves once the caller may send on the `kind` channel — see
196
+ * {@link FlowControlledDataChannel.waitForHeadroomWithLock}.
197
+ */
198
+ waitForBufferHeadroom(kind: DataChannelKind): Promise<void>;
199
+ /**
200
+ * @internal
201
+ */
202
+ ensureDataTransportConnected(kind: DataChannelKind, subscriber?: boolean): Promise<void>;
203
+ private ensurePublisherConnected;
204
+ verifyTransport(): boolean;
205
+ /** @internal */
206
+ negotiate(): Promise<void>;
207
+ dataChannelForKind(kind: DataChannelKind, sub?: boolean): RTCDataChannel | undefined;
208
+ /** @internal */
209
+ sendSyncState(remoteTracks: RemoteTrackPublication[], localTracks: LocalTrackPublication[], localDataTrackInfos: Array<DataTrackInfo>): void;
210
+ failNext(): void;
211
+ failNextV1Path(): void;
212
+ private onRtpMapAvailable;
213
+ private dataChannelsInfo;
214
+ private clearReconnectTimeout;
215
+ private clearPendingReconnect;
216
+ private handleBrowserOnLine;
217
+ private handleBrowserOffline;
218
+ private registerOnLineListener;
219
+ private deregisterOnLineListener;
220
+ getTrackIdForReceiver(receiver: RTCRtpReceiver): string | undefined;
221
+ }
222
+ export type EngineEventCallbacks = {
223
+ connected: (joinResp: JoinResponse) => void;
224
+ disconnected: (reason?: DisconnectReason) => void;
225
+ resuming: () => void;
226
+ resumed: () => void;
227
+ restarting: () => void;
228
+ restarted: () => void;
229
+ signalResumed: () => void;
230
+ signalRestarted: (joinResp: JoinResponse) => void;
231
+ closing: () => void;
232
+ mediaTrackAdded: (track: MediaStreamTrack, streams: MediaStream, receiver: RTCRtpReceiver) => void;
233
+ activeSpeakersUpdate: (speakers: Array<SpeakerInfo>) => void;
234
+ dataPacketReceived: (packet: DataPacket, encryptionType: Encryption_Type) => void;
235
+ transcriptionReceived: (transcription: Transcription) => void;
236
+ transportsCreated: (publisher: PCTransport, subscriber?: PCTransport) => void;
237
+ /** @internal */
238
+ trackSenderAdded: (track: Track, sender: RTCRtpSender) => void;
239
+ rtpVideoMapUpdate: (rtpMap: Map<number, VideoCodec>) => void;
240
+ dcBufferStatusChanged: (isLow: boolean, kind: DataChannelKind) => void;
241
+ participantUpdate: (infos: ParticipantInfo[]) => void;
242
+ roomUpdate: (room: RoomModel) => void;
243
+ roomMoved: (room: RoomMovedResponse) => void;
244
+ connectionQualityUpdate: (update: ConnectionQualityUpdate) => void;
245
+ speakersChanged: (speakerUpdates: SpeakerInfo[]) => void;
246
+ streamStateChanged: (update: StreamStateUpdate) => void;
247
+ subscriptionError: (resp: SubscriptionResponse) => void;
248
+ subscriptionPermissionUpdate: (update: SubscriptionPermissionUpdate) => void;
249
+ subscribedQualityUpdate: (update: SubscribedQualityUpdate) => void;
250
+ localTrackUnpublished: (unpublishedResponse: TrackUnpublishedResponse) => void;
251
+ localTrackSubscribed: (trackSid: string) => void;
252
+ remoteMute: (trackSid: string, muted: boolean) => void;
253
+ offline: () => void;
254
+ signalRequestResponse: (response: RequestResponse) => void;
255
+ signalConnected: (joinResp: JoinResponse) => void;
256
+ publishDataTrackResponse: (event: PublishDataTrackResponse) => void;
257
+ unPublishDataTrackResponse: (event: UnpublishDataTrackResponse) => void;
258
+ dataTrackSubscriberHandles: (event: DataTrackSubscriberHandles) => void;
259
+ dataTrackPacketReceived: (packet: Uint8Array) => void;
260
+ joined: (joinResponse: JoinResponse) => void;
261
+ tokenRefreshed: (token: string) => void;
262
+ serverRegionsReported: (regions: RegionSettings) => void;
263
+ requestSubscribedCodecRefresh: () => void;
264
+ };
265
+ export interface RegionStrategy {
266
+ getNextUrl(abortSignal?: AbortSignal): Promise<string | null>;
267
+ resetAttempts(): void;
268
+ }
269
+ //# sourceMappingURL=RTCEngine.d.ts.map
@@ -1,24 +1,24 @@
1
- /** Controls reconnecting of the client */
2
- export interface ReconnectPolicy {
3
- /** Called after disconnect was detected
4
- *
5
- * @returns {number | null} Amount of time in milliseconds to delay the next reconnect attempt, `null` signals to stop retrying.
6
- */
7
- nextRetryDelayInMs(context: ReconnectContext): number | null;
8
- }
9
- export interface ReconnectContext {
10
- /**
11
- * Number of failed reconnect attempts
12
- */
13
- readonly retryCount: number;
14
- /**
15
- * Elapsed amount of time in milliseconds since the disconnect.
16
- */
17
- readonly elapsedMs: number;
18
- /**
19
- * Reason for retrying
20
- */
21
- readonly retryReason?: Error;
22
- readonly serverUrl?: string;
23
- }
24
- //# sourceMappingURL=ReconnectPolicy.d.ts.map
1
+ /** Controls reconnecting of the client */
2
+ export interface ReconnectPolicy {
3
+ /** Called after disconnect was detected
4
+ *
5
+ * @returns {number | null} Amount of time in milliseconds to delay the next reconnect attempt, `null` signals to stop retrying.
6
+ */
7
+ nextRetryDelayInMs(context: ReconnectContext): number | null;
8
+ }
9
+ export interface ReconnectContext {
10
+ /**
11
+ * Number of failed reconnect attempts
12
+ */
13
+ readonly retryCount: number;
14
+ /**
15
+ * Elapsed amount of time in milliseconds since the disconnect.
16
+ */
17
+ readonly elapsedMs: number;
18
+ /**
19
+ * Reason for retrying
20
+ */
21
+ readonly retryReason?: Error;
22
+ readonly serverUrl?: string;
23
+ }
24
+ //# sourceMappingURL=ReconnectPolicy.d.ts.map