livekit-client 2.15.7 → 2.15.9

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 (196) 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 +253 -118
  4. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  5. package/dist/livekit-client.esm.mjs +2442 -323
  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 +31 -2
  10. package/dist/src/api/SignalClient.d.ts.map +1 -1
  11. package/dist/src/api/WebSocketStream.d.ts +29 -0
  12. package/dist/src/api/WebSocketStream.d.ts.map +1 -0
  13. package/dist/src/api/utils.d.ts +2 -0
  14. package/dist/src/api/utils.d.ts.map +1 -1
  15. package/dist/src/connectionHelper/checks/publishVideo.d.ts.map +1 -1
  16. package/dist/src/connectionHelper/checks/turn.d.ts.map +1 -1
  17. package/dist/src/connectionHelper/checks/websocket.d.ts.map +1 -1
  18. package/dist/src/e2ee/E2eeManager.d.ts +16 -2
  19. package/dist/src/e2ee/E2eeManager.d.ts.map +1 -1
  20. package/dist/src/e2ee/types.d.ts +35 -1
  21. package/dist/src/e2ee/types.d.ts.map +1 -1
  22. package/dist/src/e2ee/utils.d.ts +2 -0
  23. package/dist/src/e2ee/utils.d.ts.map +1 -1
  24. package/dist/src/e2ee/worker/DataCryptor.d.ts +15 -0
  25. package/dist/src/e2ee/worker/DataCryptor.d.ts.map +1 -0
  26. package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts +3 -2
  27. package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts.map +1 -1
  28. package/dist/src/e2ee/worker/sifPayload.d.ts +6 -6
  29. package/dist/src/e2ee/worker/sifPayload.d.ts.map +1 -1
  30. package/dist/src/index.d.ts +5 -3
  31. package/dist/src/index.d.ts.map +1 -1
  32. package/dist/src/logger.d.ts +1 -0
  33. package/dist/src/logger.d.ts.map +1 -1
  34. package/dist/src/options.d.ts +10 -2
  35. package/dist/src/options.d.ts.map +1 -1
  36. package/dist/src/room/PCTransport.d.ts +1 -0
  37. package/dist/src/room/PCTransport.d.ts.map +1 -1
  38. package/dist/src/room/PCTransportManager.d.ts +6 -4
  39. package/dist/src/room/PCTransportManager.d.ts.map +1 -1
  40. package/dist/src/room/RTCEngine.d.ts +6 -3
  41. package/dist/src/room/RTCEngine.d.ts.map +1 -1
  42. package/dist/src/room/Room.d.ts +3 -2
  43. package/dist/src/room/Room.d.ts.map +1 -1
  44. package/dist/src/room/data-stream/incoming/IncomingDataStreamManager.d.ts +2 -2
  45. package/dist/src/room/data-stream/incoming/IncomingDataStreamManager.d.ts.map +1 -1
  46. package/dist/src/room/data-stream/outgoing/OutgoingDataStreamManager.d.ts.map +1 -1
  47. package/dist/src/room/defaults.d.ts.map +1 -1
  48. package/dist/src/room/errors.d.ts +2 -1
  49. package/dist/src/room/errors.d.ts.map +1 -1
  50. package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
  51. package/dist/src/room/participant/Participant.d.ts +2 -2
  52. package/dist/src/room/participant/Participant.d.ts.map +1 -1
  53. package/dist/src/room/token-source/TokenSource.d.ts +70 -0
  54. package/dist/src/room/token-source/TokenSource.d.ts.map +1 -0
  55. package/dist/src/room/token-source/types.d.ts +68 -0
  56. package/dist/src/room/token-source/types.d.ts.map +1 -0
  57. package/dist/src/room/token-source/utils.d.ts +5 -0
  58. package/dist/src/room/token-source/utils.d.ts.map +1 -0
  59. package/dist/src/room/track/LocalTrack.d.ts +1 -1
  60. package/dist/src/room/track/LocalTrack.d.ts.map +1 -1
  61. package/dist/src/room/track/options.d.ts +7 -3
  62. package/dist/src/room/track/options.d.ts.map +1 -1
  63. package/dist/src/room/track/utils.d.ts.map +1 -1
  64. package/dist/src/room/types.d.ts +1 -0
  65. package/dist/src/room/types.d.ts.map +1 -1
  66. package/dist/src/room/utils.d.ts +8 -1
  67. package/dist/src/room/utils.d.ts.map +1 -1
  68. package/dist/src/utils/camelToSnakeCase.d.ts +8 -0
  69. package/dist/src/utils/camelToSnakeCase.d.ts.map +1 -0
  70. package/dist/ts4.2/{src/api → api}/SignalClient.d.ts +31 -2
  71. package/dist/ts4.2/api/WebSocketStream.d.ts +29 -0
  72. package/dist/ts4.2/{src/api → api}/utils.d.ts +2 -0
  73. package/dist/ts4.2/{src/e2ee → e2ee}/E2eeManager.d.ts +16 -2
  74. package/dist/ts4.2/{src/e2ee → e2ee}/types.d.ts +35 -1
  75. package/dist/ts4.2/{src/e2ee → e2ee}/utils.d.ts +3 -0
  76. package/dist/ts4.2/e2ee/worker/DataCryptor.d.ts +15 -0
  77. package/dist/ts4.2/{src/e2ee → e2ee}/worker/ParticipantKeyHandler.d.ts +3 -2
  78. package/dist/ts4.2/{src/e2ee → e2ee}/worker/sifPayload.d.ts +6 -6
  79. package/dist/ts4.2/{src/index.d.ts → index.d.ts} +5 -3
  80. package/dist/ts4.2/{src/logger.d.ts → logger.d.ts} +1 -0
  81. package/dist/ts4.2/{src/options.d.ts → options.d.ts} +10 -2
  82. package/dist/ts4.2/{src/room → room}/PCTransport.d.ts +1 -0
  83. package/dist/ts4.2/{src/room → room}/PCTransportManager.d.ts +6 -4
  84. package/dist/ts4.2/{src/room → room}/RTCEngine.d.ts +6 -3
  85. package/dist/ts4.2/{src/room → room}/Room.d.ts +3 -2
  86. package/dist/ts4.2/{src/room → room}/data-stream/incoming/IncomingDataStreamManager.d.ts +2 -1
  87. package/dist/ts4.2/{src/room → room}/errors.d.ts +2 -1
  88. package/dist/ts4.2/{src/room → room}/participant/Participant.d.ts +2 -2
  89. package/dist/ts4.2/room/token-source/TokenSource.d.ts +71 -0
  90. package/dist/ts4.2/room/token-source/types.d.ts +68 -0
  91. package/dist/ts4.2/room/token-source/utils.d.ts +5 -0
  92. package/dist/ts4.2/{src/room → room}/track/LocalTrack.d.ts +1 -1
  93. package/dist/ts4.2/{src/room → room}/track/options.d.ts +10 -3
  94. package/dist/ts4.2/{src/room → room}/types.d.ts +1 -0
  95. package/dist/ts4.2/{src/room → room}/utils.d.ts +8 -1
  96. package/dist/ts4.2/utils/camelToSnakeCase.d.ts +8 -0
  97. package/package.json +11 -10
  98. package/src/api/SignalClient.test.ts +688 -0
  99. package/src/api/SignalClient.ts +308 -161
  100. package/src/api/WebSocketStream.test.ts +625 -0
  101. package/src/api/WebSocketStream.ts +118 -0
  102. package/src/api/utils.ts +10 -0
  103. package/src/connectionHelper/checks/publishVideo.ts +5 -0
  104. package/src/connectionHelper/checks/turn.ts +1 -0
  105. package/src/connectionHelper/checks/webrtc.ts +1 -1
  106. package/src/connectionHelper/checks/websocket.ts +1 -0
  107. package/src/e2ee/E2eeManager.ts +94 -2
  108. package/src/e2ee/types.ts +44 -1
  109. package/src/e2ee/utils.ts +16 -0
  110. package/src/e2ee/worker/DataCryptor.test.ts +271 -0
  111. package/src/e2ee/worker/DataCryptor.ts +147 -0
  112. package/src/e2ee/worker/ParticipantKeyHandler.ts +4 -3
  113. package/src/e2ee/worker/e2ee.worker.ts +47 -0
  114. package/src/e2ee/worker/sifPayload.ts +10 -6
  115. package/src/index.ts +16 -1
  116. package/src/logger.ts +1 -0
  117. package/src/options.ts +15 -2
  118. package/src/room/PCTransport.ts +7 -3
  119. package/src/room/PCTransportManager.ts +39 -35
  120. package/src/room/RTCEngine.ts +109 -22
  121. package/src/room/Room.ts +43 -18
  122. package/src/room/data-stream/incoming/IncomingDataStreamManager.ts +64 -17
  123. package/src/room/data-stream/outgoing/OutgoingDataStreamManager.ts +7 -0
  124. package/src/room/defaults.ts +1 -0
  125. package/src/room/errors.ts +3 -0
  126. package/src/room/participant/LocalParticipant.ts +8 -6
  127. package/src/room/participant/Participant.ts +6 -1
  128. package/src/room/token-source/TokenSource.ts +285 -0
  129. package/src/room/token-source/types.ts +84 -0
  130. package/src/room/token-source/utils.test.ts +63 -0
  131. package/src/room/token-source/utils.ts +40 -0
  132. package/src/room/track/LocalAudioTrack.ts +1 -1
  133. package/src/room/track/LocalTrack.ts +1 -1
  134. package/src/room/track/options.ts +12 -4
  135. package/src/room/track/utils.ts +10 -2
  136. package/src/room/types.ts +1 -0
  137. package/src/room/utils.ts +37 -4
  138. package/src/utils/camelToSnakeCase.ts +16 -0
  139. /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/ConnectionCheck.d.ts +0 -0
  140. /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/Checker.d.ts +0 -0
  141. /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/cloudRegion.d.ts +0 -0
  142. /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/connectionProtocol.d.ts +0 -0
  143. /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/publishAudio.d.ts +0 -0
  144. /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/publishVideo.d.ts +0 -0
  145. /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/reconnect.d.ts +0 -0
  146. /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/turn.d.ts +0 -0
  147. /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/webrtc.d.ts +0 -0
  148. /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/websocket.d.ts +0 -0
  149. /package/dist/ts4.2/{src/e2ee → e2ee}/KeyProvider.d.ts +0 -0
  150. /package/dist/ts4.2/{src/e2ee → e2ee}/constants.d.ts +0 -0
  151. /package/dist/ts4.2/{src/e2ee → e2ee}/errors.d.ts +0 -0
  152. /package/dist/ts4.2/{src/e2ee → e2ee}/events.d.ts +0 -0
  153. /package/dist/ts4.2/{src/e2ee → e2ee}/index.d.ts +0 -0
  154. /package/dist/ts4.2/{src/e2ee → e2ee}/worker/FrameCryptor.d.ts +0 -0
  155. /package/dist/ts4.2/{src/e2ee → e2ee}/worker/e2ee.worker.d.ts +0 -0
  156. /package/dist/ts4.2/{src/e2ee → e2ee}/worker/naluUtils.d.ts +0 -0
  157. /package/dist/ts4.2/{src/room → room}/DefaultReconnectPolicy.d.ts +0 -0
  158. /package/dist/ts4.2/{src/room → room}/DeviceManager.d.ts +0 -0
  159. /package/dist/ts4.2/{src/room → room}/ReconnectPolicy.d.ts +0 -0
  160. /package/dist/ts4.2/{src/room → room}/RegionUrlProvider.d.ts +0 -0
  161. /package/dist/ts4.2/{src/room → room}/attribute-typings.d.ts +0 -0
  162. /package/dist/ts4.2/{src/room → room}/data-stream/incoming/StreamReader.d.ts +0 -0
  163. /package/dist/ts4.2/{src/room → room}/data-stream/outgoing/OutgoingDataStreamManager.d.ts +0 -0
  164. /package/dist/ts4.2/{src/room → room}/data-stream/outgoing/StreamWriter.d.ts +0 -0
  165. /package/dist/ts4.2/{src/room → room}/defaults.d.ts +0 -0
  166. /package/dist/ts4.2/{src/room → room}/events.d.ts +0 -0
  167. /package/dist/ts4.2/{src/room → room}/participant/LocalParticipant.d.ts +0 -0
  168. /package/dist/ts4.2/{src/room → room}/participant/ParticipantTrackPermission.d.ts +0 -0
  169. /package/dist/ts4.2/{src/room → room}/participant/RemoteParticipant.d.ts +0 -0
  170. /package/dist/ts4.2/{src/room → room}/participant/publishUtils.d.ts +0 -0
  171. /package/dist/ts4.2/{src/room → room}/rpc.d.ts +0 -0
  172. /package/dist/ts4.2/{src/room → room}/stats.d.ts +0 -0
  173. /package/dist/ts4.2/{src/room → room}/timers.d.ts +0 -0
  174. /package/dist/ts4.2/{src/room → room}/track/LocalAudioTrack.d.ts +0 -0
  175. /package/dist/ts4.2/{src/room → room}/track/LocalTrackPublication.d.ts +0 -0
  176. /package/dist/ts4.2/{src/room → room}/track/LocalVideoTrack.d.ts +0 -0
  177. /package/dist/ts4.2/{src/room → room}/track/RemoteAudioTrack.d.ts +0 -0
  178. /package/dist/ts4.2/{src/room → room}/track/RemoteTrack.d.ts +0 -0
  179. /package/dist/ts4.2/{src/room → room}/track/RemoteTrackPublication.d.ts +0 -0
  180. /package/dist/ts4.2/{src/room → room}/track/RemoteVideoTrack.d.ts +0 -0
  181. /package/dist/ts4.2/{src/room → room}/track/Track.d.ts +0 -0
  182. /package/dist/ts4.2/{src/room → room}/track/TrackPublication.d.ts +0 -0
  183. /package/dist/ts4.2/{src/room → room}/track/create.d.ts +0 -0
  184. /package/dist/ts4.2/{src/room → room}/track/facingMode.d.ts +0 -0
  185. /package/dist/ts4.2/{src/room → room}/track/processor/types.d.ts +0 -0
  186. /package/dist/ts4.2/{src/room → room}/track/record.d.ts +0 -0
  187. /package/dist/ts4.2/{src/room → room}/track/types.d.ts +0 -0
  188. /package/dist/ts4.2/{src/room → room}/track/utils.d.ts +0 -0
  189. /package/dist/ts4.2/{src/test → test}/MockMediaStreamTrack.d.ts +0 -0
  190. /package/dist/ts4.2/{src/test → test}/mocks.d.ts +0 -0
  191. /package/dist/ts4.2/{src/utils → utils}/AsyncQueue.d.ts +0 -0
  192. /package/dist/ts4.2/{src/utils → utils}/browserParser.d.ts +0 -0
  193. /package/dist/ts4.2/{src/utils → utils}/cloneDeep.d.ts +0 -0
  194. /package/dist/ts4.2/{src/utils → utils}/dataPacketBuffer.d.ts +0 -0
  195. /package/dist/ts4.2/{src/utils → utils}/ttlmap.d.ts +0 -0
  196. /package/dist/ts4.2/{src/version.d.ts → version.d.ts} +0 -0
