livekit-client 2.17.3 → 2.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist/livekit-client.e2ee.worker.js +1 -1
  2. package/dist/livekit-client.e2ee.worker.js.map +1 -1
  3. package/dist/livekit-client.e2ee.worker.mjs +8 -7
  4. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  5. package/dist/livekit-client.esm.mjs +7823 -5772
  6. package/dist/livekit-client.esm.mjs.map +1 -1
  7. package/dist/livekit-client.umd.js +1 -1
  8. package/dist/livekit-client.umd.js.map +1 -1
  9. package/dist/src/api/SignalClient.d.ts +12 -4
  10. package/dist/src/api/SignalClient.d.ts.map +1 -1
  11. package/dist/src/e2ee/constants.d.ts.map +1 -1
  12. package/dist/src/e2ee/types.d.ts +6 -0
  13. package/dist/src/e2ee/types.d.ts.map +1 -1
  14. package/dist/src/e2ee/utils.d.ts +2 -1
  15. package/dist/src/e2ee/utils.d.ts.map +1 -1
  16. package/dist/src/e2ee/worker/DataCryptor.d.ts.map +1 -1
  17. package/dist/src/e2ee/worker/FrameCryptor.d.ts.map +1 -1
  18. package/dist/src/index.d.ts +5 -4
  19. package/dist/src/index.d.ts.map +1 -1
  20. package/dist/src/room/PCTransport.d.ts +5 -0
  21. package/dist/src/room/PCTransport.d.ts.map +1 -1
  22. package/dist/src/room/PCTransportManager.d.ts +1 -1
  23. package/dist/src/room/PCTransportManager.d.ts.map +1 -1
  24. package/dist/src/room/RTCEngine.d.ts +27 -9
  25. package/dist/src/room/RTCEngine.d.ts.map +1 -1
  26. package/dist/src/room/Room.d.ts +13 -3
  27. package/dist/src/room/Room.d.ts.map +1 -1
  28. package/dist/src/room/data-stream/outgoing/OutgoingDataStreamManager.d.ts.map +1 -1
  29. package/dist/src/room/data-track/LocalDataTrack.d.ts +48 -0
  30. package/dist/src/room/data-track/LocalDataTrack.d.ts.map +1 -0
  31. package/dist/src/room/data-track/RemoteDataTrack.d.ts +46 -0
  32. package/dist/src/room/data-track/RemoteDataTrack.d.ts.map +1 -0
  33. package/dist/src/room/data-track/depacketizer.d.ts +6 -6
  34. package/dist/src/room/data-track/depacketizer.d.ts.map +1 -1
  35. package/dist/src/room/data-track/frame.d.ts +14 -0
  36. package/dist/src/room/data-track/frame.d.ts.map +1 -1
  37. package/dist/src/room/data-track/handle.d.ts +2 -2
  38. package/dist/src/room/data-track/handle.d.ts.map +1 -1
  39. package/dist/src/room/data-track/incoming/IncomingDataTrackManager.d.ts +104 -0
  40. package/dist/src/room/data-track/incoming/IncomingDataTrackManager.d.ts.map +1 -0
  41. package/dist/src/room/data-track/incoming/errors.d.ts +24 -0
  42. package/dist/src/room/data-track/incoming/errors.d.ts.map +1 -0
  43. package/dist/src/room/data-track/incoming/pipeline.d.ts +38 -0
  44. package/dist/src/room/data-track/incoming/pipeline.d.ts.map +1 -0
  45. package/dist/src/room/data-track/incoming/types.d.ts +20 -0
  46. package/dist/src/room/data-track/incoming/types.d.ts.map +1 -0
  47. package/dist/src/room/data-track/outgoing/OutgoingDataTrackManager.d.ts +63 -28
  48. package/dist/src/room/data-track/outgoing/OutgoingDataTrackManager.d.ts.map +1 -1
  49. package/dist/src/room/data-track/outgoing/errors.d.ts +20 -10
  50. package/dist/src/room/data-track/outgoing/errors.d.ts.map +1 -1
  51. package/dist/src/room/data-track/outgoing/pipeline.d.ts +9 -8
  52. package/dist/src/room/data-track/outgoing/pipeline.d.ts.map +1 -1
  53. package/dist/src/room/data-track/outgoing/types.d.ts +16 -7
  54. package/dist/src/room/data-track/outgoing/types.d.ts.map +1 -1
  55. package/dist/src/room/data-track/packet/errors.d.ts +2 -4
  56. package/dist/src/room/data-track/packet/errors.d.ts.map +1 -1
  57. package/dist/src/room/data-track/packet/extensions.d.ts +4 -4
  58. package/dist/src/room/data-track/packet/extensions.d.ts.map +1 -1
  59. package/dist/src/room/data-track/packet/index.d.ts +5 -5
  60. package/dist/src/room/data-track/packet/index.d.ts.map +1 -1
  61. package/dist/src/room/data-track/packet/serializable.d.ts +4 -4
  62. package/dist/src/room/data-track/packet/serializable.d.ts.map +1 -1
  63. package/dist/src/room/data-track/packetizer.d.ts +6 -6
  64. package/dist/src/room/data-track/packetizer.d.ts.map +1 -1
  65. package/dist/src/room/data-track/track-interfaces.d.ts +23 -0
  66. package/dist/src/room/data-track/track-interfaces.d.ts.map +1 -0
  67. package/dist/src/room/data-track/types.d.ts +15 -0
  68. package/dist/src/room/data-track/types.d.ts.map +1 -0
  69. package/dist/src/room/events.d.ts +24 -3
  70. package/dist/src/room/events.d.ts.map +1 -1
  71. package/dist/src/room/participant/LocalParticipant.d.ts +11 -1
  72. package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
  73. package/dist/src/room/participant/RemoteParticipant.d.ts +14 -1
  74. package/dist/src/room/participant/RemoteParticipant.d.ts.map +1 -1
  75. package/dist/src/room/token-source/TokenSource.d.ts +1 -1
  76. package/dist/src/room/token-source/TokenSource.d.ts.map +1 -1
  77. package/dist/src/room/token-source/types.d.ts +1 -0
  78. package/dist/src/room/token-source/types.d.ts.map +1 -1
  79. package/dist/src/room/utils.d.ts +2 -1
  80. package/dist/src/room/utils.d.ts.map +1 -1
  81. package/dist/src/utils/abort-signal-polyfill.d.ts +13 -0
  82. package/dist/src/utils/abort-signal-polyfill.d.ts.map +1 -0
  83. package/dist/src/utils/deferrable-map.d.ts +32 -0
  84. package/dist/src/utils/deferrable-map.d.ts.map +1 -0
  85. package/dist/src/utils/subscribeToEvents.d.ts +3 -0
  86. package/dist/src/utils/subscribeToEvents.d.ts.map +1 -1
  87. package/dist/ts4.2/api/SignalClient.d.ts +12 -4
  88. package/dist/ts4.2/e2ee/types.d.ts +6 -0
  89. package/dist/ts4.2/e2ee/utils.d.ts +2 -1
  90. package/dist/ts4.2/index.d.ts +5 -4
  91. package/dist/ts4.2/room/PCTransport.d.ts +5 -0
  92. package/dist/ts4.2/room/PCTransportManager.d.ts +1 -1
  93. package/dist/ts4.2/room/RTCEngine.d.ts +27 -9
  94. package/dist/ts4.2/room/Room.d.ts +13 -3
  95. package/dist/ts4.2/room/data-track/LocalDataTrack.d.ts +48 -0
  96. package/dist/ts4.2/room/data-track/RemoteDataTrack.d.ts +46 -0
  97. package/dist/ts4.2/room/data-track/depacketizer.d.ts +6 -6
  98. package/dist/ts4.2/room/data-track/frame.d.ts +14 -0
  99. package/dist/ts4.2/room/data-track/handle.d.ts +2 -2
  100. package/dist/ts4.2/room/data-track/incoming/IncomingDataTrackManager.d.ts +110 -0
  101. package/dist/ts4.2/room/data-track/incoming/errors.d.ts +24 -0
  102. package/dist/ts4.2/room/data-track/incoming/pipeline.d.ts +38 -0
  103. package/dist/ts4.2/room/data-track/incoming/types.d.ts +20 -0
  104. package/dist/ts4.2/room/data-track/outgoing/OutgoingDataTrackManager.d.ts +63 -29
  105. package/dist/ts4.2/room/data-track/outgoing/errors.d.ts +20 -10
  106. package/dist/ts4.2/room/data-track/outgoing/pipeline.d.ts +9 -8
  107. package/dist/ts4.2/room/data-track/outgoing/types.d.ts +16 -7
  108. package/dist/ts4.2/room/data-track/packet/errors.d.ts +2 -4
  109. package/dist/ts4.2/room/data-track/packet/extensions.d.ts +4 -4
  110. package/dist/ts4.2/room/data-track/packet/index.d.ts +5 -6
  111. package/dist/ts4.2/room/data-track/packet/serializable.d.ts +4 -4
  112. package/dist/ts4.2/room/data-track/packetizer.d.ts +6 -6
  113. package/dist/ts4.2/room/data-track/track-interfaces.d.ts +23 -0
  114. package/dist/ts4.2/room/data-track/types.d.ts +15 -0
  115. package/dist/ts4.2/room/events.d.ts +24 -3
  116. package/dist/ts4.2/room/participant/LocalParticipant.d.ts +11 -1
  117. package/dist/ts4.2/room/participant/RemoteParticipant.d.ts +14 -1
  118. package/dist/ts4.2/room/token-source/TokenSource.d.ts +1 -1
  119. package/dist/ts4.2/room/token-source/types.d.ts +1 -0
  120. package/dist/ts4.2/room/utils.d.ts +2 -1
  121. package/dist/ts4.2/utils/abort-signal-polyfill.d.ts +13 -0
  122. package/dist/ts4.2/utils/deferrable-map.d.ts +32 -0
  123. package/dist/ts4.2/utils/subscribeToEvents.d.ts +3 -0
  124. package/package.json +4 -2
  125. package/src/api/SignalClient.test.ts +9 -4
  126. package/src/api/SignalClient.ts +116 -9
  127. package/src/e2ee/constants.ts +1 -0
  128. package/src/e2ee/types.ts +6 -0
  129. package/src/e2ee/utils.ts +4 -3
  130. package/src/e2ee/worker/DataCryptor.ts +1 -4
  131. package/src/e2ee/worker/FrameCryptor.ts +1 -4
  132. package/src/e2ee/worker/ParticipantKeyHandler.ts +1 -1
  133. package/src/index.ts +6 -4
  134. package/src/room/PCTransport.ts +41 -1
  135. package/src/room/PCTransportManager.ts +1 -1
  136. package/src/room/RTCEngine.ts +274 -112
  137. package/src/room/Room.ts +152 -15
  138. package/src/room/data-stream/outgoing/OutgoingDataStreamManager.ts +9 -9
  139. package/src/room/data-track/LocalDataTrack.ts +126 -0
  140. package/src/room/data-track/RemoteDataTrack.ts +80 -0
  141. package/src/room/data-track/depacketizer.ts +23 -26
  142. package/src/room/data-track/frame.ts +28 -2
  143. package/src/room/data-track/handle.ts +2 -8
  144. package/src/room/data-track/incoming/IncomingDataTrackManager.test.ts +555 -0
  145. package/src/room/data-track/incoming/IncomingDataTrackManager.ts +589 -0
  146. package/src/room/data-track/incoming/errors.ts +57 -0
  147. package/src/room/data-track/incoming/pipeline.ts +121 -0
  148. package/src/room/data-track/incoming/types.ts +22 -0
  149. package/src/room/data-track/outgoing/OutgoingDataTrackManager.test.ts +240 -27
  150. package/src/room/data-track/outgoing/OutgoingDataTrackManager.ts +165 -84
  151. package/src/room/data-track/outgoing/errors.ts +40 -11
  152. package/src/room/data-track/outgoing/pipeline.ts +25 -23
  153. package/src/room/data-track/outgoing/types.ts +14 -6
  154. package/src/room/data-track/packet/errors.ts +2 -14
  155. package/src/room/data-track/packet/extensions.ts +21 -26
  156. package/src/room/data-track/packet/index.test.ts +22 -33
  157. package/src/room/data-track/packet/index.ts +4 -6
  158. package/src/room/data-track/packet/serializable.ts +4 -4
  159. package/src/room/data-track/packetizer.test.ts +2 -2
  160. package/src/room/data-track/packetizer.ts +7 -10
  161. package/src/room/data-track/track-interfaces.ts +53 -0
  162. package/src/room/data-track/types.ts +31 -0
  163. package/src/room/events.ts +26 -1
  164. package/src/room/participant/LocalParticipant.ts +57 -6
  165. package/src/room/participant/RemoteParticipant.ts +26 -1
  166. package/src/room/token-source/TokenSource.ts +8 -2
  167. package/src/room/token-source/types.ts +4 -0
  168. package/src/room/utils.ts +5 -1
  169. package/src/utils/abort-signal-polyfill.ts +63 -0
  170. package/src/utils/deferrable-map.ts +109 -0
  171. package/src/utils/subscribeToEvents.ts +18 -1
  172. package/dist/src/room/data-track/e2ee.d.ts +0 -12
  173. package/dist/src/room/data-track/e2ee.d.ts.map +0 -1
  174. package/dist/src/room/data-track/track.d.ts +0 -30
  175. package/dist/src/room/data-track/track.d.ts.map +0 -1
  176. package/dist/src/utils/throws.d.ts +0 -36
  177. package/dist/src/utils/throws.d.ts.map +0 -1
  178. package/dist/ts4.2/room/data-track/e2ee.d.ts +0 -12
  179. package/dist/ts4.2/room/data-track/track.d.ts +0 -30
  180. package/dist/ts4.2/utils/throws.d.ts +0 -39
  181. package/src/room/data-track/e2ee.ts +0 -14
  182. package/src/room/data-track/track.ts +0 -50
  183. package/src/utils/throws.ts +0 -42
