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