@@ -1,6 +1,7 @@
1
- import { AddTrackRequest, AudioTrackFeature, ConnectionQualityUpdate, JoinResponse, LeaveRequest, ParticipantInfo, ReconnectReason, ReconnectResponse, RequestResponse, Room, RoomMovedResponse, SessionDescription, SignalRequest, SignalTarget, SimulateScenario, SpeakerInfo, StreamStateUpdate, SubscribedQualityUpdate, SubscriptionPermissionUpdate, SubscriptionResponse, SyncState, TrackPermission, TrackPublishedResponse, TrackUnpublishedResponse, UpdateSubscription, UpdateTrackSettings, VideoLayer } from '@livekit/protocol';
1
+ import { AddTrackRequest, AudioTrackFeature, ConnectionQualityUpdate, JoinResponse, LeaveRequest, MediaSectionsRequirement, ParticipantInfo, ReconnectReason, ReconnectResponse, RequestResponse, Room, RoomMovedResponse, SessionDescription, SignalRequest, SignalResponse, SignalTarget, SimulateScenario, SpeakerInfo, StreamStateUpdate, SubscribedQualityUpdate, SubscriptionPermissionUpdate, SubscriptionResponse, SyncState, TrackPermission, TrackPublishedResponse, TrackUnpublishedResponse, UpdateSubscription, UpdateTrackSettings, VideoLayer } from '@livekit/protocol';
2
2
  import type { LoggerOptions } from '../room/types';