@@ -1,7 +1,7 @@
1
+ import { type Throws } from '@livekit/throws-transformer/throws';
1
2
  import { LoggerNames, getLogger } from '../../logger';
2
- import { type Throws } from '../../utils/throws';
3
3
  import { LivekitReasonedError } from '../errors';
4
- import { type DataTrackFrame } from './frame';
4
+ import { type DataTrackFrameInternal } from './frame';
5
5
  import { DataTrackPacket, FrameMarker } from './packet';
6
6
  import { DataTrackExtensions } from './packet/extensions';
7
7
  import { U16_MAX_SIZE, WrapAroundUnsignedInt } from './utils';
@@ -21,7 +21,7 @@ type PartialFrame = {
21
21
 
22
22
  /** An error indicating a frame was dropped. */
23
23
  export class DataTrackDepacketizerDropError<
24
- Reason extends DataTrackDepacketizerDropReason,
24
+ Reason extends DataTrackDepacketizerDropReason = DataTrackDepacketizerDropReason,
25
25
  > extends LivekitReasonedError<Reason> {
26
26
  readonly name = 'DataTrackDepacketizerDropError';
27
27
 
@@ -38,9 +38,9 @@ export class DataTrackDepacketizerDropError<
38
38
  this.frameNumber = frameNumber;
39
39
  }
40
40
 
41
- static interrupted(frameNumber: number) {
41
+ static interrupted(frameNumber: number, newFrameNumber: number) {
42
42
  return new DataTrackDepacketizerDropError(
43
- 'Interrupted by the start of a new frame',
43
+ `Interrupted by the start of a new frame ${newFrameNumber}`,
44
44
  DataTrackDepacketizerDropReason.Interrupted,
45
45
  frameNumber,
46
46
  );
@@ -94,18 +94,12 @@ export default class DataTrackDepacketizer {
94
94
  /** Should be repeatedly called with received {@link DataTrackPacket}s - intermediate calls
95
95
  * aggregate the packet's state internally, and return null.
96
96
  *
97
- * Once this method is called with the final packet to form a frame, a new {@link DataTrackFrame}
97
+ * Once this method is called with the final packet to form a frame, a new {@link DataTrackFrameInternal}
98
98
  * is returned.*/
99
99
  push(
100
100
  packet: DataTrackPacket,
101
101
  options?: PushOptions,
102
- ): Throws<
103
- DataTrackFrame | null,
104
- | DataTrackDepacketizerDropError<DataTrackDepacketizerDropReason.Interrupted>
105
- | DataTrackDepacketizerDropError<DataTrackDepacketizerDropReason.BufferFull>
106
- | DataTrackDepacketizerDropError<DataTrackDepacketizerDropReason.UnknownFrame>
107
- | DataTrackDepacketizerDropError<DataTrackDepacketizerDropReason.Incomplete>
108
- > {
102
+ ): Throws<DataTrackFrameInternal | null, DataTrackDepacketizerDropError> {
109
103
  switch (packet.header.marker) {
110
104
  case FrameMarker.Single:
111
105
  return this.frameFromSingle(packet, options);
@@ -125,7 +119,7 @@ export default class DataTrackDepacketizer {
125
119
  packet: DataTrackPacket,
126
120
  options?: PushOptions,
127
121
  ): Throws<
128
- DataTrackFrame | null,
122
+ DataTrackFrameInternal | null,
129
123
  DataTrackDepacketizerDropError<DataTrackDepacketizerDropReason.Interrupted>
130
124
  > {
131
125
  if (packet.header.marker !== FrameMarker.Single) {
@@ -139,7 +133,10 @@ export default class DataTrackDepacketizer {
139
133
  if (options?.errorOnPartialFrames) {
140
134
  const frameNumber = this.partial.frameNumber;
141
135
  this.reset();
142
- throw DataTrackDepacketizerDropError.interrupted(frameNumber);
136
+ throw DataTrackDepacketizerDropError.interrupted(
137
+ frameNumber,
138
+ packet.header.frameNumber.value,
139
+ );
143
140
  } else {
144
141
  log.warn(
145
142
  `Data track frame ${this.partial.frameNumber} was interrupted by the start of a new frame, dropping.`,
@@ -167,10 +164,13 @@ export default class DataTrackDepacketizer {
167
164
  if (options?.errorOnPartialFrames) {
168
165
  const frameNumber = this.partial.frameNumber;
169
166
  this.reset();
170
- throw DataTrackDepacketizerDropError.interrupted(frameNumber);
167
+ throw DataTrackDepacketizerDropError.interrupted(
168
+ frameNumber,
169
+ packet.header.frameNumber.value,
170
+ );
171
171
  } else {
172
172
  log.warn(
173
- `Data track frame ${this.partial.frameNumber} was interrupted by the start of a new frame, dropping.`,
173
+ `Data track frame ${this.partial.frameNumber} was interrupted by the start of a new frame ${packet.header.frameNumber.value}, dropping.`,
174
174
  );
175
175
  }
176
176
  }
@@ -191,13 +191,7 @@ export default class DataTrackDepacketizer {
191
191
  /** Push to the existing partial frame. */
192
192
  private pushToPartial(
193
193
  packet: DataTrackPacket,
194
- ): Throws<
195
- DataTrackFrame | null,
196
- | DataTrackDepacketizerDropError<DataTrackDepacketizerDropReason.Interrupted>
197
- | DataTrackDepacketizerDropError<DataTrackDepacketizerDropReason.UnknownFrame>
198
- | DataTrackDepacketizerDropError<DataTrackDepacketizerDropReason.BufferFull>
199
- | DataTrackDepacketizerDropError<DataTrackDepacketizerDropReason.Incomplete>
200
- > {
194
+ ): Throws<DataTrackFrameInternal | null, DataTrackDepacketizerDropError> {
201
195
  if (packet.header.marker !== FrameMarker.Inter && packet.header.marker !== FrameMarker.Final) {
202
196
  // @throws-transformer ignore - this should be treated as a "panic" and not be caught
203
197
  throw new Error(
@@ -213,7 +207,10 @@ export default class DataTrackDepacketizer {
213
207
  if (packet.header.frameNumber.value !== this.partial.frameNumber) {
214
208
  const frameNumber = this.partial.frameNumber;
215
209
  this.reset();
216
- throw DataTrackDepacketizerDropError.interrupted(frameNumber);
210
+ throw DataTrackDepacketizerDropError.interrupted(
211
+ frameNumber,
212
+ packet.header.frameNumber.value,
213
+ );
217
214
  }
218
215
 
219
216
  // NOTE: this check will block reprocessing packets with duplicate sequence values if the
@@ -246,7 +243,7 @@ export default class DataTrackDepacketizer {
246
243
  partial: PartialFrame,
247
244
  endSequence: number,
248
245
  ): Throws<
249
- DataTrackFrame,
246
+ DataTrackFrameInternal,
250
247
  DataTrackDepacketizerDropError<DataTrackDepacketizerDropReason.Incomplete>
251
248
  > {
252
249
  const received = partial.payloads.size;
@@ -1,8 +1,34 @@
1
- import { DataTrackExtensions } from './packet/extensions';
2
- import DataTrackPacketizer from './packetizer';
1
+ import { DataTrackExtensions, DataTrackUserTimestampExtension } from './packet/extensions';
3
2
 
4
3
  /** A pair of payload bytes and packet extensions which can be fed into a {@link DataTrackPacketizer}. */
5
4
  export type DataTrackFrame = {
5
+ payload: Uint8Array;
6
+ userTimestamp?: bigint;
7
+ };
8
+
9
+ /** An internal representation o data track frame which contains all SFU metadata. */
10
+ export type DataTrackFrameInternal = {
6
11
  payload: Uint8Array;
7
12
  extensions: DataTrackExtensions;
8
13
  };
14
+
15
+ export const DataTrackFrameInternal = {
16
+ from(frame: DataTrackFrame) {
17
+ return {
18
+ payload: frame.payload,
19
+ extensions: new DataTrackExtensions({
20
+ userTimestamp: frame.userTimestamp
21
+ ? new DataTrackUserTimestampExtension(frame.userTimestamp)
22
+ : undefined,
23
+ }),
24
+ };
25
+ },
26
+ /** Converts from a DataTrackFrameInternal -> DataTrackFrame. Some internal information is
27
+ * discarded like e2ee encrption extension data. */
28
+ lossyIntoFrame(frame: DataTrackFrameInternal): DataTrackFrame {
29
+ return {
30
+ payload: frame.payload,
31
+ userTimestamp: frame.extensions.userTimestamp?.timestamp,
32
+ };
33
+ },
34
+ };
@@ -1,4 +1,4 @@
1
- import { type Throws } from '../../utils/throws';
1
+ import { type Throws } from '@livekit/throws-transformer/throws';
2
2
  import { LivekitReasonedError } from '../errors';
3
3
  import { U16_MAX_SIZE } from './utils';
4
4
 
@@ -43,13 +43,7 @@ export class DataTrackHandleError<
43
43
 
44
44
  export type DataTrackHandle = number;
45
45
  export const DataTrackHandle = {
46
- fromNumber(
47
- raw: number,
48
- ): Throws<
49
- DataTrackHandle,
50
- | DataTrackHandleError<DataTrackHandleErrorReason.TooLarge>
51
- | DataTrackHandleError<DataTrackHandleErrorReason.Reserved>
52
- > {
46
+ fromNumber(raw: number): Throws<DataTrackHandle, DataTrackHandleError> {
53
47
  if (raw === 0) {
54
48
  throw DataTrackHandleError.reserved(raw);
55
49
  }