3
3
  import { AsyncQueue } from '../utils/AsyncQueue';
4
+ import { WebSocketStream } from './WebSocketStream';
4
5
  interface ConnectOpts extends SignalOptions {
5
6
  /** internal */
6
7
  reconnect?: boolean;
@@ -15,6 +16,7 @@ export interface SignalOptions {
15
16
  maxRetries: number;
16
17
  e2eeEnabled: boolean;
17
18
  websocketTimeout: number;
19
+ singlePeerConnection: boolean;
18
20
  }
19
21
  type SignalMessage = SignalRequest['message'];
20
22
  export declare enum SignalConnectionState {
@@ -54,8 +56,9 @@ export declare class SignalClient {
54
56
  onRequestResponse?: (response: RequestResponse) => void;
55
57
  onLocalTrackSubscribed?: (trackSid: string) => void;
56
58
  onRoomMoved?: (res: RoomMovedResponse) => void;
59
+ onMediaSectionsRequirement?: (requirement: MediaSectionsRequirement) => void;
57
60
  connectOptions?: ConnectOpts;
58
- ws?: WebSocket;
61
+ ws?: WebSocketStream;
59
62
  get currentState(): SignalConnectionState;
60
63
  get isDisconnected(): boolean;
61
64
  private get isEstablishingConnection();
@@ -71,11 +74,13 @@ export declare class SignalClient {
71
74
  private log;
72
75
  private loggerContextCb?;
73
76
  private _requestId;
77
+ private streamWriter;
74
78
  constructor(useJSON?: boolean, loggerOptions?: LoggerOptions);
75
79
  private get logContext();
76
80
  join(url: string, token: string, opts: SignalOptions, abortSignal?: AbortSignal): Promise<JoinResponse>;
77
81
  reconnect(url: string, token: string, sid?: string, reason?: ReconnectReason): Promise<ReconnectResponse | undefined>;
78
82
  private connect;
83
+ startReadingLoop(signalReader: ReadableStreamDefaultReader<string | ArrayBuffer>, firstMessage?: SignalResponse): Promise<void>;
79
84
  /** @internal */
80
85
  resetCallbacks: () => void;
81
86
  close(updateState?: boolean): Promise<void>;
@@ -113,6 +118,30 @@ export declare class SignalClient {
113
118
  private clearPingTimeout;
114
119
  private startPingInterval;
115
120
  private clearPingInterval;
121
+ /**
122
+ * Handles the successful connection to the signal server
123
+ * @param connection The WebSocket connection
124
+ * @param timeoutHandle The timeout handle to clear
125
+ * @param firstMessage Optional first message to process
126
+ * @internal
127
+ */
128
+ private handleSignalConnected;
129
+ /**
130
+ * Validates the first message received from the signal server
131
+ * @param firstSignalResponse The first signal response received
132
+ * @param isReconnect Whether this is a reconnection attempt
133
+ * @returns Validation result with response or error
134
+ * @internal
135
+ */
136
+ private validateFirstMessage;
137
+ /**
138
+ * Handles WebSocket connection errors by validating with the server
139
+ * @param reason The error that occurred
140
+ * @param validateUrl The URL to validate the connection with
141
+ * @returns A ConnectionError with appropriate reason and status
142
+ * @internal
143
+ */
144
+ private handleConnectionError;
116
145
  }
117
146
  export declare function toProtoSessionDescription(rsd: RTCSessionDescription | RTCSessionDescriptionInit, id?: number): SessionDescription;
118
147
  export {};
@@ -0,0 +1,29 @@
1
+ export interface WebSocketConnection<T extends ArrayBuffer | string = ArrayBuffer | string> {
2
+ readable: ReadableStream<T>;
3
+ writable: WritableStream<T>;
4
+ protocol: string;
5
+ extensions: string;
6
+ }
7
+ export interface WebSocketCloseInfo {
8
+ closeCode?: number;
9
+ reason?: string;
10
+ }
11
+ export interface WebSocketStreamOptions {
12
+ protocols?: string[];
13
+ signal?: AbortSignal;
14
+ }
15
+ /**
16
+ * [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) with [Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)
17
+ *
18
+ * @see https://web.dev/websocketstream/
19
+ */
20
+ export declare class WebSocketStream<T extends ArrayBuffer | string = ArrayBuffer | string> {
21
+ readonly url: string;
22
+ readonly opened: Promise<WebSocketConnection<T>>;
23
+ readonly closed: Promise<WebSocketCloseInfo>;
24
+ readonly close: (closeInfo?: WebSocketCloseInfo) => void;
25
+ get readyState(): number;
26
+ private ws;
27
+ constructor(url: string, options?: WebSocketStreamOptions);
28
+ }
29
+ //# sourceMappingURL=WebSocketStream.d.ts.map
@@ -1,3 +1,5 @@
1
+ import { SignalResponse } from '@livekit/protocol';
1
2
  export declare function createRtcUrl(url: string, searchParams: URLSearchParams): string;
2
3
  export declare function createValidateUrl(rtcWsUrl: string): string;
4
+ export declare function parseSignalResponse(value: ArrayBuffer | string): SignalResponse;
3
5
  //# sourceMappingURL=utils.d.ts.map
@@ -2,12 +2,16 @@ import type TypedEventEmitter from 'typed-emitter';
2
2
  import type RTCEngine from '../room/RTCEngine';
3
3
  import type Room from '../room/Room';
4
4
  import type { E2EEManagerCallbacks } from './events';
5
- import type { E2EEManagerOptions } from './types';
5
+ import type { DecryptDataResponseMessage, E2EEManagerOptions, EncryptDataResponseMessage } from './types';
6
6
  export interface BaseE2EEManager {
7
7
  setup(room: Room): void;
8
8
  setupEngine(engine: RTCEngine): void;
9
+ isEnabled: boolean;
10
+ isDataChannelEncryptionEnabled: boolean;
9
11
  setParticipantCryptorEnabled(enabled: boolean, participantIdentity: string): void;
10
12
  setSifTrailer(trailer: Uint8Array): void;
13
+ encryptData(data: Uint8Array): Promise<EncryptDataResponseMessage['data']>;
14
+ handleEncryptedData(payload: Uint8Array, iv: Uint8Array, participantIdentity: string, keyIndex: number): Promise<DecryptDataResponseMessage['data']>;
11
15
  on<E extends keyof E2EEManagerCallbacks>(event: E, listener: E2EEManagerCallbacks[E]): this;
12
16
  }
13
17
  declare const E2EEManager_base: new () => TypedEventEmitter<E2EEManagerCallbacks>;
@@ -19,7 +23,12 @@ export declare class E2EEManager extends E2EEManager_base implements BaseE2EEMan
19
23
  protected room?: Room;
20
24
  private encryptionEnabled;
21
25
  private keyProvider;
22
- constructor(options: E2EEManagerOptions);
26
+ private decryptDataRequests;
27
+ private encryptDataRequests;
28
+ private dataChannelEncryptionEnabled;
29
+ constructor(options: E2EEManagerOptions, dcEncryptionEnabled: boolean);
30
+ get isEnabled(): boolean;
31
+ get isDataChannelEncryptionEnabled(): boolean;
23
32
  /**
24
33
  * @internal
25
34
  */
@@ -36,6 +45,11 @@ export declare class E2EEManager extends E2EEManager_base implements BaseE2EEMan
36
45
  private onWorkerError;
37
46
  setupEngine(engine: RTCEngine): void;
38
47
  private setupEventListeners;
48
+ encryptData(data: Uint8Array): Promise<EncryptDataResponseMessage['data']>;
49
+ handleEncryptedData(payload: Uint8Array, iv: Uint8Array, participantIdentity: string, keyIndex: number): Promise<{
50
+ uuid: string;
51
+ payload: Uint8Array;
52
+ }>;
39
53
  private postRatchetRequest;
40
54
  private postKey;
41
55
  private postEnable;
@@ -95,7 +95,41 @@ export interface InitAck extends BaseMessage {
95
95
  enabled: boolean;
96
96
  };
97
97
  }
98
- export type E2EEWorkerMessage = InitMessage | SetKeyMessage | EncodeMessage | ErrorMessage | EnableMessage | RemoveTransformMessage | RTPVideoMapMessage | UpdateCodecMessage | RatchetRequestMessage | RatchetMessage | SifTrailerMessage | InitAck;
98
+ export interface DecryptDataRequestMessage extends BaseMessage {
99
+ kind: 'decryptDataRequest';
100
+ data: {
101
+ uuid: string;
102
+ payload: Uint8Array;
103
+ iv: Uint8Array;
104
+ participantIdentity: string;
105
+ keyIndex: number;
106
+ };
107
+ }
108
+ export interface DecryptDataResponseMessage extends BaseMessage {
109
+ kind: 'decryptDataResponse';
110
+ data: {
111
+ uuid: string;
112
+ payload: Uint8Array;
113
+ };
114
+ }
115
+ export interface EncryptDataRequestMessage extends BaseMessage {
116
+ kind: 'encryptDataRequest';
117
+ data: {
118
+ uuid: string;
119
+ payload: Uint8Array;
120
+ participantIdentity: string;
121
+ };
122
+ }
123
+ export interface EncryptDataResponseMessage extends BaseMessage {
124
+ kind: 'encryptDataResponse';
125
+ data: {
126
+ uuid: string;
127
+ payload: Uint8Array;
128
+ iv: Uint8Array;
129
+ keyIndex: number;
130
+ };
131
+ }
132
+ export type E2EEWorkerMessage = InitMessage | SetKeyMessage | EncodeMessage | ErrorMessage | EnableMessage | RemoveTransformMessage | RTPVideoMapMessage | UpdateCodecMessage | RatchetRequestMessage | RatchetMessage | SifTrailerMessage | InitAck | DecryptDataRequestMessage | DecryptDataResponseMessage | EncryptDataRequestMessage | EncryptDataResponseMessage;
99
133
  export type KeySet = {
100
134
  material: CryptoKey;
101
135
  encryptionKey: CryptoKey;
@@ -1,3 +1,5 @@
1
+ import type { DataPacket } from '@livekit/protocol';
2
+ import { EncryptedPacketPayload } from '@livekit/protocol';
1
3
  export declare function isE2EESupported(): boolean;
2
4
  export declare function isScriptTransformSupported(): boolean;
3
5
  export declare function isInsertableStreamSupported(): boolean;
@@ -24,4 +26,5 @@ export declare function ratchet(material: CryptoKey, salt: string): Promise<Arra
24
26
  export declare function needsRbspUnescaping(frameData: Uint8Array): boolean;
25
27
  export declare function parseRbsp(stream: Uint8Array): Uint8Array;
26
28
  export declare function writeRbsp(data_in: Uint8Array): Uint8Array;
29
+ export declare function asEncryptablePacket(packet: DataPacket): EncryptedPacketPayload | undefined;
27
30
  //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1,15 @@
1
+ import type { DecodeRatchetOptions, KeySet } from '../types';
2
+ import type { ParticipantKeyHandler } from './ParticipantKeyHandler';
3
+ export declare class DataCryptor {
4
+ private static sendCount;
5
+ private static makeIV;
6
+ static encrypt(data: Uint8Array, keys: ParticipantKeyHandler): Promise<{
7
+ payload: Uint8Array;
8
+ iv: Uint8Array;
9
+ keyIndex: number;
10
+ }>;
11
+ static decrypt(data: Uint8Array, iv: Uint8Array, keys: ParticipantKeyHandler, keyIndex?: number, initialMaterial?: KeySet, ratchetOpts?: DecodeRatchetOptions): Promise<{
12
+ payload: Uint8Array;
13
+ }>;
14
+ }
15
+ //# sourceMappingURL=DataCryptor.d.ts.map
@@ -14,9 +14,10 @@ export declare class ParticipantKeyHandler extends ParticipantKeyHandler_base {
14
14
  private currentKeyIndex;
15
15
  private cryptoKeyRing;
16
16
  private decryptionFailureCounts;
17
- private keyProviderOptions;
18
17
  private ratchetPromiseMap;
19
- private participantIdentity;
18
+ readonly participantIdentity: string;
19
+ /** @internal */
20
+ readonly keyProviderOptions: KeyProviderOptions;
20
21
  /**
21
22
  * true if the current key has not been marked as invalid
22
23
  */
@@ -1,10 +1,10 @@
1
1
  import type { VideoCodec } from '../..';
2
- export declare const VP8KeyFrame8x8: Uint8Array<ArrayBuffer>;
3
- export declare const H264KeyFrame2x2SPS: Uint8Array<ArrayBuffer>;
4
- export declare const H264KeyFrame2x2PPS: Uint8Array<ArrayBuffer>;
5
- export declare const H264KeyFrame2x2IDR: Uint8Array<ArrayBuffer>;
6
- export declare const H264KeyFrame2x2: Uint8Array<ArrayBuffer>[];
7
- export declare const OpusSilenceFrame: Uint8Array<ArrayBuffer>;
2
+ export declare const VP8KeyFrame8x8: Uint8Array;
3
+ export declare const H264KeyFrame2x2SPS: Uint8Array;
4
+ export declare const H264KeyFrame2x2PPS: Uint8Array;
5
+ export declare const H264KeyFrame2x2IDR: Uint8Array;
6
+ export declare const H264KeyFrame2x2: Uint8Array[];
7
+ export declare const OpusSilenceFrame: Uint8Array;
8
8
  /**
9
9
  * Pre-computed SHA-256 hashes for secure comparison operations
10
10
  */
@@ -1,5 +1,5 @@
1
1
  import { Mutex } from '@livekit/mutex';
2
- import { DataPacket_Kind, DisconnectReason, SubscriptionError, TrackType } from '@livekit/protocol';
2
+ import { DataPacket_Kind, DisconnectReason, Encryption_Type, SubscriptionError, TrackType } from '@livekit/protocol';
3
3
  import { LogLevel, LoggerNames, getLogger, setLogExtension, setLogLevel } from './logger';
4
4
  import DefaultReconnectPolicy from './room/DefaultReconnectPolicy';
5
5
  import type { ReconnectContext, ReconnectPolicy } from './room/ReconnectPolicy';
@@ -23,7 +23,7 @@ import RemoteVideoTrack from './room/track/RemoteVideoTrack';
23
23
  import { TrackPublication } from './room/track/TrackPublication';
24
24
  import type { LiveKitReactNativeInfo } from './room/types';
25
25
  import type { AudioAnalyserOptions } from './room/utils';
26
- import { compareVersions, createAudioAnalyser, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, isAudioTrack, isBrowserSupported, isLocalParticipant, isLocalTrack, isRemoteParticipant, isRemoteTrack, isVideoTrack, supportsAV1, supportsAdaptiveStream, supportsDynacast, supportsVP9 } from './room/utils';
26
+ import { compareVersions, createAudioAnalyser, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, isAudioCodec, isAudioTrack, isBrowserSupported, isLocalParticipant, isLocalTrack, isRemoteParticipant, isRemoteTrack, isVideoCodec, isVideoTrack, supportsAV1, supportsAdaptiveStream, supportsAudioOutputSelection, supportsDynacast, supportsVP9 } from './room/utils';
27
27
  import { getBrowser } from './utils/browserParser';
28
28
  export type { RpcInvocationData, PerformRpcParams } from './room/rpc';
29
29
  export { RpcError } from './room/rpc';
@@ -36,6 +36,8 @@ export * from './room/errors';
36
36
  export * from './room/events';
37
37
  export * from './room/track/Track';
38
38
  export * from './room/track/create';
39
+ export * from './room/token-source/TokenSource';
40
+ export * from './room/token-source/types';
39
41
  export { facingModeFromDeviceLabel, facingModeFromLocalTrack } from './room/track/facingMode';
40
42
  export * from './room/track/options';
41
43
  export * from './room/track/processor/types';
@@ -46,7 +48,7 @@ export type { DataPublishOptions, SimulationScenario, TranscriptionSegment, Chat
46
48
  export * from './version';
47
49
  export {
48
50
  /** @internal */
49
- attributes, ConnectionQuality, ConnectionState, CriticalTimers, DataPacket_Kind, DefaultReconnectPolicy, DisconnectReason, LocalAudioTrack, LocalParticipant, LocalTrack, LocalTrackPublication, LocalVideoTrack, LogLevel, LoggerNames, Participant, RemoteAudioTrack, RemoteParticipant, ParticipantKind, RemoteTrack, RemoteTrackPublication, RemoteVideoTrack, Room, SubscriptionError, TrackPublication, TrackType, compareVersions, createAudioAnalyser, getBrowser, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, getLogger, isBrowserSupported, setLogExtension, setLogLevel, supportsAV1, supportsAdaptiveStream, supportsDynacast, supportsVP9, Mutex, isAudioTrack, isLocalTrack, isRemoteTrack, isVideoTrack, isLocalParticipant, isRemoteParticipant, };
51
+ attributes, ConnectionQuality, ConnectionState, CriticalTimers, DataPacket_Kind, Encryption_Type, DefaultReconnectPolicy, DisconnectReason, LocalAudioTrack, LocalParticipant, LocalTrack, LocalTrackPublication, LocalVideoTrack, LogLevel, LoggerNames, Participant, RemoteAudioTrack, RemoteParticipant, ParticipantKind, RemoteTrack, RemoteTrackPublication, RemoteVideoTrack, Room, SubscriptionError, TrackPublication, TrackType, compareVersions, createAudioAnalyser, getBrowser, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, getLogger, isBrowserSupported, setLogExtension, setLogLevel, supportsAV1, supportsAdaptiveStream, supportsAudioOutputSelection, supportsDynacast, supportsVP9, Mutex, isAudioCodec, isAudioTrack, isLocalTrack, isRemoteTrack, isVideoCodec, isVideoTrack, isLocalParticipant, isRemoteParticipant, };
50
52
  export type { AudioAnalyserOptions, ElementInfo, LiveKitReactNativeInfo, ParticipantTrackPermission, AudioReceiverStats, AudioSenderStats, VideoReceiverStats, VideoSenderStats, ReconnectContext, ReconnectPolicy, };
51
53
  export { LocalTrackRecorder } from './room/track/record';
52
54
  //# sourceMappingURL=index.d.ts.map
@@ -10,6 +10,7 @@ export declare enum LogLevel {
10
10
  export declare enum LoggerNames {
11
11
  Default = "livekit",
12
12
  Room = "livekit-room",
13
+ TokenSource = "livekit-token-source",
13
14
  Participant = "livekit-participant",
14
15
  Track = "livekit-track",
15
16
  Publication = "livekit-track-publication",
@@ -68,16 +68,24 @@ export interface InternalRoomOptions {
68
68
  * allows for passing in your own AudioContext instance, too
69
69
  */
70
70
  webAudioMix: boolean | WebAudioSettings;
71
+ e2ee?: E2EEOptions;
71
72
  /**
72
73
  * @experimental
74
+ * Options for enabling end-to-end encryption.
73
75
  */
74
- e2ee?: E2EEOptions;
76
+ encryption?: E2EEOptions;
75
77
  loggerName?: string;
78
+ /**
79
+ * @experimental
80
+ * only supported on LiveKit Cloud
81
+ * and LiveKit OSS >= 1.9.2
82
+ */
83
+ singlePeerConnection: boolean;
76
84
  }
77
85
  /**
78
86
  * Options for when creating a new room
79
87
  */
80
- export interface RoomOptions extends Partial<InternalRoomOptions> {
88
+ export interface RoomOptions extends Partial<Omit<InternalRoomOptions, 'encryption'>> {
81
89
  }
82
90
  /**
83
91
  * @internal
@@ -52,6 +52,7 @@ export default class PCTransport extends EventEmitter {
52
52
  createAndSetAnswer(): Promise<RTCSessionDescriptionInit>;
53
53
  createDataChannel(label: string, dataChannelDict: RTCDataChannelInit): RTCDataChannel;
54
54
  addTransceiver(mediaStreamTrack: MediaStreamTrack, transceiverInit: RTCRtpTransceiverInit): RTCRtpTransceiver;
55
+ addTransceiverOfKind(kind: 'audio' | 'video', transceiverInit: RTCRtpTransceiverInit): RTCRtpTransceiver;
55
56
  addTrack(track: MediaStreamTrack): RTCRtpSender;
56
57
  setTrackCodecBitrate(info: TrackBitrateInfo): void;
57
58
  setConfiguration(rtcConfig: RTCConfiguration): void;
@@ -9,14 +9,15 @@ export declare enum PCTransportState {
9
9
  CLOSING = 4,
10
10
  CLOSED = 5
11
11
  }
12
+ type PCMode = 'subscriber-primary' | 'publisher-primary' | 'publisher-only';
12
13
  export declare class PCTransportManager {
13
14
  publisher: PCTransport;
14
- subscriber: PCTransport;
15
+ subscriber?: PCTransport;
15
16
  peerConnectionTimeout: number;
16
17
  get needsPublisher(): boolean;
17
18
  get needsSubscriber(): boolean;
18
19
  get currentState(): PCTransportState;
19
- onStateChange?: (state: PCTransportState, pubState: RTCPeerConnectionState, subState: RTCPeerConnectionState) => void;
20
+ onStateChange?: (state: PCTransportState, pubState: RTCPeerConnectionState, subState?: RTCPeerConnectionState) => void;
20
21
  onIceCandidate?: (ev: RTCIceCandidate, target: SignalTarget) => void;
21
22
  onDataChannel?: (ev: RTCDataChannelEvent) => void;
22
23
  onTrack?: (ev: RTCTrackEvent) => void;
@@ -28,10 +29,9 @@ export declare class PCTransportManager {
28
29
  private remoteOfferLock;
29
30
  private log;
30
31
  private loggerOptions;
31
- constructor(rtcConfig: RTCConfiguration, subscriberPrimary: boolean, loggerOptions: LoggerOptions);
32
+ constructor(rtcConfig: RTCConfiguration, mode: PCMode, loggerOptions: LoggerOptions);
32
33
  private get logContext();
33
34
  requirePublisher(require?: boolean): void;
34
- requireSubscriber(require?: boolean): void;
35
35
  createAndSendPublisherOffer(options?: RTCOfferOptions): Promise<void>;
36
36
  setPublisherAnswer(sd: RTCSessionDescriptionInit, offerId: number): Promise<boolean>;
37
37
  removeTrack(sender: RTCRtpSender): void | undefined;
@@ -43,6 +43,7 @@ export declare class PCTransportManager {
43
43
  ensurePCTransportConnection(abortController?: AbortController, timeout?: number): Promise<void>;
44
44
  negotiate(abortController: AbortController): Promise<void>;
45
45
  addPublisherTransceiver(track: MediaStreamTrack, transceiverInit: RTCRtpTransceiverInit): RTCRtpTransceiver;
46
+ addPublisherTransceiverOfKind(kind: 'audio' | 'video', transceiverInit: RTCRtpTransceiverInit): RTCRtpTransceiver;
46
47
  addPublisherTrack(track: MediaStreamTrack): RTCRtpSender;
47
48
  createPublisherDataChannel(label: string, dataChannelDict: RTCDataChannelInit): RTCDataChannel;
48
49
  /**
@@ -53,4 +54,5 @@ export declare class PCTransportManager {
53
54
  private updateState;
54
55
  private ensureTransportConnected;
55
56
  }
57
+ export {};
56
58
  //# sourceMappingURL=PCTransportManager.d.ts.map
@@ -1,8 +1,9 @@
1
1
  import type { AddTrackRequest, ConnectionQualityUpdate, JoinResponse, StreamStateUpdate, SubscriptionPermissionUpdate, SubscriptionResponse } from '@livekit/protocol';
2
- import { DataPacket, DataPacket_Kind, DisconnectReason, ParticipantInfo, RequestResponse, Room as RoomModel, RoomMovedResponse, SpeakerInfo, SubscribedQualityUpdate, TrackInfo, TrackUnpublishedResponse, Transcription } from '@livekit/protocol';
2
+ import { DataPacket, DataPacket_Kind, DisconnectReason, Encryption_Type, ParticipantInfo, RequestResponse, Room as RoomModel, RoomMovedResponse, SpeakerInfo, SubscribedQualityUpdate, TrackInfo, TrackUnpublishedResponse, Transcription } from '@livekit/protocol';
3
3
  import type TypedEventEmitter from 'typed-emitter';
4
4
  import type { SignalOptions } from '../api/SignalClient';
5
5
  import { SignalClient } from '../api/SignalClient';
6
+ import type { BaseE2EEManager } from '../e2ee/E2eeManager';
6
7
  import type { InternalRoomOptions } from '../options';
7
8
  import PCTransport from './PCTransport';
8
9
  import { PCTransportManager } from './PCTransportManager';
@@ -32,6 +33,8 @@ export default class RTCEngine extends RTCEngine_base {
32
33
  * @internal
33
34
  */
34
35
  latestRemoteOfferId: number;
36
+ /** @internal */
37
+ e2eeManager: BaseE2EEManager | undefined;
35
38
  get isClosed(): boolean;
36
39
  get pendingReconnect(): boolean;
37
40
  private lossyDC?;
@@ -152,9 +155,9 @@ export type EngineEventCallbacks = {
152
155
  closing: () => void;
153
156
  mediaTrackAdded: (track: MediaStreamTrack, streams: MediaStream, receiver: RTCRtpReceiver) => void;
154
157
  activeSpeakersUpdate: (speakers: Array<SpeakerInfo>) => void;
155
- dataPacketReceived: (packet: DataPacket) => void;
158
+ dataPacketReceived: (packet: DataPacket, encryptionType: Encryption_Type) => void;
156
159
  transcriptionReceived: (transcription: Transcription) => void;
157
- transportsCreated: (publisher: PCTransport, subscriber: PCTransport) => void;
160
+ transportsCreated: (publisher: PCTransport, subscriber?: PCTransport) => void;
158
161
  /** @internal */
159
162
  trackSenderAdded: (track: Track, sender: RTCRtpSender) => void;
160
163
  rtpVideoMapUpdate: (rtpMap: Map<number, VideoCodec>) => void;
@@ -1,4 +1,4 @@
1
- import { DataPacket_Kind, DisconnectReason, MetricsBatch, ParticipantPermission, ServerInfo, SipDTMF, SubscriptionError, TranscriptionSegment as TranscriptionSegmentModel } from '@livekit/protocol';
1
+ import { DataPacket_Kind, DisconnectReason, Encryption_Type, MetricsBatch, ParticipantPermission, ServerInfo, SipDTMF, SubscriptionError, TranscriptionSegment as TranscriptionSegmentModel } from '@livekit/protocol';
2
2
  import type TypedEmitter from 'typed-emitter';
3
3
  import 'webrtc-adapter';
4
4
  import type { InternalRoomOptions, RoomConnectOptions, RoomOptions } from '../options';
@@ -77,6 +77,7 @@ declare class Room extends Room_base {
77
77
  private incomingDataStreamManager;
78
78
  private outgoingDataStreamManager;
79
79
  private rpcHandlers;
80
+ get hasE2EESetup(): boolean;
80
81
  /**
81
82
  * Creates a new Room, the primary construct for a LiveKit session.
82
83
  * @param options
@@ -306,7 +307,7 @@ export type RoomEventCallbacks = {
306
307
  participantAttributesChanged: (changedAttributes: Record<string, string>, participant: RemoteParticipant | LocalParticipant) => void;
307
308
  activeSpeakersChanged: (speakers: Array<Participant>) => void;
308
309
  roomMetadataChanged: (metadata: string) => void;
309
- dataReceived: (payload: Uint8Array, participant?: RemoteParticipant, kind?: DataPacket_Kind, topic?: string) => void;
310
+ dataReceived: (payload: Uint8Array, participant?: RemoteParticipant, kind?: DataPacket_Kind, topic?: string, encryptionType?: Encryption_Type) => void;
310
311
  sipDTMFReceived: (dtmf: SipDTMF, participant?: RemoteParticipant) => void;
311
312
  transcriptionReceived: (transcription: TranscriptionSegment[], participant?: Participant, publication?: TrackPublication) => void;
312
313
  connectionQualityChanged: (quality: ConnectionQuality, participant: Participant) => void;
@@ -1,4 +1,5 @@
1
1
  import type { DataPacket } from '@livekit/protocol';
2
+ import { Encryption_Type } from '@livekit/protocol';
2
3
  import type { ByteStreamHandler, TextStreamHandler } from './StreamReader';
3
4
  export default class IncomingDataStreamManager {
4
5
  private log;
@@ -12,7 +13,7 @@ export default class IncomingDataStreamManager {
12
13
  unregisterByteStreamHandler(topic: string): void;
13
14
  clearHandlersAndControllers(): void;
14
15
  validateParticipantHasNoActiveDataStreams(participantIdentity: string): void;
15
- handleDataStreamPacket(packet: DataPacket): Promise<void>;
16
+ handleDataStreamPacket(packet: DataPacket, encryptionType: Encryption_Type): Promise<void>;
16
17
  private handleStreamHeader;
17
18
  private handleStreamChunk;
18
19
  private handleStreamTrailer;
@@ -52,7 +52,8 @@ export declare enum DataStreamErrorReason {
52
52
  DecodeFailed = 2,
53
53
  LengthExceeded = 3,
54
54
  Incomplete = 4,
55
- HandlerAlreadyRegistered = 7
55
+ HandlerAlreadyRegistered = 7,
56
+ EncryptionTypeMismatch = 8
56
57
  }
57
58
  export declare class DataStreamError extends LivekitError {
58
59
  reason: DataStreamErrorReason;
@@ -1,5 +1,5 @@
1
1
  import type { SipDTMF } from '@livekit/protocol';
2
- import { DataPacket_Kind, ParticipantInfo, ParticipantInfo_Kind as ParticipantKind, ParticipantPermission, ConnectionQuality as ProtoQuality, SubscriptionError } from '@livekit/protocol';
2
+ import { DataPacket_Kind, Encryption_Type, ParticipantInfo, ParticipantInfo_Kind as ParticipantKind, ParticipantPermission, ConnectionQuality as ProtoQuality, SubscriptionError } from '@livekit/protocol';
3
3
  import type TypedEmitter from 'typed-emitter';
4
4
  import type { StructuredLogger } from '../../logger';
5
5
  import type LocalTrackPublication from '../track/LocalTrackPublication';
@@ -124,7 +124,7 @@ export type ParticipantEventCallbacks = {
124
124
  localSenderCreated: (sender: RTCRtpSender, track: Track) => void;
125
125
  participantMetadataChanged: (prevMetadata: string | undefined, participant?: any) => void;
126
126
  participantNameChanged: (name: string) => void;
127
- dataReceived: (payload: Uint8Array, kind: DataPacket_Kind) => void;
127
+ dataReceived: (payload: Uint8Array, kind: DataPacket_Kind, encryptionType?: Encryption_Type) => void;
128
128
  sipDTMFReceived: (dtmf: SipDTMF) => void;
129
129
  transcriptionReceived: (transcription: TranscriptionSegment[], publication?: TrackPublication) => void;
130
130
  isSpeakingChanged: (speaking: boolean) => void;
@@ -0,0 +1,71 @@
1
+ import { TokenSourceResponse } from '@livekit/protocol';
2
+ import type { TokenSourceFetchOptions, TokenSourceResponseObject } from './types';
3
+ import { TokenSourceConfigurable, TokenSourceFixed } from './types';
4
+ /** A TokenSourceCached is a TokenSource which caches the last {@link TokenSourceResponseObject} value and returns it
5
+ * until a) it expires or b) the {@link TokenSourceFetchOptions} provided to .fetch(...) change. */
6
+ declare abstract class TokenSourceCached extends TokenSourceConfigurable {
7
+ private cachedFetchOptions;
8
+ private cachedResponse;
9
+ private fetchMutex;
10
+ private isSameAsCachedFetchOptions;
11
+ private shouldReturnCachedValueFromFetch;
12
+ getCachedResponseJwtPayload(): import("./types").TokenPayload | null;
13
+ fetch(options: TokenSourceFetchOptions): Promise<TokenSourceResponseObject>;
14
+ protected abstract update(options: TokenSourceFetchOptions): Promise<TokenSourceResponse>;
15
+ }
16
+ type LiteralOrFn = TokenSourceResponseObject | (() => TokenSourceResponseObject | Promise<TokenSourceResponseObject>);
17
+ export declare class TokenSourceLiteral extends TokenSourceFixed {
18
+ private literalOrFn;
19
+ constructor(literalOrFn: LiteralOrFn);
20
+ fetch(): Promise<TokenSourceResponseObject>;
21
+ }
22
+ type CustomFn = (options: TokenSourceFetchOptions) => TokenSourceResponseObject | Promise<TokenSourceResponseObject>;
23
+ export declare class TokenSourceCustom extends TokenSourceCached {
24
+ private customFn;
25
+ constructor(customFn: CustomFn);
26
+ protected update(options: TokenSourceFetchOptions): Promise<TokenSourceResponse>;
27
+ }
28
+ export type EndpointOptions = Omit<RequestInit, 'body'>;
29
+ export declare class TokenSourceEndpoint extends TokenSourceCached {
30
+ private url;
31
+ private endpointOptions;
32
+ constructor(url: string, options?: EndpointOptions);
33
+ private createRequestFromOptions;
34
+ protected update(options: TokenSourceFetchOptions): Promise<TokenSourceResponse>;
35
+ }
36
+ export type SandboxTokenServerOptions = {
37
+ baseUrl?: string;
38
+ };
39
+ export declare class TokenSourceSandboxTokenServer extends TokenSourceEndpoint {
40
+ constructor(sandboxId: string, options: SandboxTokenServerOptions);
41
+ }
42
+ export declare const TokenSource: {
43
+ /** TokenSource.literal contains a single, literal set of {@link TokenSourceResponseObject}
44
+ * credentials, either provided directly or returned from a provided function. */
45
+ literal(literalOrFn: LiteralOrFn): TokenSourceLiteral;
46
+ /**
47
+ * TokenSource.custom allows a user to define a manual function which generates new
48
+ * {@link TokenSourceResponseObject} values on demand.
49
+ *
50
+ * Use this to get credentials from custom backends / etc.
51
+ */
52
+ custom(customFn: CustomFn): TokenSourceCustom;
53
+ /**
54
+ * TokenSource.endpoint creates a token source that fetches credentials from a given URL using
55
+ * the standard endpoint format:
56
+ * FIXME: add docs link here in the future!
57
+ */
58
+ endpoint(url: string, options?: EndpointOptions): TokenSourceEndpoint;
59
+ /**
60
+ * TokenSource.sandboxTokenServer queries a sandbox token server for credentials,
61
+ * which supports quick prototyping / getting started types of use cases.
62
+ *
63
+ * This token provider is INSECURE and should NOT be used in production.
64
+ *
65
+ * For more info:
66
+ * @see https://cloud.livekit.io/projects/p_/sandbox/templates/token-server
67
+ */
68
+ sandboxTokenServer(sandboxId: string, options?: SandboxTokenServerOptions): TokenSourceSandboxTokenServer;
69
+ };
70
+ export {};
71
+ //# sourceMappingURL=TokenSource.d.ts.map
@@ -0,0 +1,68 @@
1
+ import { RoomConfiguration, TokenSourceRequest, TokenSourceResponse } from '@livekit/protocol';
2
+ import type { JWTPayload } from 'jose';
3
+ import type { ValueToSnakeCase } from '../../utils/camelToSnakeCase';
4
+ export type TokenSourceRequestObject = Required<NonNullable<ConstructorParameters<typeof TokenSourceRequest>[0]>>;
5
+ export type TokenSourceResponseObject = Required<NonNullable<ConstructorParameters<typeof TokenSourceResponse>[0]>>;
6
+ /** The `TokenSource` request object sent to the server as part of fetching a configurable
7
+ * `TokenSource` like {@link TokenSourceEndpoint}.
8
+ *
9
+ * Use this as a type for your request body if implementing a server endpoint in node.js.
10
+ */
11
+ export type TokenSourceRequestPayload = ValueToSnakeCase<TokenSourceRequestObject>;
12
+ /** The `TokenSource` response object sent from the server as part of fetching a configurable
13
+ * `TokenSource` like {@link TokenSourceEndpoint}.
14
+ *
15
+ * Use this as a type for your response body if implementing a server endpoint in node.js.
16
+ */
17
+ export type TokenSourceResponsePayload = ValueToSnakeCase<TokenSourceResponseObject>;
18
+ /** The payload of a LiveKit JWT token. */
19
+ export type TokenPayload = JWTPayload & {
20
+ name?: string;
21
+ metadata?: string;
22
+ attributes?: Record<string, string>;
23
+ video?: {
24
+ room?: string;
25
+ roomJoin?: boolean;
26
+ canPublish?: boolean;
27
+ canPublishData?: boolean;
28
+ canSubscribe?: boolean;
29
+ };
30
+ roomConfig?: RoomConfigurationObject;
31
+ };
32
+ export type RoomConfigurationObject = NonNullable<ConstructorParameters<typeof RoomConfiguration>[0]>;
33
+ /** A Fixed TokenSource is a token source that takes no parameters and returns a completely
34
+ * independently derived value on each fetch() call.
35
+ *
36
+ * The most common downstream implementer is {@link TokenSourceLiteral}.
37
+ */
38
+ export declare abstract class TokenSourceFixed {
39
+ abstract fetch(): Promise<TokenSourceResponseObject>;
40
+ }
41
+ export type TokenSourceFetchOptions = {
42
+ roomName?: string;
43
+ participantName?: string;
44
+ participantIdentity?: string;
45
+ participantMetadata?: string;
46
+ participantAttributes?: {
47
+ [key: string]: string;
48
+ };
49
+ agentName?: string;
50
+ agentMetadata?: string;
51
+ };
52
+ /** A Configurable TokenSource is a token source that takes a
53
+ * {@link TokenSourceFetchOptions} object as input and returns a deterministic
54
+ * {@link TokenSourceResponseObject} output based on the options specified.
55
+ *
56
+ * For example, if options.participantName is set, it should be expected that
57
+ * all tokens that are generated will have participant name field set to the
58
+ * provided value.
59
+ *
60
+ * A few common downstream implementers are {@link TokenSourceEndpoint}
61
+ * and {@link TokenSourceCustom}.
62
+ */
63
+ export declare abstract class TokenSourceConfigurable {
64
+ abstract fetch(options: TokenSourceFetchOptions): Promise<TokenSourceResponseObject>;
65
+ }
66
+ /** A TokenSource is a mechanism for fetching credentials required to connect to a LiveKit Room. */
67
+ export type TokenSourceBase = TokenSourceFixed | TokenSourceConfigurable;
68
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,5 @@
1
+ import type { TokenSourceResponse } from '@livekit/protocol';
2
+ import type { TokenPayload } from './types';
3
+ export declare function isResponseTokenValid(response: TokenSourceResponse): boolean;
4
+ export declare function decodeTokenPayload(token: string): TokenPayload;
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -114,7 +114,7 @@ export default abstract class LocalTrack<TrackKind extends Track.Kind = Track.Ki
114
114
  /** @internal */
115
115
  stopPreConnectBuffer(): void;
116
116
  /** @internal */
117
- getPreConnectBuffer(): ReadableStream<Uint8Array<ArrayBufferLike>> | undefined;
117
+ getPreConnectBuffer(): ReadableStream<Uint8Array> | undefined;
118
118
  getPreConnectBufferMimeType(): string | undefined;
119
119
  protected abstract monitorSender(): void;
120
120
  }